Oracle 学习笔记(七)

本文介绍了 SQL 子查询,即嵌入在其他 SQL 语句中的 SELECT 语句。包括单行子查询,只返回一行数据;多行子查询,返回多行数据。还阐述了多行子查询中 ALL 和 ANY 操作符的使用,以及与函数查询在执行效率上的对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

子查询

概念:指嵌入在其他 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); 

 

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

 

  

转载于:https://www.cnblogs.com/stephen-java/p/10816713.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值