MySQL——子查询(1)带 IN 关键字的子查询

子查询是指一个查询语句嵌套在另一个查询语句内部的查询。它可以嵌套在SELECT、SELECT、INTO 语句、INSERT...INTO 等语句中。在执行查询语句时,首会执行子查询中的语句,然后将返回的结果作为外层查询的过滤条件,在子查询中通可以使用 IN、EXISTS、ANY、ALL 操作符。

使用 IN 关键字进行子查询时,内层查询语句仅返回一个数据列,这个数据列中的将供外层查询语句进行比较操作。

例如,查询存在年龄为 20岁的员工的部门,SQL语句如下:

sql 复制代码
SELECT * FROM department WHERE did IN(SELECT did FROM employee WHERE age=20);

上述语句执行成功后,结果如下:

sql 复制代码
mysql> SELECT * FROM department WHERE did IN(SELECT did FROM employee WHERE age=20);
+-----+-----------+
| did | dname     |
+-----+-----------+
|   1 | 网络部    |
|   2 | 媒体部    |
+-----+-----------+
2 rows in set (0.04 sec)

从上述结果可以看出,只有网络部和媒体部有年龄为20岁的员工。在查询的过中,首先会执行内层子查询,得到年龄为 20岁的员工的部门id,然后根据部门id与外查询的比较条件,最终得到符合条件的数据。

SELECT 语句中还可以使用 NOT IN 关键字,其作用正好与 IN 相反。

例如,查询不存在年龄为 20岁的员工的部门,SQL语句如下:

sql 复制代码
SELEcT * FROM department WHERE did NOT IN (SELECT did FROM employee WHERE age=20);

上述语句执行成功后,结果如下:

sql 复制代码
mysql> SELEcT * FROM department WHERE did NOT IN (SELECT did FROM employee WHERE age=20);
+-----+-----------+
| did | dname     |
+-----+-----------+
|   3 | 研发部    |
|   5 | 人事部    |
+-----+-----------+
2 rows in set (0.01 sec)

从上述结果可以看出,只有研发部与人事部不存在年龄为 20岁的员工。明显可以看出,使用 NOT IN 关键字的査询结果与使用 IN 关键字的查询结果正好相反。

相关推荐
梦帮科技16 小时前
领域认知知识库图谱注入:从双式记账图网络到高质量问答对自动化合成流水线
运维·网络·数据库·人工智能·矩阵·架构·自动化
Long long ago.16 小时前
vastbase数据库运行sql宕机重启解决
数据库·sql
SelectDB技术团队17 小时前
一条日志两套引擎的账:把 Elasticsearch 检索与分析合并到同一份数据的落地写法
大数据·数据库·elasticsearch·搜索引擎·全文检索·日志·apache doris
数据库百宝箱17 小时前
rum&gin索引对比
java·数据库·gin
wefg117 小时前
【Redis】初识 Redis
数据库·redis·缓存
FYKJ_201018 小时前
django电影推荐系统55066-计算机课程设计、毕业设计
vue.js·spring boot·python·mysql·typescript·spark·django
hacker_LeeFei20 小时前
Windows 下配置 Redis 8.10.2 开机自启:一次踩坑全记录
数据库·windows·redis
这个DBA有点耶20 小时前
MySQL字符集与排序规则深入:索引失效的隐蔽场景与排查方法
数据库·mysql·代码规范
zl_dfq20 小时前
Redis 之 【持久化 与 事务】
数据库·redis
闲云自留地21 小时前
从下载到登录:MySQL 在两大系统上的完整安装教程
数据库·mysql