sql子查询和嵌套查询

sql子查询和嵌套查询

ID:11374788

大小:228.00 KB

页数:8页

时间:2018-07-11

sql子查询和嵌套查询_第1页
sql子查询和嵌套查询_第2页
sql子查询和嵌套查询_第3页
sql子查询和嵌套查询_第4页
sql子查询和嵌套查询_第5页
资源描述:

《sql子查询和嵌套查询》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、什么是嵌套查询嵌套查询是指在一个外层查询中包含有另一个内层查询,即一个SQL查询语句块可以嵌套在另一个查询块的WHERE子句中。其中外层查询称为父查询、主查询。内层查询也称为子查询、从查询。什么是子查询子查询是SELECT语句内的另外一条SELECT语句,而且常常被称为内查询或是内SELECT语句。SELECT、INSERT、UPDATE或DELETE命令中允许是一个表达式的地方都可以包含子查询,子查询甚至可以包含在另外一个子查询中。1.语法子查询的句法如下:(SELECT[ALL

2、DISTINCT]FROM

3、[WHERE][GROUPBY[HAVING]])2.语法规则(1)子查询的SELECT查询总使用圆括号括起来。(2)不能包括COMPUTE或FORBROWSE子句。(3)如果同时指定TOP子句,则可能只包括ORDERBY子句。(4)子查询最多可以嵌套32层,个别查询可能会不支持32层嵌套。(5)任何可以使用表达式的地方都可以使用子查询,只要它返回的是单个值。(6)如果某个表只出现在子查询中而不出现在外部查询

4、中,那么该表中的列就无法包含在输出中。3.语法格式(1)WHERE查询表达式[NOT]IN(子查询)。(2)WHERE查询表达式比较运算符[ANY

5、ALL](子查询)。(3)WHERE[NOT]EXISTS(子查询)。简单嵌套查询嵌套查询内层子查询通常作为搜索条件的一部分呈现在WHERE或HAVING子句中。例如,把一个表达式的值和一个由子查询生成的一个值相比较,这个测试类似于简单比较测试。子查询比较测试用到的运算符是:=、<>、<、>、<=、>=。子查询比较测试把一个表达式的值和由子查询的产生的一个值进行比较,返回比较结果为TRUE的记录

6、。下面在“student”表中,查询“课程成绩”>96分的同学信息。在查询分析器中输入的SQL语句如下:usestudentselect*fromstudentwhere学号=(select学号fromgradewhere课程成绩>96)实现的过程如图1所示。图1成绩大于90分的同学信息子查询“select学号fromgradewhere课程成绩>96”的查询结果是“B003”,即是一个值。子查询过程如下:(1)从“grade”表中查询出“课程成绩”>96的学生学号为“B003”。(2)从学生表中查询出“学号”是“B003”的学生信息。带I

7、N的嵌套查询带IN的嵌套查询语法格式为:WHERE查询表达式IN(子查询)。一些嵌套内层的子查询会产生一个值,也有一些子查询会返回一列值,即子查询不能返回带几行和几列数据的表。原因在于子查询的结果必须适合外层查询的语句。当子查询产生一系列值时,适合用带IN的嵌套查询。把查询表达式单个数据和由子查询产生的一系列的数值相比较,如果数值匹配一系列值中的一个,则返回TRUE。下面在“student”和“grade”表中,查询参加考试的同学信息。在查询分析器中输入的SQL语句如下:usestudentselect*fromstudentwhere学号

8、in(select学号fromgrade)实现的过程如图1所示。图1参加考试的同学信息子查询“select学号fromgrade”的结果如图2所示。图2子查询结果子查询生成“grade”表中学号列的数值,WHERE子句检查主查询记录中的值是否与子查询结果中的数值匹配,匹配返回TRUE值。由于主查询记录的“B006”的学号值与子查询结果的数值不匹配,所以查询结果不显示学号为“B006”的记录信息。带IN的内层嵌套还可以是多个值的列表。例如,查询“年龄”是“22、21、24”的学生信息。SQL语句如下:usestudentselect*from

9、studentwhere年龄in(21,22,24)带NOTIN的嵌套查询NOTIN的嵌套查询语法格式:WHERE查询表达式NOTIN(子查询)NOTIN和IN的查询过程相类似。在“course”和“grade”表中,查询没有考试的课程信息。SQL语句如下:usestudentselect*fromcoursewhere课程代号notin(select课程代号fromgradewhere课程代号isnotnull)实现的过程如图1所示。图1没有考试的课程信息查询过程是用主查询中“课程代号”的值与子查询结果中的值比较,不匹配返回真值。由于主查

10、询中的“k05”和“k06”的课程代号值与子查询的结果的数据不匹配,返回真值。所以查询结果显示课程代号为“k05”和“k06”的课程信息。子查询存在NULL值时,避免使用NOTI

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。