Oracle-子查询实例
发布时间:2020-12-12 13:20:10 所属栏目:百科 来源:网络整理
导读:子查询的应用范围: WHERE: 一般返回单行单列,单行多列,多行单列 HAVING:子查询如果出现在HAVING中,只有一种情况就是子查询返回单行单列数据,且需要进行统计函数计算 FROM:返回多行多列(表结构) SELECT:返回单行单列,较少使用 ? 范例1:查询低于公
子查询的应用范围: WHERE: 一般返回单行单列,单行多列,多行单列 HAVING:子查询如果出现在HAVING中,只有一种情况就是子查询返回单行单列数据,且需要进行统计函数计算 FROM:返回多行多列(表结构) SELECT:返回单行单列,较少使用 ? 范例1:查询低于公司平均工资的雇员信息 1. 先计算出平均工资: SELECT AVG(sal) FROM emp 2. 上面的查询结果返回单行单列数据,可以用WHERE语句子查询 SELECT * FROM emp WHERE sal < (SELECT AVG(sal) FROM emp); 范例2:查询出公司最早雇佣的雇员信息 1. 查询出最早的雇佣日期: SELECT MIN(hiredate) FROM emp 2. 返回单行单列数据,可用于WHERE子句 SELECT * FROM emp WHERE hiredate = (SELECT MIN(hiredate) FROM emp); 范例3:与 SCOTT 从事同一工作,且工资相同的雇员信息 1. 查询出SCOTT的工作和工资 SELECT job,sal FROM emp WHERE ename = ‘SCOTT‘ 2.返回单行多列,可以用WHERE子句 SELECT * FROM emp WHERE (job,sal) = (SELECT job,sal FROM emp WHERE ename = ‘SCOTT‘) AND ename <> ‘SCOTT‘; 子查询如果返回多行多列的数据(表的形式),这类判断一般有三个操作符(IN,ANY,ALL) ? IN的用法:指的是与子查询返回的内容相同 注:子查询中不能返回 null,将不会有任何的查询结果出现 SELECT * FROM emp WHERE sal IN (SELECT sal FROM emp WHERE job = ‘MANAGER‘); =ANY操作:功能等于 IN SELECT * FROM emp WHERE sal =ANY (SELECT sal FROM emp WHERE job = ‘MANAGER‘); >ANY操作:大于子查询结果的最小值 SELECT * FROM emp WHERE sal >ANY (SELECT sal FROM emp WHERE job = ‘MANAGER‘); <ANY操作:小于子查询结果的最大值 SELECT * FROM emp WHERE sal <ANY (SELECT sal FROM emp WHERE job = ‘MANAGER‘); ALL操作之 >ALL:大于子查询结果的最大值 ALL操作之 <ALL:大于子查询结果的最小值 ? 子查询之HAVING: 范例1:查询高于平均工资的职位名称,职位人数,平均工资 1.写子查询语句,即确定平均工资 SELECT AVG(sal) FROM emp 2.要使用统计函数,所以只能在HAVING语句使用子查询 SELECT job,count(empno),avg(sal) FROM emp 子查询之FROM: 范例1:查询出每个部门名称,位置,部门人数 1. 确定要使用的数据表: emp,dept 2. 查询部门编号,名称,位置只需要dept表 SELECT deptno,dname,loc FROM dept; 3. 查询部门编号,人数,只需要emp表 SELECT deptno,count(empno) FROM emp GROUP BY deptno; 4.返回的数据可以在deptno这个字段上找到联系 SELECT d.dname,d.loc,temp.count FROM dept d,temp (SELECT deptno,count(empno) count FROM emp GROUP BY deptno) temp WHERE d.deptno = temp.deptno(+); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |