Oracle系列七 子查询
子查询语法
SELECT select_list
FROM table
WHERE expr operator
(SELECT select_list
FROM table);
- 子查询 (内查询) 在主查询之前一次执行完成。
- 子查询的结果被主查询(外查询)使用 。
示例:
SELECT
last_name
FROM
employees
WHERE
salary > (
SELECT
salary
FROM
employees
WHERE
last_name = 'Abel'
);
注意事项
- 子查询要包含在括号内。
- 将子查询放在比较条件的右侧。
- 单行操作符对应单行子查询,多行操作符对应多行子查询。
子查询类型

单行子查询
- 只返回一行。
- 使用单行比较操作符。
示例:
- 返回job_id与141号员工相同,salary比143号员工多的员工姓名,job_id 和工资
SELECT
last_name,
job_id,
salary
FROM
employees
WHERE
job_id = (
SELECT
job_id
FROM
employees
WHERE
employee_id = 141
)
AND salary > (
SELECT
salary
FROM
employees
WHERE
employee_id = 143
);

在子查询中使用组函数
- 返回公司工资最少的员工的last_name,job_id和salary
SELECT
last_name,
job_id,
salary
FROM
employees
WHERE
salary = (
SELECT
MIN(salary)
FROM
employees
);

子查询中的 HAVING 子句
- 首先执行子查询。
- 向主查询中的HAVING 子句返回结果。
- 题目:查询最低工资大于50号部门最低工资的部门id和其最低工资
SELECT
department_id,
MIN(salary)
FROM
employees
GROUP BY
department_id
HAVING
MIN(salary) > (
SELECT
MIN(salary)
FROM
employees
WHERE
department_id = 50
);

非法使用子查询

子查询中的空值问题
SELECT
last_name,
job_id
FROM
employees
WHERE
job_id = (
SELECT
job_id
FROM
employees
WHERE
last_name = 'Haas'
);

多行子查询
- 返回多行。
- 使用多行比较操作符。

在多行子查询中使用 ANY 操作符
示例:返回其它部门中比job_id为‘IT_PROG’部门任一工资低的员工的员
工号、姓名、job_id 以及salary
SELECT
employee_id,
last_name,
job_id,
salary
FROM
employees
WHERE
salary < ANY (
SELECT
salary
FROM
employees
WHERE
job_id = 'IT_PROG'
)
AND job_id <> 'IT_PROG';

在多行子查询中使用 ALL 操作符
示例:返回其它部门中比job_id为‘IT_PROG’部门所有工资都低的员工
的员工号、姓名、job_id 以及salary
SELECT
employee_id,
last_name,
job_id,
salary
FROM
employees
WHERE
salary < ALL (
SELECT
salary
FROM
employees
WHERE
job_id = 'IT_PROG'
)
AND job_id <> 'IT_PROG';

子查询中的空值问题
SELECT
emp.last_name
FROM
employees emp
WHERE
emp.employee_id NOT IN (
SELECT
mgr.manager_id
FROM
employees mgr
);

Oracle系列七 子查询的更多相关文章
- 【SqlServer系列】子查询
1 概述 1.1 已发布[SqlServer系列]文章 [SqlServer系列]SQLSERVER安装教程 [SqlServer系列]数据库三大范式 [SqlServer系列]表单查询 [Sq ...
- Sql Server系列:子查询
1 子查询概念 子查询是嵌套在另一个查询中的普通T-SQL查询.在有一个SELECT语句通过使用小括号创建子查询,作为另一个查询的部分数据或条件的基础. 子查询通常用于满足以下某个需求: ◊ 将一个查 ...
- PLSQL_基础系列10_子查询WITH AS(案例)
2015-05-29 Created By BaoXinjian
- Oracle02——oracle分页、子查询、集合运算、处理数据、创建和管理表和其他数据库对象
作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7289451.html --oracle分页(Pageing Query) select ...
- Oracle DB 使用子查询来解决查询
• 定义子查询 • 描述子查询可以解决的问题类型 • 列出子查询的类型 • 编写单行和多行子查询 • 子查询:类型.语法和准则 • 单行子查询: – 子查询中的组函数 – 带有子查询的HAVING ...
- Oracle with重用子查询
--with 重用子查询对于多次使用相同子查询的复杂查询语句来说,用户可能会将查询语句分成两条语句执行.第一条语句将子查询结果存放到临时表,第二条查询语句使用临时表处理数据.从 Oracle 9i 开 ...
- 彻底搞懂oracle的标量子查询
oracle标量子查询和自己定义函数有时用起来比較方便,并且开发者也常常使用.数据量小还无所谓.数据量大,往往存在性能问题. 下面測试帮助大家彻底搞懂标量子查询. SQL> create tab ...
- oracle ORA-01427: 单行子查询返回多个行
ORA-01427: 单行子查询返回多个行 前几天开发的同事反馈一个问题,说前台系统报出了ORA错误,希望我们能看看是什么原因.java.sql.SQLException: ORA-01427: si ...
- Esper系列(六)子查询、Exists、In/not in、Any/Some、Join
子查询 1 >= all (select salary from orderEvent.win:length_batch(5))"; 注意: 运行以上三个例句后的结果,刚开始让很费 ...
随机推荐
- option触发及获取当前选中的option值
#标签 #<select id="city" class="select"> #JavaScript #$("#city").c ...
- H3C 802.11网络的基本元素
- Linux文件恢复利器 ext3grep与extundelete
介绍两款Linux文件恢复工具,ext3grep与extundelete,可能在关键时刻会有所帮助.ext3grep仅对ext3文件系统有效,extundelete对ext3与ext4文件系统都有效 ...
- lock in share mode 和 select for update
lock in share mode 和 select for update 2018年07月11日 01:57:58 道不虚行只在人 阅读数 146 版权声明:欢迎转载,请注明出处 https ...
- JAVA设计模式之工厂模式—Factory Pattern
1.工厂模式简介 工厂模式用于对象的创建,使得客户从具体的产品对象中被解耦. 2.工厂模式分类 这里以制造coffee的例子开始工厂模式设计之旅. 我们知道coffee只是一种泛举,在点购咖啡时需要指 ...
- X509IncludeOption 枚举
X509IncludeOption 枚举 指定 X.509 数据应包括 X.509 证书链的哪些内容. EndCertOnly 2 X.509 链信息中仅包括最终证书. ExcludeRoot 1 包 ...
- P4560 [IOI2014]Wall 砖墙
题目描述 给定一个长度为 nn且初始值全为 00的序列.你需要支持以下两种操作: Add L, R, hL,R,h:将序列 [L, R][L,R]内所有值小于 hh的元素都赋为 hh,此时不改变高度大 ...
- VMware共享本地文件
最后可以在这里找到
- SQL操作Spark SQL--BasicSQLTestt
object BasicSQLTest { def main(args: Array[String]): Unit = { val spark = SparkSession .builder() .a ...
- Python3 - 基础(运算符)
Python3-运算符 举个简单的例子 4 +5 = 9 . 例子中,4 和 5 被称为操作数,"+" 称为运算符. 算术运算符 比较(关系)运算符 赋值运算符 逻辑运算符 位运算 ...