博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql之子查询
阅读量:5026 次
发布时间:2019-06-12

本文共 1707 字,大约阅读时间需要 5 分钟。

所谓子查询,就是指在一个查询之中嵌套了其他的若干查询,通过子查询可以实现多表查询,该查询语句中可能包含IN,ANY,ALL和EXISTS等关键字,除此之外还可以包含比较运算符,子查询经常出现在WHERE和FROM字句中。

WHERE字句中的子查询:该位置处的子查询一般返回单行单列,多行单列,单行多列数据记录。

FROM字句中的子查询:该位置处的子查询一般返回多行多列数据记录,可以当作一张临时表。

1. 返回结果为单行单列和单行多列子查询

当子查询的返回结果为单行单列数据记录时,该子查询语句一般在主查询语句的WHERE子句里,通常会包含比较运算符(">","<","=","!="等)。

1.1 返回结果为单行单列子查询

SELECT * FROM e_employee WHERE sal >(SELECT sal FROM t_employee WHERE ename='SMITH')

1.2 返回结果为单行多列子查询

SELECT ename,sal,job FROM e_employee WHERE (sal,job) = (SELECT sal,job FROM t_employee WHERE ename='SMITH')

2. 返回结果为多行单列子查询

当子查询的返回结果为多行单列数据记录时,该子查询语句一般在主查询语句的WHERE子句里,通常会包含IN,ANY,ALL,EXISTS等关键字。

2.1 带有关键字IN的子查询

当主查询语句的条件是子查询的查询结果时,就可以通过关键字IN来进行判断,相反如果想实现主查询的条件不是子查询的查询结果时,就可以通过关键字NOT IN来进行判断。

SELECT * FROM t_employee WHERE deptno IN (SELECT deptno FROM t_dept)

2.2 带有关键字ANY的子查询

SELECT ename,sal FROM t_employee WHERE sal >ANY (SELECT sal FROM t_employee WHERE job='MANAGER')

关键字ANY用来表示主查询的条件为满足子查询返回查询结果中任意一条数据记录,该关键字有三种匹配方式,分别如下:

=ANY:其功能与关键字IN一样。

>ANY(>=ANY):比子查询中返回数据记录中最小的还要大于(大于等于)数据记录。

<ANY(<=ANY):比子查询中返回数据记录中最大的还要小于(小于等于)数据记录。

2.3 带有关键字ALL的子查询

SELECT ename,sal FROM t_employee WHERE sal >ALL (SELECT sal FROM t_employee WHERE job='MANAGER')

关键字ALL用来表示主查询的条件为满足子查询返回查询结果中所有数据记录,该关键字有以下两种匹配方式。

>ALL(>=ALL):比子查询中返回数据记录中最大的还要大于(大于等于)数据记录。

<ALL(<=ALL):比子查询中返回数据记录中最小的还要小于(小于等于)数据记录。

2.4 带有关键字EXISTS的子查询

关键字EXISTS是一个布尔类型,当返回结果集时为TRUE,不能返回结果集时为FALSE。查询时EXISTS对外表采用遍历方式逐条查询,每次查询都会比较EXISTS的条件语句,当EXISTS里的条件语句返回记录行时则条件为真,此时返回当前遍历到的记录;反之,如果EXISTS里的条件语句不能返回记录行,则丢弃当前遍历到的记录。

SELECT * FROM t_dept c WHERE NOT EXISTS (SELECT * FROM e_employee WHERE deptno=c.deptno);

3. 返回结果为多行多列子查询

当子查询的返回结果为多行多列数据记录时,该子查询语句一般会在主查询语句的FROM子句里,被当作一张临时表的方式来处理。

转载于:https://www.cnblogs.com/longshiyVip/p/4634481.html

你可能感兴趣的文章
ubuntu 16.04 (软件应用)-输入法
查看>>
windos7修复引导扇区
查看>>
Leetcode总结之Backtracking
查看>>
Android开发学习之路-图片颜色获取器开发(1)
查看>>
StackExchange.Redis 官方文档(一) Basics
查看>>
nupkg 之破解 nodejs+electron-packager 打包exe的解包
查看>>
Objective-C 使用 C++类
查看>>
浅谈之高级查询over(partition by)
查看>>
Notes: CRM Analytics–BI from a CRM perspective (2)
查看>>
graphite custom functions
查看>>
列出所有的属性键
查看>>
js获取请求地址后面带的参数
查看>>
[原创]使用java批量修改文件编码(ANSI-->UTF-8)
查看>>
设计模式のCompositePattern(组合模式)----结构模式
查看>>
二进制集合枚举子集
查看>>
磁盘管理
查看>>
SAS学习经验总结分享:篇二—input语句
查看>>
UIImage与UIColor互转
查看>>
RotateAnimation详解
查看>>
系统管理玩玩Windows Azure
查看>>