一、子查询
1.含义:出现在其他语句内部的select语句,称为子查询或内查询。内部嵌套其他select语句的查询,称为外查询或主查询。
select 字段1
from 表
where 字段2 in (
select 字段2 from 表
where 字段3);
2.分类
按子查询出现的位置:
select后面:仅支持标量子查询
from后面:支持表子查询
where或having后面:标量子查询、列子查询、行子查询
exists后面(相关子查询):表子查询
按结果集的行列数不同:
标量子查询(结果集只有一行一列)
列子查询(结果集只有一列多行)
行子查询(结果集只有一行多列)
表子查询(结果集一般为多行多列)
3.where或having后面
特点:
①子查询放在小括号内
②子查询一般放在条件的右侧
③标量子查询,一般搭配着单行操作符使用。> < >= <= = <>
④列子查询,一般搭配着多行操作符的使用 in、any/some、all
⑤子查询的执行优先于主查询的执行。
3.1 标量子查询
select 字段
form 表
where 字段条件(
select 字段
from 表
where 条件
);
例如:
3.2 列子查询(多行子查询)
select 【distinct】字段
from 表
where 字段 多行操作符(
select 【distinct】 字段
from 表
where 字段条件
);
4.select后面
标量子查询
select 表1.字段,(
select 字段
from 表2
where 表1.字段 = 表2.字段
)
from 表1
4.from 后面
将子查询结果充当一张表,要求必须起别名
select 别名1.字段1,别名2.字段2
from(
select 字段【函数】 别名3,字段
from 表1
【group by 字段】
) 别名1
inner join 字段3
on 别名1.别名3 【between 字段4 and 字段5】;
5.exists 后面
语法:
select exists(完整的查询语句);
结果:0或者1
二、分页查询
应用场景:当要显示的数据,一页显示不全,需要分页提交sql请求
语法:
select 查询列表
from 表
【join type join 表2
on 连接条件
where 筛选条件
group by 分组字段
having 分组后的筛选
order by 排序的字段】
limit offset,size;
offset 要显示条目的起始索引(起始索引从0开始)
size 要显示的条目个数
特点:limit语句放在查询语句的最后,执行也在最后
公式:limit (page-1)*size,size;
三、联合查询
union 联合 合并:将多条查询语句的结果合并成一个结果
语法:
查询语句1
union
查询语句2
union
...
特点:
1.要求多条查询语句的查询列数是一致的!
2.要求多条查询语句的查询的每一列的类型和顺序最好一致
3.union关键字默认去重,如果使用 union all 可以包含重复项。
应用场景:要查询的结果来自与多个表,且多个表没有直接的连接关系,但查询的信息一致时
案例: