17.子查询

2018-12-21  本文已影响40人  Liuzhl
SELECT * FROM emp WHERE sal = MAX(sal)
SELECT * 
FROM (子查询)
WHERE (子查询)
子查询在结果后作为表存在
SELECT *
FROM (SELECT * FROM emp WHERE job = '销售员') e
WHERE sal = (SELECT MAX(sal) FROM (SELECT * FROM emp WHERE job = '销售员') j);
SELECT * 
FROM emp 
WHERE job = '销售员' 
ORDER BY sal DESC 
LIMIT 1;
子查询在where后作为条件存在
单行单列

题目:查询最高工资的员工
第一步:查询出最高工资,得到一个单行单列的结果

SELECT MAX(sal) FROM emp

第二步:查询出工资=最高工资的员工

SELECT * FROM emp WHERE sal = (SELECT MAX(sal) FROM emp)
单行多列

题目:查询所有工作和上级与韦一笑一样的员工
第一步:查询出韦一笑的工作和上级, 得到一个单行多列的结果

SELECT job, mgr FROM emp WHERE ename = '韦一笑';

第二步:查询出与韦一笑工作和上级相同的人

SELECT * FROM emp WHERE (job, mgr) IN (SELECT job, mgr FROM emp WHERE ename = '韦一笑');
多行单列

题目:查询出工资比20部门所有人/某一人高的员工信息
第一步:查询出20部门的所有人的工资,得到一个多行单列的结果

SELECT sal FROM emp WHERE deptno = 20;

第二步:查询比里面所有人工资都高的人,注意ALL关键字的使用

SELECT * FROM emp WHERE sal > ALL (SELECT sal FROM emp WHERE deptno = 20);

第三步:查询出比里面某一人工资高的人,注意ANY关键字的使用

SELECT * FROM emp WHERE sal > ANY (SELECT sal FROM emp WHERE deptno = 20);
多行多列

常用在from后面作为表存在,前面已经有例子

上一篇 下一篇

猜你喜欢

热点阅读