子查询之二(不相关子查询与相关子查询)

1. 相关子查询

如果子查询的执行依赖于外部查询,通常情况下都是因为子查询中的表用到了外部的表,并进行的条件关联,因此每一次执行一次外部查询,子查询都会重新计算一次,这样的子查询称为关联子查询.

相关子查询按照一行接一行的顺序执行,主查询的每一行都执行一次子查询.

例1 : 查询部门人数>5的部门名称.

注 :

  • 外部查询每执行一行,就会执行一次子查询,判断该部门的人数是否>5.
  • 子查询使用了外部表,并进行了条件关联.

例2 : 在FROM子句中使用子查询. 将子查询当作临时表.

注 :

  • 在MySQL中,子查询在FROM子句中作为临时表时,必须给表起别名.如上的mytable.否则会报错.
  • 子查询中的SELECT子句中,AVG(salary)应作为表的字段出现,而不是作为聚合函数.所以必须给其起别名.且在MySQL中,不允许出现MIN(AVG(salary))这种写法.

2. EXISTS与NOT EXISTS关键字

关联子查询通常会与EXISTS操作符一起来使用.用来检查在子查询中是否存在满足条件的行.

如果在子查询中不存在满足条件的行,则

  • 条件返回FALSE.
  • 继续在子查询中查找

如果在子查询中存在满足条件的行,则

  • 不在子查询中查找.
  • 条件返回TRUE.

NOT EXISTS关键字则表示如果不存在满足条件的行,则返回TRUE.否则返回FALSE.

例 : 查询公司管理者的相关信息.

当然,也可以用自连接来完成.

3. 自连接与子查询的比较

上例中,子查询和自连接两种方法,使用自连接更好.

原因 :

  • 因为在需要DBMS的处理过程中,对于自连接的处理速度比子查询要快的多.
  • 子查询实质上是通过未知表进行查询后的条件判断,而自连接是通过已知表的自身数据表进行条件判断,因此在大部分DBMS中都对自连接处理做了优化.
相关推荐
创世宇图4 分钟前
Alibaba Cloud Linux 安装生产环境-mysql
linux·mysql
养生技术人17 分钟前
Oracle OCP认证考试题目详解082系列第5题
运维·数据库·sql·oracle·开闭原则
重庆小透明1 小时前
【搞定面试之mysql】第一篇:mysql的优化和索引
mysql·面试·职场和发展
sthnyph2 小时前
MySQL 8.0在windows环境安装及配置
windows·mysql·adb
道清茗3 小时前
【MySQL知识点问答题】 MySQL 配置参数和内存管理
数据库·mysql
闻哥3 小时前
MySQL InnoDB 缓存池(Buffer Pool)详解:原理、结构与链表管理
java·数据结构·数据库·mysql·链表·缓存·面试
heze093 小时前
sqli-labs-Less-50
数据库·mysql·网络安全
木易 士心4 小时前
深入理解 MySQL 权限撤销(REVOKE)机制:从语法到安全实践
数据库·后端·mysql·安全
AlunYegeer4 小时前
论mysql的redo_log和bin_log,redis的RDB和AOF的类似记忆
数据库·redis·mysql
悲伤小伞5 小时前
9-MySQL_索引
linux·数据库·c++·mysql·centos