您的位置:首页 > 数据库 > Oracle

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: