Oracle笔记(四)

来源:互联网 发布:剑灵人族捏脸数据大全 编辑:程序博客网 时间:2024/06/12 01:51


子查询:
为其他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;

0 0
原创粉丝点击