子查询

    xiaoxiao2021-12-14  20

    2016.12.3

    十四.子查询

    包含在其他查询中的查询叫子查询。子查询可以和主查询相互关联并依赖于主查询,也可以完全的独立于主查询。子查询很多都可以用其他方法来表达。

    14.1 子查询的类型

    子查询不仅可以用于SELECT语句中,而且可以用在INSERT,UPDATEDELECT语句中。

    一般的SELECT语句如下:

    SELECT columnlist

    FROM tablelist

    WHERE conditon

    GROUP BY columnlist

    HAVING condition

    ORDER BY columnlist

    可以把子查询插入到SELECT语句的任何子句中。声明和使用子查询的方式取决于子查询用于columnlisttablelist还是confition中。一条SELECT语句可以有多条子查询。

    可以用3种主要的方式来指定子查询

    (1)当子查询用于tablelist时,它指定了一个数据源

    (2)当是condition的一部分时,它是查询条件的一部分

    (3)当时columnlist的一部分,它创建了一个单个的计算的列。

    14.2 使用子查询作为数据源

    它和创建一个视图并在SELECT语句中引用该视图的概念类似,但是区别在于视图是永久存放在数据库中的,而作为数据源的子查询是不保存的,它只是SELECT语句的一部分而临时存在。

    SELECT columnlist

    FROM tablelist

    LEFT JOIN(

    SELECT columnlist

    FROM tablelist

    WHERE condition

    GROUP BY columnlist

    )

    ON condition

    ORDER BY columnlist

    14.3 在查询条件中使用子查询

    将子查询放在WHERE IN后面的括号中。

    SELECT columnlist

    FROM tablelist

    WHERE column IN(

    SELECT columnlist

    FROM tablelist

    WHERE condition)

    14.4 关联子查询

    根据子查询是否和包含它的查询相关联,子查询分为非关联的和关联的两种。非关联查询只会计算和执行一次。关联子查询需要针对返回的每一行逐行计算,并且可能在每次执行子查询时得到不同的结果。关联的子查询是不能独立执行的。

    SELECT columnlist

    FROM table1

    WHERE(

    SELECT columnlist

    FROM table2

    WHERE table1.column1 = table2.column1)<value

    上述就是一个关联子查询。因为子查询中的上下文没有table1column1列。

    14.5 EXISTS操作符

    这个操作符让我们确定关联子查询中是否存在数据。

    SELECT columnlist

    FROM tablelist

    WHERE EXISTS(

    SELECT columnlist

    FROM tablelist

    WHERE condition)

    如果关联子查询返回了任何数据,关键字EXISTS计算结果为真。

    14.6 使用子查询作为一个计算的列

    SELECT columnlist

    subqueryresult

    FROM table

    ORDER BY columnlist

    转载请注明原文地址: https://ju.6miu.com/read-970906.html

    最新回复(0)