一、插入
1.方式一
insert into 表名(字段名) values(值)
- 特点
- 要求值的类型和字段的类型要一致或兼容
- 字段的个数和顺序不一定与原始表中的字段个数和顺序一致,但必须保证值和字段一一对应
- 假如表中有可以为null的字段,注意可以通过以下两种方式插入null值
①字段和值都省略
②字段写上,值使用null- 字段和值的个数必须一致
- 字段名可以省略,默认所有列
2.方式二
insert into 表名 set 字段名=值
3. 俩种方式的区别
- 方式一支持插入多行,方式二不支持
insert into 表名(字段名,…) values(值,…),(值,…)
- 方式一支持子查询,方式二不支持
insert into 表名 查询语句
二、修改
1.修改单表的语法
update 表名 set 字段名=值 【where 筛选条件】
2. 修改多表的语法
update 表1 别名
left|right|inner join 表2 别名
on 连接条件
set 字段=值,字段=值 【where 筛选条件】;
三、删除
1.使用delect
- 删除单表的记录
delete from 表名 【where 筛选条件】【limit 条目数】
- 级联删除[补充]
delete 别名1, 别名2 from 表1 别名
inner|left|right join 表2 别名
on 连接条件 【where 筛选条件】
2.使用truncate
truncate table 表名
3.delect与truncate对比
delect | truncate |
---|---|
delete删除后,如果再插入,标识列从断点开始 | truncate删除后,如果再插入,标识列从1开始 |
delete可以添加筛选条件 | truncate不可以添加筛选条件 |
delect效率较低 | truncate效率较高 |
delete可以返回受影响的行数 | truncate没有返回值 |
delete可以回滚 | truncate不可以回滚 |
1.truncate删除后,如果再插入,标识列从1开始
delete删除后,如果再插入,标识列从断点开始
2.delete可以添加筛选条件
truncate不可以添加筛选条件
3.truncate效率较高
4.truncate没有返回值
delete可以返回受影响的行数
5.truncate不可以回滚
delete可以回滚
四、查询
1.基础查询
selete 查询列表 from 表名
- 特点
- 查询列表可以是字段、常量、表达式、函数,也可以是多个
- 查询结果是一个虚拟表
2.条件查询
select 查询列表 from 表名 where 筛选条件
- 筛选条件的分类
简单条件运算符
> < = <> != >= <= <=>安全等于
逻辑运算符
- && and
- || or
- ! not
模糊查询
- like:一般搭配通配符使用,可以判断字符型或数值型
- 通配符:%任意多个字符,_任意单个字符
3.排序查询
select 查询列表 from 表名 where 筛选条件 order by asc|desc
- 特点
- asc :升序,如果不写默认升序
desc:降序- 排序列表 支持 单个字段、多个字段、函数、表达式、别名
- order by的位置一般放在查询语句的最后(除limit语句之外)
4.分组查询
select 查询列表 from 表名
where 筛选条件
group by 分组字段
having 分组后的筛选
order by asc|desc
5. 连接查询
select 查询列表 from 表名1
inner|left|right|full join 表名2
on 连接条件
where 筛选条件
group by 分组字段
having 分组后的筛选
order by asc|desc
- sql92与sql99区别
sql92 | sql99(推荐使用) | |
---|---|---|
内连接 | 支持 | 支持 |
外连接 | 支持一部分(Oralce、SQL Server),MySQL不支持 | 支持 |
交叉连接 | 不支持 | 支持 |
语法 | select 查询列表 from 表1 别名,表2 别名 where 表1.key=表2.key 【and 筛选条件】 【group by 分组字段】 【having 分组后的筛选】 【order by 排序字段】 | select 查询列表 from 表1 别名 【inner/left/right/full/cross】 join 表2 别名 on 连接条件 where 筛选条件 group by 分组列表 having 分组后的筛选 order by 排序列表 |
- 分类
内连接 | 外连接 | 交叉连接 |
---|---|---|
等值连接 | 左外连接 | 类似于笛卡尔乘积 |
非等值连接 | 右外连接 | |
自连接 | 全连接(MySQL不支持) |
6. 分页查询
select 查询列表 from 表名1
inner|left|right|full join 表名2
on 连接条件
where 筛选条件
group by 分组字段
having 分组后的筛选
order by asc|desc
limit (page-1) size
- 注意:其中page为显示的页数,每一页条目数为size
7. 子查询
- 含义
嵌套在其他语句内部的select语句称为子查询或内查询
外面的语句可以是insert、update、delete、select等,一般select作为外面语句较多
外面如果为select语句,则此语句称为外查询或主查询
- 分类
- 按出现位置
select后面:
- 仅仅支持标量子查询
from后面:
- 表子查询
where或having后面
- 标量子查询
- 列子查询
- 行子查询
exists后面:
- 标量子查询
- 列子查询
- 行子查询
- 表子查询
- 按结果集的行列
标量子查询(单行子查询):结果集为一行一列
列子查询(多行子查询):结果集为多行一列
行子查询:结果集为多行多列
表子查询:结果集为多行多列
- 示例
where或having后面
- 标量子查询
案例:查询最低工资的员工姓名和工资
①最低工资select min(salary) from employees
②查询员工的姓名和工资,要求工资=①
select last_name,salary from employees where salary=( select min(salary) from employees );
- 列子查询
案例:查询所有是领导的员工姓名
①查询所有员工的 manager_idselect manager_id from employees
②查询姓名,employee_id属于①列表的一个
select last_name from employees where employee_id in( select manager_id from employees );
8.联合查询
查询语句1
union 【all】
查询语句2
union 【all】
...
-
定义
union:合并、联合,将多次查询结果合并成一个结果 -
意义
- 将一条比较复杂的查询语句拆分成多条语句
- 适用于查询多个表的时候,查询的列基本是一致
- 特点
- 要求多条查询语句的查询列数必须一致
- 要求多条查询语句的查询的各列类型、顺序最好一致
- union 去重,union all包含重复项