子查询
1.是一个查询语句中包含另一个查询语句
作用:作为条件
列如: 查询雇员的薪资高于“clark”的雇员信息
查询雇员薪资高于1500的雇员信息
select * from emp where sal>1500
语法:
select 查询内容
from 表
where 字段 operator(子查询)
-- (1) 标量子查询
指返回的是一个单一的值
列如: 查询雇员的薪资高于“clark”的雇员信息
select * from emp
where sal>(select sal from emp where ename='clark')
-- (2) 行子查询
指返回的结果是一行N列
列如:查询雇员表中部门职位与"ALLEN"相同的雇员信息
select * from emp where (deptno,job)=
(select deptno,job from emp where ename='allen')
--(3)列子查询
指返回的结果是多条数据
在列子查询中的操作符: in any all some EXISTS
不能使用单行操作符: >< >= <= !=
-- 1.使用in的列子查询
列如: 查询部门20中同部门10中职位相同的雇员信息查询部门10中有哪些职位
select job from emp where deptno=10
select * from emp
where job in (select job from emp where deptno=10)
and deptno =20
--2. 使用any或者是some列子查询
any:返回结果中的任何一个数据
some 是any的别名,很少使用
列如:查询雇员emp表中月薪低于任何一个clerk月薪的雇员信息
查询从事职位clerk的月薪
select sal from emp where job='clerk'
select * from emp
where sal<any(select sal from emp where job='clerk')
--3.使用all的列子查询
all 值返回结果中的所有数据
列如:查询雇员emp表中月薪低所有clerk月薪的雇员信息查询从事职位clerk的月薪
select * from emp
where sal>all(select sal from emp where job='clerk')
-- 4.使用exists列子查询
exists表示存在的意思
使用exists关键字时,子查询语句返回的并不是查询记录的结果集而时一个布尔类型的值
如果子查询有满足条件的记录则返回true ,则会执行主查询
如没有满足条件的记录返回false,则不会执行主查询
列如: 查询dept表中有雇员的部门信息
select * from dept
where exists(select ename from emp where deptno =dept.deptno)