数据查询之子查询和嵌套查询
第一部分定义
子查询:子查询是select语句中另外一条select语句。常常被称为内查询。
嵌套查询:一个外层查询中包含有另一个内层查询,即一个sql查询语句块可以嵌套在另一个查询块的where中。其中外层查询称为父查询,主查询。内层查询可也称为子查询。
第二部分简单概述
子查询的select查询总是使用圆括号括起来。
子查询中不使用order by子句,order by子句只能对结果进行排序
select,insert,update或delete中允许是一个表达式的地方都可以使用子查询
如果某个表出现在子查询中而不出现外部查询中,该表中的列无法输出。
第三部分语法格式
where 查询表达式 [NOT] IN (子查询)
where 查询表达式 比较运算符 [any/all] (子查询)
where [not] exists (子查询)
第四部分具体应用
1单值比较查询。把表达式的值与子查询产生的值进行比较,作为搜索条件的一部分呈现在where子句中,经常用到=,<>。且结果为单一值。举例:查询与110相同年龄的学生。
select *
from student
where age = (select age from student
where 学号 = '110')
2带in的嵌套查询。当子查询产生一系列值时,适合使用带IN的嵌套查询。举例:在students和grade表中查询参加考试的同学信息。
select *
from student
where 学号 in (select 学号 from grade)
注:当嵌套子查询中存null值时,避免使用not in
3带some的嵌套查询。some是把每一行指定的列值与查询的结果进行比较,返回满足条件的值,。例如:查询年龄小于平均年龄的所有学生信息。
select *
from student
where 年龄<some
(select avg(年龄)from student)
4any与some完全等价。
5带all的嵌套查询。多值比较。将列值与子查询结果进行查询,要求所有列的查询结果都为真,否则就不返回该行。例如找出年龄最小的学生
Select * From Student Where sage < all (