子查询
###查询工资 高于 JONES 的员工
(1)先查JONES的工资。
select sal from emp where ename = 'JONES';
(2)他的工资作为条件
select * from emp where sal > (第一步得到工资)
(3)合并
select
*
from
emp
where
sal > (select sal from emp where ename = 'JONES');
##查询与SCOTT同一个部门的员工
select
*
from
emp
where
deptno = (select deptno from emp where ename = 'SCOTT');
##工资高于30号部门所有人的员工信息
##(1)查询30部门的所有人的工资
select sal from emp where deptno = 30;
##(2)查询高于30部门所有员工的信息
select
*
from
emp
where
sal > ALL (第一步所有的值)
##(3)合并
select
*
from
emp
where
sal > ALL (select sal from emp where deptno = 30);
=============多行多列============
##查询 工作(job) 和 工资(sal) 与 MARTIN 完全一样的员工信息
#(1)查看MARTIN的 工作和工资
select job,sal from emp where ename = "MARTIN";
+----------+---------+
| job | sal |
+----------+---------+
| SALESMAN | 1250.00 |
+----------+---------+
| SALESMAN | 150.00 |
+----------+---------+
#(2)根据员工信息
select
*
from
emp
where
(job,sal) in (第一步结果)
##(3)合并之后
select
*
from
emp
where
(job,sal) in (select job,sal from emp where ename = "MARTIN") ;
==================多行单列--------
##找出有员工的部门信息
##(1)找出所有 有员工的部门ID
select distinct deptno from emp;
+--------+
| deptno |
+--------+
| 30 |
| 20 |
| 10 |
+--------+
##(2)找部门信息
select * from dept where deptno in (第一步的结果)
##(3)合并
select * from dept where deptno in (select distinct deptno from emp);
##查询有2个以上直接下属的员工信息
##(1)找出各个领导的下属人数
select mgr, count(*) as cnt from emp group by mgr ;
+------+-----+
| mgr | cnt |
+------+-----+
| NULL | 1 |
| 7566 | 2 |
| 7698 | 5 |
| 7782 | 1 |
| 7788 | 1 |
| 7839 | 3 |
+------+-----+
select
t.mgr,t.cnt
from
(
select mgr, count(*) as cnt from emp group by mgr
) t
where
t.cnt > 2;
+------+-----+
| mgr | cnt |
+------+-----+
| 7698 | 5 |
| 7839 | 3 |
+------+-----+

浙公网安备 33010602011771号