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

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中都对自连接处理做了优化.
相关推荐
YUJIANYUE7 小时前
发立得信息发布系统房屋信息版(php+mysql)V1.0版
mysql·php
星辰离彬8 小时前
Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解
java·spring boot·后端·sql·mysql·性能优化
rit84324999 小时前
ELK实现nginx、mysql、http的日志可视化实验
mysql·nginx·elk
面朝大海,春不暖,花不开9 小时前
使用 Python 正则表达式实现文本替换与电话号码规范化
python·mysql·正则表达式
NineData14 小时前
NineData数据库DevOps功能全面支持百度智能云向量数据库 VectorDB
数据库·人工智能·mysql
浮生若梦l15 小时前
在 Spring Boot 项目里,MYSQL中json类型字段使用
spring boot·mysql·json
Smile_Gently15 小时前
MySQL 安装与使用详解
mysql
?ccc?15 小时前
MySQL故障排查与生产环境优化
数据库·mysql
重生之后端学习15 小时前
苍穹外卖-day03
java·开发语言·数据库·spring boot·mysql·spring·tomcat