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 关键字的查询结果正好相反。

相关推荐
DashVector4 小时前
向量检索服务 DashVector产品计费
数据库·数据仓库·人工智能·算法·向量检索
KYGALYX5 小时前
在Linux中备份msyql数据库和表的详细操作
linux·运维·数据库
檀越剑指大厂5 小时前
金仓KReplay:定义数据库平滑迁移新标准
数据库
努力成为一个程序猿.6 小时前
【Flink】FlinkSQL-动态表和持续查询概念
大数据·数据库·flink
毕设十刻6 小时前
基于Vue的学分预警系统98k51(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js
liliangcsdn7 小时前
如何利用约束提示优化LLM在问题转sql的一致性
数据库·sql
熙客7 小时前
Kubernetes是如何保证有状态应用数据安全和快速恢复的
mysql·云原生·容器·kubernetes
Java爱好狂.8 小时前
分布式ID|从源码角度深度解析美团Leaf双Buffer优化方案
java·数据库·分布式·分布式id·es·java面试·java程序员
Elastic 中国社区官方博客8 小时前
通过混合搜索重排序提升多语言嵌入模型的相关性
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
倔强的石头1069 小时前
KingbaseES:从兼容到超越,详解超越MySQL的权限隔离与安全增强
数据库·mysql·安全·金仓数据库