一、子查询
1、子查询在where子句中
(1)实例: 查找和SCOTT同职位的员工
思路分析:
1.和xx怎么样,与xx怎么样,比xx怎么样,大于,小于,等于,是,不是,为,等大范围过滤的条件:肯定要用到where
2.和SCOTT同职位 要用到where,SCOTT同职位?我们到现在还不知道SCOTT是啥子情况,先把SCOTT的情况查询出来,这就是子查询。
3.重点是后面的员工,我们最终要查询的是员工,而不是SCOTT同职位,所以是个主查询。
4.其实where条件过滤后面跟的就是实实在在的东西,
(1)如where sal > 100 100是实在存在的东西
(2)如 where job = SCOTT同职位, 因为我们需要知道SCOTT同职位 是实在存在的东西,但是我们现在真的不知道它是个啥,也就是说它不实在,那么就得查询出来,它是个啥,把它变成实在的东西。
select job from emp where ename = ‘SCOTT’;
5.因此,where前面的select查询里的东西是要上台面的,是主查询,跟在where后面的条件的东西必须是个实在的东西,如果不是,那就把它查询出来变成实在的东西,所以where后面需要通过查询变成实在的东西就是个子查询。
6. 主查询和子查询之间用 where job = 这样的语句连起来。
(2)SQL查询语句:
1.where后面的子查询
select job from emp where ename = ‘SCOTT’;
2.主查询 select
select ename,job from emp;
3.主查询和子查询结合
select ename,job from emp where job = (select job from emp where ename = ‘SCOTT’);
查询结果:
其实,3.中的SQL语句已经能够成功查询出结果了。但是请看下面第4.说明。
4.子查询就是个where过滤条件,已经固定。主查询中出现了job,子查询中也有job,二者要区分开来,不然
谁知道你这个job是主查询里要查询的job还是子查询中的job。
总结起来:子查询固定,主查询防止混淆,进行改善。
这样看起来,SQL语句结构更合理,舒适。e就相当于emp的一个实例一样,以后建议使用4,尽管3也是对的。
select e.ename,e.job from emp e where e.job = (select job from emp where ename = ‘SCOTT’);
查询结果:
(3)多子查询
查询出部门中有SALESMAN但职位不是SALESMAN的员工的信息:
子查询:select dept