Oracle 学习笔记(七)

子查询

概念:指嵌入在其他 sql 语句中的 select 语句,也叫做嵌套查询。 

 

单行子查询 

指只返回一行数据的子查询语句

查询 SMITH 同部门的所有员工 

1、查询出 SMITH 的部门号 

select deptno from emp WHERE ename = 'SMITH'; 

2 、查询 SMITH 同部门的所有员工  

SELECT * FROM emp WHERE deptno = (select deptno from emp WHERE ename = 'SMITH'); 

(执行 sql 是从左到右扫描,如果有括号,括号里面的先被优先执行)

多行子查询

指返回多行数据的子查询语句

查询和部门 10 的工作相同的雇员的名字、岗位、工资和部门号 

1、去重查询部门为 10 的工作

SELECT DISTINCT job FROM emp WHERE deptno = 10; 

2、查询和部门 10 的工作相同的雇员的名字、岗位、工资和部门号

SELECT * FROM emp WHERE job IN (SELECT DISTINCT job FROM emp WHERE deptno = 10); 

(不能用 job = **,因为等号是一对一的) 

在多行子查询中使用 all 操作符

查询工资比部门 30 的所有员工的工资高的员工的姓名、工资和部门号

SELECT ename, sal, deptno FROM emp WHERE sal > all (SELECT sal FROM emp WHERE deptno = 30); 

还可以用函数 MAX 查询 

SELECT ename, sal, deptno FROM emp WHERE sal > (SELECT MAX(sal) FROM emp WHERE deptno = 30); (执行效率上, 函数高得多) 

在多行子查询中使用 ANY 操作符

查询工资比部门 30 的任意一个员工的工资高的员工姓名、工资和部门号

SELECT ename, sal, deptno FROM emp WHERE sal > ANY (SELECT sal FROM emp WHERE deptno = 30); 

今天笔记做到这,后续有空继续。

  

【微信公众号:Stephen】一个毕业三年后自学 Java 入行的程序员。
原文地址:https://www.cnblogs.com/stephen-java/p/10816713.html