# 多行子查询SELECT deptno
FROM emp
WHERE ename ='SMITH'-- 显示和smith同一个部门的人 SELECT*FROM emp
WHERE deptno =(-- 只返回一条用‘=’ SELECT deptno
FROM emp
WHERE ename ='SMITH')SELECT ename,job,sal,deptno
FROM emp
WHERE job IN(-- 关键词IN,因为返回的不止一条SELECTDISTINCT job -- distinct去重FROM emp
WHERE deptno =10)AND deptno !=10-- <>和!=都是不等-- 子查询当临时表使用SELECT cat_id ,MAX(shop_price)-- 当作临时表FROM ecs_goods
GROUPBY cat_id
SELECT goods_id,cat_id,goods_name,shop_price
FROM ecs_goods;SELECT goods_id,ecs_goods.cat_id,goods_name,shop_price
FROM(SELECT cat_id ,MAX(shop_price)AS max_price -- 当作临时表FROM ecs_goods
GROUPBY cat_id
)temp,ecs_goods
WHEREtemp.cat_id = ecs_goods.cat_id
ANDtemp.max_price = ecs_goods.shop_price
-- all操作符-- 比30号所有人工资高SELECT ename,sal,deptno
FROM emp
WHERE sal >ALL(SELECT sal FROM emp
WHERE deptno =30)-- any操作符-- 比30号其中一个人高SELECT ename,sal,deptno
FROM emp
WHERE sal >ANY(SELECT sal FROM emp
WHERE deptno =30)
多列子查询
# 多列子查询SELECT deptno,job
FROM emp
WHERE ename ='ALLEN'SELECT*FROM emp
WHERE(deptno,job)=(-- 要求有两列数据相等SELECT deptno,job
FROM emp
WHERE ename ='ALLEN')AND ename <>'ALLEN'-- 排除本人
练习
SELECT dname,dept.deptno,loc,temp.per_num AS'人数'FROM dept,(SELECTCOUNT(*)AS per_num,deptno
FROM emp
GROUPBY deptno
)tempWHEREtemp.deptno = dept.deptno
-- 表.*SELECTtemp.*,dname,loc
FROM dept,(SELECTCOUNT(*)AS per_num,deptno
FROM emp
GROUPBY deptno
)tempWHEREtemp.deptno = dept.deptno