复杂查询
子查询
*双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,外查询将不选择)