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

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

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

相关推荐
这个DBA有点耶20 分钟前
数据库数据同步解决方案怎么选?6款主流工具横向对比与信创选型指南
数据库·架构·dba
刃神太酷啦28 分钟前
Redis 核心进阶:哨兵、集群、缓存问题与分布式锁详解----《Hello Redis!》(6)
linux·c语言·数据库·c++·redis·分布式·缓存
小雷信息医学30 分钟前
不会写复杂代码也能发 SCI?手把手教你用 InSpireR 交互系统一键提取、合并与导出临床科研宽表【第三章】
数据库
旺仔不是程序员1 小时前
复合索引最左前缀原则:PostgreSQL 的 WHERE 为什么必须命中第一列
数据库·后端·sql
旺仔不是程序员1 小时前
字段类型不一致:PostgreSQL 报错与索引失效的第一元凶
数据库·后端·sql
白远山1 小时前
货运跑腿搬家平台开发实战:从需求分析到落地部署指南
数据库·数据挖掘·需求分析
geovindu1 小时前
sql: Data Modeling Patterns
数据库·sql·设计模式·sqlserver
上海蓝色星球2 小时前
蓝色星球NG-AIOS新型AI工业操作系统重磅发布——以本体智能为内核,重构“AI+制造“新范式
大数据·数据库·人工智能·机器人
瀚高PG实验室2 小时前
瀚高数据库如何克隆表
数据库·sql·postgresql·瀚高数据库
雨辰AI2 小时前
信创多租户项目 9 大踩坑|数据隔离失效、权限越权终极解决(金仓 / 达梦 / 高斯全库适配)
java·大数据·数据库·后端