Oracle笔记(四)
2015-11-18 12:49
483 查看
子查询:
为其他sql语句提供数据。有时候我们在执行某一条sql语句时需要的数据不是确定值,必须要先查询一次表的到,那么先执行的这个查询语句往往是嵌套实际要执行的sql语句之中,为其提供数据的,那么这个查询语句就是子查询。
查询与BLAKE相同部门人的姓名
SELECT ename ,deptno FROM emp_tzm where deptno = (SELECT deptno FROM emp_tzm where ename = 'BLAKE')
子查询根据查询结果的字段数量与记录数分为:
单行单列子查询
多行单列子查询
多行多列子查询
其中单列子查询常用与WHERE中作为过滤条件中
而多列常当作一张表看待出现在FROM子句中
查找和SCOOT同职位的员工
SELECT ename FROM emp_tzm e WHERE job = (SELECT job FROM emp_tzm WHERE ename = 'SCOTT');
查找比平均薪水高的员工
SELECT ename,sal FROM emp_tzm e WHERE sal>(SELECT AVG(sal) FROM emp_tzm);
查看与SALESMAN同部门的其他职位
SELECT ename ,job ,deptno FROM emp_tzm WHERE deptno IN (SELECT deptno FROM emp_tzm WHERE job = 'SALESMAN') AND job <> 'SALESMAN'
EXISTS 关键子后面根一个子查询,只要该查询能够查询出至少一条记录,那么就会返回true
查看有员工的部门
SELECT deptno ,dname FROM dept_tzm d WHERE EXISTS(SELECT * FROM emp_tzm e WHERE d.deptno = e.deptno);
查询列出最低薪水高于部门30的最低薪水的部门信息
SELECT MIN(sal),deptno FROM emp GROUP BY deptno HAVING MIN(sal)>(SELECT MIN(sal)FROM emp WHERE deptno = 30)
比自己所在部门平均工资高的员工
SELECT e.ename,e.sal,e.deptno
FROM emp_tzm e,(SELECT AVG(sal) avg_sal,deptno FROM emp_tzm GROUP BY deptno) t
WHERE e.deptno = t.deptno AND e.sal>t.avg_sal;
子查询出现在SELECT子句中,通常是实现外连接的效果:
SELECT e.ename ,e.sal,(SELECT d.dname FROM dept_tzm d WHERE d.deptno = e.deptno) dname FROM emp_tzm e;
子查询:
为其他sql语句提供数据。有时候我们在执行某一条sql语句时需要的数据不是确定值,必须要先查询一次表的到,那么先执行的这个查询语句往往是嵌套实际要执行的sql语句之中,为其提供数据的,那么这个查询语句就是子查询。
查询与BLAKE相同部门人的姓名
SELECT ename ,deptno FROM emp_tzm where deptno = (SELECT deptno FROM emp_tzm where ename = 'BLAKE')
子查询根据查询结果的字段数量与记录数分为:
单行单列子查询
多行单列子查询
多行多列子查询
其中单列子查询常用与WHERE中作为过滤条件中
而多列常当作一张表看待出现在FROM子句中
查找和SCOOT同职位的员工
SELECT ename FROM emp_tzm e WHERE job = (SELECT job FROM emp_tzm WHERE ename = 'SCOTT');
查找比平均薪水高的员工
SELECT ename,sal FROM emp_tzm e WHERE sal>(SELECT AVG(sal) FROM emp_tzm);
查看与SALESMAN同部门的其他职位
SELECT ename ,job ,deptno FROM emp_tzm WHERE deptno IN (SELECT deptno FROM emp_tzm WHERE job = 'SALESMAN') AND job <> 'SALESMAN'
EXISTS 关键子后面根一个子查询,只要该查询能够查询出至少一条记录,那么就会返回true
查看有员工的部门
SELECT deptno ,dname FROM dept_tzm d WHERE EXISTS(SELECT * FROM emp_tzm e WHERE d.deptno = e.deptno);
查询列出最低薪水高于部门30的最低薪水的部门信息
SELECT MIN(sal),deptno FROM emp GROUP BY deptno HAVING MIN(sal)>(SELECT MIN(sal)FROM emp WHERE deptno = 30)
比自己所在部门平均工资高的员工
SELECT e.ename,e.sal,e.deptno
FROM emp_tzm e,(SELECT AVG(sal) avg_sal,deptno FROM emp_tzm GROUP BY deptno) t
WHERE e.deptno = t.deptno AND e.sal>t.avg_sal;
子查询出现在SELECT子句中,通常是实现外连接的效果:
SELECT e.ename ,e.sal,(SELECT d.dname FROM dept_tzm d WHERE d.deptno = e.deptno) dname FROM emp_tzm e;
相关文章推荐
- Oracle笔记(三)
- Oracle笔记(一)
- Oracle笔记(二)
- ORACLE学习笔记(一)
- Oracle SQL优化文章不必再看
- Oracle建立表空间、用户、授权
- oracle创建表
- [置顶] Oracle PL/SQL中编写空操作的存储过程
- ASP.NET MVC - Entity Framework - Oracle - ORA-00942: table or view does not exist
- oracle常见错误
- Oracle的行转列的函数wm_concat的db2实现
- powerdesigner逆向导出oracle数据库结构显示备注
- 将来发运导致库存事务处理问题
- Oracle数据库错误码大全
- Oracle查询重复数据并删除,只保留一条记录
- oracle数据获取当前自然周,当前周的起始和结束时间
- Oracle 解决'PLAN_TABLE' is old version问题
- Oracle ADF获取AM及VO的方法
- oracle索引浅谈
- ORACLE PL/SQL编程之四: 把游标说透