SQL语句

嵌套查询   

     包含一个或多个子查询或者子查询的另一个术语的 SELECT 语句。
    

     在一个SELECT 语句的WHERE 子句或HAVING 子句中嵌套另一个SELECT 语句的查询称为嵌套查询,又称子查询。子查询是SQL 语句的扩展。

 

  子查询可以使用任何普通查询中使用的关键词:如DINSTINCT(去重),GROUP BY(分组),LIMIT(限制记录条数),ORDER BY(排序),UNION(联合去重),ALL,UNION ALL(联合不去重)等。可以使用<,>, <=, >=, =, <>运算符进行比较,也可以使用ANY ,IN和SOME进行集合的匹配。

   

     嵌套查询的工作方式是:先处理内查询,由内向外处理,外层查询利用内层查询的结果嵌套查询不仅仅可以用于父查询select语句使用。还可以用于insert、update、delete语句或其他子查询中。

1.组成

       (1)包含标准选择列表组件的标准select查询。

  (2)包含一个或多个表或者视图名称的标准from子句。

  (3)可选的where子句。

  (4)可选的group by子句。

  (5)可选的having子句。

2.语法规则

       (1)子查询的select查询总是使用圆括号括起来。

  (2)不能包括compute或for.browse子句。

  (3)如果同时指定top子句,则可能只包括orderby子句。

  (4)子查询最多可以嵌套到32层。个别查询可能会不支持32层嵌套。

  (5)任何可以使用表达式的地方都可以使用子查询,只要它返回的是单个值。

  (6)如果某个表只出现在子查询中二不出现在外部查询中,那么该表的列就无法包含在输出中。

3.表达形式

        SELECT <目标表达式1>[,...]
        FROM <表或视图名1>
        WHERE [表达式] SELECT <目标表达式2>[,...]
        FROM <表或视图名2>
        [GROUP BY <分组条件>
        HAVING [<表达式>比较运算符] SELECT <目标表达式2>[,...]
        FROM <表或视图名2> ]

4.简单嵌套查询

表结构:



示例:

select name,age from student where age>(select age from student where name='薇薇');
结果:


5.in嵌套查询

in关键字用于where子句中用来判断查询的表达式是否在多个值的列表中。返回满足in列表中的满足条件的记录。

示例:

select name from student where id in (select id from student where department='计算机科学与技术');
结果:


6.some嵌套查询(和any等价)

some在sql中的逻辑运算符号,如果在一系列比较中,有些值为True,那么结果就为True。

some的语法是:

  <表达式>{=|<>|!=|>|>=|!>|<|<=|!<}some(子查询)  

示例:

select name from student where age>some (select age from student where name='薇薇');

结果:


注:SQL中定量谓词不支持反操作,也就是说,不能在ANY或者SOME前加NOT关键字。但可以用“<>”号表示否定

7.all嵌套查询

all是sql中的逻辑运算符号,如果一系列的比较都为true,那么结果才能为true。

all的语法是:

  <表达式>{=|<>|!=|>|>=|!>|<|<=|!<}all(子查询)

示例:

select name from student where id>all (select id from student where name='灵思');
结果:


8.exists嵌套查询

exists是sql中的逻辑运算符号。如果子查询有结果集返回,那么就为True。exists代表“存在”的意义,它只查找满足条件的那些记录。一旦找到第一个匹配的记录后,就马上停止查找,但是如果子查询中因为加了条件而没有结果集返回,则主语句就不执行了。

示例1:

select id,name from student where exists(select id from student where name='灵思');
结果:


示例2:

select id,name from student where exists(select id from student where name='俞静');
结果:



原文地址:https://www.cnblogs.com/mlan/p/11060360.html