嵌套查询
保存查询结果
从查询结果创建一个永久表:
select 字段列表 into 新表名
from 原表名
where 查询条件
嵌套查询
一个 select……from……where语句称为一个查询块。
将一个查询块嵌套在另一个查询块的where子句或having短语的条件中的查询称为嵌套查询。
其中外层查询叫父查询或主查询,内层的查询叫子查询或从查询。
insert,delete,update,select命令中允许表达式的地方都可以包含子查询。子查询甚至可以包含在另一个子查询中
嵌套查询语法规则
子查询的SELECT总是用圆括号括起来
不能包含compute或for browse子句
任何可以使用表达式的地方都可以使用子查询,只要它返回的是单个值
如同时指定top子句,则可能只包括order by子句
子查询最多可嵌套32层,个别查询可能不会支持32层
如果某个表只出现在子查询而没有出现在外部查询中,那么该表的列就无法包含在输出中
几种语法格式示例
Where 查询表达式 比较运算符 [any|all|some](子查询)
where 查询表达式 [not] in (子查询)
Where [not]exists(子查询)
使用简单比较符的嵌套查询
使用简单比较嵌套查询的比较符有:=、!=(<>)、>、>=、
select
from 表
Where 表达式(列名) 比较符 (select 列 from 表 [where…])
带[any|all|some]的比较嵌套查询
1、T—SQL支持3种定量谓词:some,any,all。它们都是判断是否任何或全部返回值都满足搜索要求的。其中some,any只注重是否有返回值满足搜索要求,它们含义相同可替换使用。
select
from 表
Where 表达式(列名) 比较符 all | some | any (select 列 from 表 [where…])
使用比较符的嵌套查询
Some和any:表示表达式只要与子查询结果集中的某个值满足比较的关系时,就返回true,否则返回false.
All:指定表达式要与子查询结果集中的每个值都进行比较,当表达式与每个值都满足比较的关系时,才返回true,否则返回false;
【例】查找比所有计算机系的学生年龄都大的学生。
select * from student
where 出生时间
where 专业名 = '计算机')
使用IN操作符的嵌套查询
子查询只能返回一个或一列值,当返回一列值时适合用in操作符,表示表达式的值是子查询产生的一系值中的一个就返回TRUE
select
from 表
where 列名 in (select 列 from 表 [where…])
使用EXISTS操作符的嵌套查询
EXISTS谓词只注重子查询是否返回行,如果子查询返回,谓词返回为真,否则为假。 EXISTS并不真正使用子查询的结果,它仅仅测试子查询是否产生任何结果。
EXISTS谓词子查询的SELECT子句中可包含任何列名,甚至多列,因为它只在乎是否有返回行。
select
from 表
where exists (select 列 from 表 [where…])