Mysql常用sql语句(19)- in / exists 子查询

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: Mysql常用sql语句(19)- in / exists 子查询

测试必备的Mysql常用sql语句系列

https://www.cnblogs.com/poloyy/category/1683347.html

 

前言


  • 子查询在我们查询方法中是比较常用的,通过子查询可以实现多表查询
  • 子查询是指:将一个查询语句嵌套在另一个查询语句中
  • 子查询可以在select、update、delete语句中使用,还可以进行多层嵌套

 

子查询的语法格式


WHERE<表达式><操作符> (子查询)

语法格式说明

  • 操作符可以是比较运算符、in、not in、exists、not exists
  • not 当然就是取反啦

 

in 和 exists的一个比较


image.png

先看看dept、emp表有什么数据


dept表

image.png


比较运算符的栗子


查询部门销售部的员工信息

select*from emp where dept_id = (select id from dept where name = "销售部")

image.png

查询部门不是销售部的员工信息

select*from emp where dept_id <> (select id from dept where name = "销售部")

image.png

in 的栗子


SQL分析

  • 从 dept 表查询部门名字为销售部or财务部的部门 id
  • 然后从 emp 表查询 depte_id 在上面 id 结果集的记录

select*from emp where dept_id in (select id from dept where name = "财务部" or name ="销售部")

image.png


not in 的栗子


select*from emp where dept_id notin (select id from dept where name = "财务部" or name ="销售

image.png

其实就是上面栗子结果集的取反

 

exists 栗子


SQL分析

  • 从 dept 表中查询 id = 1 的记录,若有,exists 表达式则返回True
  • 外层查询语句接收到 True 之后,对 emp 表进行查询,返回所有记录

select*from emp whereexists(select*from dept where id =1)

可以看看 exists 表达式里的子查询结果集

select*from dept where id =1

image.png

可以看到,查询结果集不为空,所以 exists() 返回 true

最终的 sql 其实是这样的

select*from emp where true

 

exists + 其他查询条件的栗子


select*from emp whereexists (select*from dept where id =1) and dept_id =2

image.png


知识点

  • 子查询的功能其实通过表连接(join)也可以完成
  • 一般来说,表连接(内连接、外连接等)都可以用子查询查询,但反过来却不一定,有的子查询不能用表连接来替换
  • 子查询比较灵活,适合作为查询的筛选条件
  • 表连接更适合查看连接表之后的数据集
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
27天前
|
SQL 运维 关系型数据库
MySQL 运维 SQL 备忘
MySQL 运维 SQL 备忘录
44 1
|
16天前
|
SQL 关系型数据库 MySQL
MySql5.6版本开启慢SQL功能-本次采用永久生效方式
MySql5.6版本开启慢SQL功能-本次采用永久生效方式
30 0
|
16天前
|
SQL 关系型数据库 MySQL
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
29 0
|
29天前
|
SQL 存储 关系型数据库
mysql 数据库空间统计sql
mysql 数据库空间统计sql
45 0
|
11月前
|
SQL 存储 关系型数据库
MySQL下使用SQL命令进行表结构与数据复制实践
MySQL下使用SQL命令进行表结构与数据复制实践
152 0
|
SQL 关系型数据库 MySQL
MySQl数据库第八课-------SQL命令查询-------主要命脉2
MySQl数据库第八课-------SQL命令查询-------主要命脉
|
SQL 关系型数据库 MySQL
MySQl数据库第八课-------SQL命令查询-------主要命脉 1
MySQl数据库第八课-------SQL命令查询-------主要命脉
115 0
|
SQL 存储 开发框架
MySQl数据库第六课-------SQl命令的延续------快来看看
MySQl数据库第六课-------SQl命令的延续------快来看看
|
SQL 存储 NoSQL
MySQl数据库第五课 --------在SQl的简单命令--------学习学习
MySQl数据库第五课 --------在SQl的简单命令--------学习学习
|
SQL 缓存 监控
MySQL性能监控(sql命令语句 & MONyog工具)全掌握,这一篇足以!
MySQL性能监控(sql命令语句 & MONyog工具)全掌握,这一篇足以!
880 0
MySQL性能监控(sql命令语句 & MONyog工具)全掌握,这一篇足以!