概念:指嵌入在其他 sql 语句中的 select 语句,也叫做嵌套查询。
单行子查询
指只返回一行数据的子查询语句
查询 SMITH 同部门的所有员工
1、查询出 SMITH 的部门号
select deptno from emp WHERE ename = ‘SMITH‘;
2 、查询 SMITH 同部门的所有员工
SELECT * FROM emp WHERE deptno = (select deptno from emp WHERE ename = ‘SMITH‘);
(执行 sql 是从左到右扫描,如果有括号,括号里面的先被优先执行)
多行子查询
指返回多行数据的子查询语句
查询和部门 10 的工作相同的雇员的名字、岗位、工资和部门号
1、去重查询部门为 10 的工作
SELECT DISTINCT job FROM emp WHERE deptno = 10;
2、查询和部门 10 的工作相同的雇员的名字、岗位、工资和部门号
SELECT * FROM emp WHERE job IN (SELECT DISTINCT job FROM emp WHERE deptno = 10);
(不能用 job = **,因为等号是一对一的)
在多行子查询中使用 all 操作符
查询工资比部门 30 的所有员工的工资高的员工的姓名、工资和部门号
SELECT ename, sal, deptno FROM emp WHERE sal > all (SELECT sal FROM emp WHERE deptno = 30);
还可以用函数 MAX 查询
SELECT ename, sal, deptno FROM emp WHERE sal > (SELECT MAX(sal) FROM emp WHERE deptno = 30); (执行效率上, 函数高得多)
在多行子查询中使用 ANY 操作符
查询工资比部门 30 的任意一个员工的工资高的员工姓名、工资和部门号
SELECT ename, sal, deptno FROM emp WHERE sal > ANY (SELECT sal FROM emp WHERE deptno = 30);
今天笔记做到这,后续有空继续。
原文:https://www.cnblogs.com/stephen-java/p/10816713.html