MYSQL-复杂查询

本文详细探讨了SQL中的复杂查询技术,包括子查询的使用,如双SELECT、相关子查询以及在SELECT和FROM中的应用。同时,讲解了ALL、ANY关键字以及EXISTS在查询条件中的作用,帮助读者理解如何更高效地进行数据过滤和比较操作。这些技巧对于优化SQL查询性能和提升数据库管理效率至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

复杂查询

子查询

*双SELECT
SELECT *
FROM T
WHERE C1 > (
SELECT C2
FROM T
WHERE C3 = X3
)
– WHERE C1 NOT IN (
SELECT 查询
)

*相关子查询逻辑(执行慢,对每一行都要执行一次内部子查询)
SELECT *
FROM T e
WHERE C1 > (
SELECT AVG(C1)
FROM T
WHERE C2 = e.C2
)
(外查询对于id1来说,判断id1的C1值是否大于内查询中id1所在C2集合中的C1均值)

SELECT里的子查询
SELECT
C1,
COUNT(
) AS C8
(SELECT AVG(C3)
FROM T) AS CNEW,
C2 - SELECT(CNEW) AS C3
– SELECT(C8 - CNEW) AS C$
FROM T

*FROM里的子查询
SELECT *
FROM (
SELRCT …
) AS T1
WHERE C1 IS NOT NULL

关键字

*ALL关键字
SELECT *
FORM T
WHERE C1 > ALL (123,445,789,20)
(逐个比较,都要满足条件)

*ANY关键字
SELECT *
FORM T
WHERE C1 > ANY (123,445,789,20)
(逐个比较,任意一个满足条件)

*EXISTS关键字
SELECT *
FROM T1
WHERE EXIST(
SELECT C
FROM T2
WHERE T2.C1 = T1.C1
)
(相关子查询,对于T1中的每一行,查询其是否存在符合子查询的一条记录,其逻辑类似于:
SELECT *
FROM T1
WHERE C1 IN (SELECT出1,2,3,4,…的列表)
使用IN的话后面数量级上亿则占用空间

(此处使用EXISTS,针对每一行返回的是一条指令,告诉你是否存在一条子查询条件的记录,若TRUE,则外查询将其选择上;若FALSE,外查询将不选择)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值