前几节课中我们渐渐的对oracle的知识,有了进一步的了解与掌握,随着时间的推移,在这节课程中我们来讲解SQL子查询的知识,希望通过授课中的内容对你有所帮助!
- 子查询概念:当一个查询的结果是另一个查询的条件时,称之为子查询。
- 使用子查询注意事项:
- 子查询可以嵌套多层
- 子查询需要圆括号()括起来
- 子查询语法:
- SELECTselect_list
- FROMtable
- WHEREexproperator
- (SELECTselect_list
- FROMtable);
- ?子查询(内查询)在主查询之前一次执行完成。
- ?子查询的结果被主查询使用(外查询)。
- 举例:查询员工的工资大于JONES的员工信息
- 分析过程如下:
- 首先:查询JONES的员工工资是多少:结果2975
- SQL>selectsalfromempwhereename='JONES';
- 实际上我们要查询的是:薪资大于2975的员工的信息写法如下:
- SQL>select*fromempwheresal>2975;
- //综合以上写出子查询的结果如下:
- SQL>select*fromempwheresal>(selectsalfromempwhereename='JONES');
- 注意:
- ?子查询要包含在括号内。
- ?将子查询放在比较条件的右侧。
- 根据查询的结果(内部嵌套查询的结果)把子查询的类型分为单行子查询与多行子查询,
- 注意:
- ?单行操作符对应单行子查询,多行操作符对应多行子查询。
- 单行操作符
- >、>=、<、<=、<>、=
- 举例:
- //查询编号7876相同职位的员工信息并且薪资大于编号为7521的薪资的员工信息
- SQL>select*fromempwherejob=(selectjobfromempwhereempno=7876)andsal>(selectsalfromempwhereempno=7521);
- //子查询含有组函数
- SQL>select*fromempwheresal>(selectavg(nvl(sal,0))fromemp);
- //子查询含有having子句查询部门的最小工资大于20号部门最小工资的部门号及最小工资数
- SQL>selectdeptno,min(sal)fromempgroupbydeptnohavingmin(sal)>(selectmin(sal)fromempwheredeptno=20);
- 备注:子查询可以返回空行没要查询到结果是可以的。
- 多行子查询
- ?返回多行。
- ?使用多行比较操作符。
- 操作符如下图:
- 操作符描述
- In等于列表中的任何一个
- Any子查询返回的任意一个值比较相同还有some
- All和子查询返回的所有值比较
- Exists
- //查询薪水小于工作岗位CLERK的任何一个薪资的员工信息并且不包含工作岗位为CLERK的员工信息
- SQL>select*fromempwheresal<any(selectsalfromempwherejob='CLERK')andjob<>'CLERK';
- //all与所有值比较>all代表的是大于查询结果的最大值
- SQL>select*fromempwheresal>all(selectsalfromempwherejob='CLERK')andjob<>'CLERK';
- //查询岗位与部门编号为10相同的员工信息不包含自己。
- SQL>select*fromempwherejobin(selectjobfromempwheredeptno=10)anddeptno<>10;
- 只做思考?
- SQL>select*fromempwhereexists(select*fromdept);
- EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
- ----------------------------------------------------------------
- 7369SMITHCLERK79021980-12-17800.0020
- 7499ALLENSALESMAN76981981-2-201600.00300.0030
- 7521WARDSALESMAN76981981-2-221250.00500.0030
- …..
- SQL>select*fromempwhereexists(select*fromdeptwheredeptno=80);
- EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
- ----------------------------------------------------------------
- 以上内容版权归redarmy_chen所有,如需转载请附带出处,如有疑问请发送邮件至redarmy_chen@qq.com