SQL 相关子查询 和 不相关子查询、Exists 、Not Exists、 多表连接(包含自连接)

不相关子查询

子查询的查询条件不依赖于父查询,称不相关子查询。子查询可以单独运行的

sql 复制代码
select stu_id,sex,age
from student t
where sex=(
			select sex
			from student
			where stu_id='10023'
)

相关子查询 ==== 关联子查询

子查询的查询条件依赖于父查询,称为 相关子查询。子查询不能单独运行的

子查询 也称 内部查询

父查询 也称 外部查询

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

首先,从父查询中取出table1表的一个元组outer,将元组outer的expr2值传递给子查询。

然后,执行子查询,得到某个值,用这个值代替 子查询的结果 ,父查询由 嵌套查询 变为 只有一层外层查询的简单的查询。

最后,执行这个简单的查询,即得结果。

  1. 相关 vs 不相关

相关子查询 的查询过程 就像 高级语言的 双重For循环一样,先执行一次外层循环,然后执行内层循环完毕后,继续执行外层循环的下一个值。

不相关子查询 就是先一次性把 内层查询 执行,再 执行外层 查询。

在select 语句中,除了 group by和 limit 之前,其他的位置都可以声明 子查询

Exists 、Not Exists

select col1,col2,...

from table1 outer

where Exists (

select col1,col2

from table2

where expr1=outer.expr2

);

关联子查询通常会和EXISTS操作符一起使用,用来检查在子查询中是否存在满足条件的行。
如果在子查询中不存在满足条件的行

1、条件返回False

2、继续在子查询中查找

3、若最终子查询都没查到,则主查询的记录 就舍弃了
如果在子查询中存在满足条件的行

1、不在子查询中继续查找

2、条件返回True

3、主查询的记录会被保留

NOT EXISTS 关键字 表示 如果不存在某种条件,则返回True,否则返回False

通常 多表查询 比 子查询效率更高一些,

数据搜索引擎 如果子查询能转换城成多表查询,会自动转换。

相关推荐
浪九天1 小时前
Orcale、MySQL中参数类型的详解和运用场景(不带示例)
数据库·mysql·oracle
程序员阿鹏1 小时前
jdbc批量插入数据到MySQL
java·开发语言·数据库·mysql·intellij-idea
橘猫云计算机设计3 小时前
基于Django的购物商城平台的设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
java·数据库·spring boot·后端·django
2501_903238653 小时前
Spring Boot日志配置与环境切换实战
数据库·spring boot·后端·个人开发
梓沂3 小时前
审计级别未启用扩展模式导致查询 DBA_AUDIT_TRAIL 时 SQL_TEXT 列为空
数据库·sql·dba
caihuayuan43 小时前
PHP建立MySQL持久化连接(长连接)及mysql与mysqli扩展的区别
java·大数据·sql·spring
Smile丶凉轩4 小时前
数据库面试知识点总结
数据库·c++·mysql
RainbowSea5 小时前
9-1. MySQL 性能分析工具的使用——last\_query\_cost,慢查询日志
数据库·sql·mysql
Sui_Network5 小时前
Sui 如何支持各种类型的 Web3 游戏
大数据·数据库·人工智能·游戏·web3·区块链
ZKNOW甄知科技5 小时前
IT服务运营管理体系的常用方法论与实践指南(上)
大数据·数据库·人工智能