子查询和查询表达式

  这个比较实用,可能用的比较少,但是对于比较的sql查询来说,可以省去很多麻烦,直接使用子查询。

  

    子查询是一个查询内的查询。子查询的结果被DBMS使用来决定包含这个子查询的高级查询的结果。在子查询的最简单的形式中,子查询呈现在一条SQL语句的WHERE或HAVING字句内。

    select field from table where field2 > (select field from table2 where ...)

    

    子查询搜索条件(>、<、==、<=、>=):

      子查询比较测试:

        select field from table where field >= (select field from table2 where ...)

      组成员测试(IN):

        select field from table where field (NOT)IN (select field from table2 where field1 > field2)

 

存在测试(EXISTS):

    select field from table where EXISTS (select ...)

    select field from table1 where field = (select field from table2 where field1 = value) and NOT EXISTS (select * from table3 where ...)

 

限定测试(ANY 和 ALL)

    IN测试的子查询版检查数据是否等于子查询结果字段中的某些值。SQL提供了两个限定测试ANY 和 ALL,把这种概念扩展到其他比较运算符。

    ANY测试:

        ANY测试和6个SQL比较运算符一起使用,用于把一个测试值和由子查询产生的一个字段的数据值相比较。要执行这个测试,SQL使用特定的比较运算符来把测试值和字段中的每个数据值进行比较,如果有一个比较产生TRUE,那么ANY测试返回TRUE结果。

        select field from table where field < ANY (select field from table2 where field = value)

        select field from table where field < > ANY (select field from table2)

    ALL测试:

        像ANY测试一样,ALL测试和6中SQL比较运算符之一一起使用,可用于把单个测试值和由子查询产生的数据字段相比较。要执行这项测试,SQL使用特定的比较运算符来把测试值和字段中的每个数据值进行比较。如果所有的比较都生成TRUE结果,那么ALL测试返回TRUE值。

        select field from table where field < ANY (select field from table2 where field = value)

        ALL测试总能转换成对应的EXISTS测试。

posted @ 2012-08-11 17:19  非著名程序师  阅读(336)  评论(0编辑  收藏  举报