欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SQL语句嵌套查询组成、语法规则、表达形式、简单嵌套查询、in嵌套查询

程序员文章站 2022-04-19 10:34:18
嵌套查询 包含一个或多个子查询或者子查询的另一个术语的 SELECT 语句。 在一个SELECT 语句的WHERE 子句或HAVING 子句中嵌套另一个SELECT 语句的查询...
嵌套查询

包含一个或多个子查询或者子查询的另一个术语的 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.简单嵌套查询

表结构:

SQL语句嵌套查询组成、语法规则、表达形式、简单嵌套查询、in嵌套查询

示例:

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

结果:

SQL语句嵌套查询组成、语法规则、表达形式、简单嵌套查询、in嵌套查询 5.in嵌套查询

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

示例:

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

结果:

SQL语句嵌套查询组成、语法规则、表达形式、简单嵌套查询、in嵌套查询 6.some嵌套查询(和any等价)

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

some的语法是:

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

示例:

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

结果:

SQL语句嵌套查询组成、语法规则、表达形式、简单嵌套查询、in嵌套查询

注: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='灵思');

结果:

SQL语句嵌套查询组成、语法规则、表达形式、简单嵌套查询、in嵌套查询 8.exists嵌套查询

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

示例1:

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

结果:

SQL语句嵌套查询组成、语法规则、表达形式、简单嵌套查询、in嵌套查询

示例2:

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

结果:

SQL语句嵌套查询组成、语法规则、表达形式、简单嵌套查询、in嵌套查询