一、子查询
子查询(内查询):出现在其他语句中的select语句
主查询(外查询):外部的查询语句
1.子查询可出现的位置:
① Select 后面:仅支持标量子查询(结果集只有一行一列)
② From后面:支持表子查询(结果集一般为多行多列)
③ Where后面:支持标量子查询、列子查询(结果集只有一列多行)、行子查询(结果集有一行多列)
④ Having后面:同where
⑤ Exists后面 :支持表子查询
2.子查询应用在Where或having后面
特点:
子查询放在小括号内
子查询一般放在条件的右侧
标量子查询,一般搭配着单行操作符(><=<>)使用;列子查询一般搭配着多行操作符(in、any、some、all)使用
① 标量子查询
例:
Select min(salary)
From employee
Group by department
Having salary>(
Select min(salary)
From employee
Where department_id=50);
② 列子查询
多行操作符:in/not in:等于列表中的任意一个
Any/some :和子查询返回的某一个值比较
All :和子查询返回的所有值比较
例:
Select last_name
From employee
Where department_id in (
Select department_id
From employee
Where location_id in (1400,1700));
③ 行子查询
要求所有筛选条件使用相同的符号,如都用=、>
例:
Select *
From employee
Where (employ_id,salary)=(
Select min(employ_id),max(salary)
From employee) ;
3.子查询应用在select后面
例:
Select department.,(
Select count()
From employee
Where employee.department_id=department.department_id)
From department ;
4.子查询应用在from后面
将子查询结果充当一张表时,必须起别名
例:
Select agdep.*,g.grade_level
From (
Select avg(salary) ag,department_id
From employee
Group by department_id) ag_dep
Inner join job_grades as j
On ag_dep.ag between lowest_sal and highest_sal;
5.子查询应用在exits后面:相关子查询
Exits(完整的查询语句)结果为1或0
先查询外查询,再根据子查询结果过滤
例:
Select department_id
From departments as d
Where exits(
Select *
From employees e
Where d. department_id=e. department_id);
二、分页查询
当要显示的数据一页显示不全,需要分页提交SQL请求
基本语法:
Select 查询列表
From 表
Where 筛选条件
Order by排序
Limit offset,size
Offset 表示要显示条目的起始索引(注意:这里索引从0开始)
Size 表示要显示的条目个数
Limit语句放在查询语句最后,其执行和语法都是最后
分页查询的公式:
要显示的页数page,每页的条目数size
Select 查询列表
From表
Limit(page-1)*size,size
例:
Select *
From employee
Limit 10,15;
三 、联合查询
将多条查询语句的结果合并为一个结果,适用于要查询的结果来自于多个表,且多个表没有直接的连接关系,但查询的信息一致的情景。
特点:
要求多条查询语句的查询列数一致
要求多条查询语句的每一列的类型和顺序最好一致
Union关键字默认去重,使用union all 可以保留重复项
基本语法:
查询语句1
Union
查询语句2
Union
……
例:
Select *
From employee
Where email like ‘%a%’
Union
Select *
From employee
Where department_id>90;