文档介绍:sql语句嵌套查询
篇一:
SQL子查询和嵌套查询什么是嵌套查询嵌套查询是指在一个外层查询中包含有另一个内层查询,即一个SQL查询语句块可以嵌套在另一个查询块的WHERE子句中。其中外层查询称为父查询、主查询。内层查询也称为子查询、从查询。
什么是子查询子查询是SELECT语句内的另外一条SELECT语句,而且常常被称为内查询或是内SELECT语句。SELECT、INSERT、UPDATE或DELETE命令中允许是一个表达式的地方都可以包含子查询,子查询甚至可以包含在另外一个子查询中。
1.语法子查询的句法如下:
(SELECT[ALL | DISTINCT] select item listFROM table list [WHERE search condition][GROUP BY group item list[HAVING group by search conditoon ]]) 2.语法规则
(1)子查询的SELECT查询总使用圆括号括起来。
(2)不能包括COMPUTE或FOR BROWSE子句。
(3)如果同时指定TOP子句,则可能只包括ORDER BY子句。
(4)子查询最多可以嵌套32层,个别查询可能会不支持32层嵌套。
(5)任何可以使用表达式的地方都可以使用子查询,只要它返回的是单个值。
(6)如果某个表只出现在子查询中而不出现在外部查询中,那么该表中的列就无法包含在输出中。
3.语法格式
(1)WHERE 查询表达式[NOT] IN(子查询)。
(2)WHERE查询表达式比较运算符[ ANY| ALL](子查询)。
(3)WHERE[NOT] EXISTS(子查询)。
简单嵌套查询嵌套查询内层子查询通常作为搜索条件的一部分呈现在WHERE或HAVING子句中。例如,把一个表达式的值和一个由子查询生成的一个值相比较,这个测试类似于简单比较测试。
子查询比较测试用到的运算符是:
=、、、、=、=。子查询比较测试把一个表达式的值和由子查询的产生的一个值进行比较,返回比较结果为TRUE的记录。
下面在“student”表中,查询“课程成绩” 96分的同学信息。在查询分析器中输入的SQL语句如下:
use student select * from student where学号=( select 学号 from grade where 课程成绩 96 ) 实现的过程如图1所示。
图1 成绩大于90分的同学信息子查询“select 学号 from grade where 课程成绩 96”的查询结果是“B003”,即是一个值。
子查询过程如下:
(1)从“grade”表中查询出“课程成绩” 96的学生学号为“B003”。
(2)从学生表中查询出“学号”是“B003”的学生信息。
带IN的嵌套查询带IN的嵌套查询语法格式为:
WHERE 查询表达式IN(子查询)。
一些嵌套内层的子查询会产生一个值,也有一些子查询会返回一列值,即子查询不能返回带几行和几列数据的表。原因在于子查询的结果必须适合外层查询的语句。当子查询产生一系列值时,适