前言
1. 将一个查询块嵌套在另一个查询块的where子句或having短语的条件中的查询称为嵌套查询
2. 上层的查询块叫外层查询或父查询或主查询,下层查询块又称为内层查询或子查询,sql语句允许多层嵌套查询!
3. 子查询的select语句不能使用order by子句,order by子句永远只能对最终(或外)查询结果排序
4. 嵌套查询的求解方法是由里向外处理
带有in谓词的子查询
1.查询与“王林”同一个系学习的学生的所有信息
一般的查询方法:
步骤一:确定“王林”所在系名
select dept from dbo.s where sn='王林'
步骤二:查找所有计算机系的学生
select *from dbo.s where dept='计算机'
2.分步写比较麻烦,使用嵌套查询:
select *from dbo.s where dept in(select dept from dbo.s where sn='王林')
3查询选修了课程名为“数据库”的学生学号和姓名
select * from dbo.s where sno in (select sno from dbo.sc where cno in (select cno from dbo.c where cn='c语言'))
带有比较运算符的子查询
1.带有比较运算符的子查询是指父查询与子查询之间用比较运算符进行连接。
常用的比较运算符:>、<、=、>=、<=、!=、
2.一个学生只能在一个系学习,所以内查询王林所在系的结果是唯一值
3.查询与“王林”同一个系学习的学生的所有信息(sql)
select *from dbo.s where dept =(select dept from dbo.s where sn='王林')
带有any 或all谓词的子查询
1. 子查询返回单值时可以用比较运算符,返回多值时必须结合使用any或all谓词。使用any或all谓词时必须同时使用比较运算符。
2.
>any | 大于子查询结果中的某个值 |
<any | 小于子查询结果中的某个值 |
>=any | 大于等于子查询结果中的某个值 |
<=any | 小于等于子查询结果中的某个值 |
=any | 等于子查询结果中的某个值 |
!=any或<>any | 不等于子查询结果中的某个值 |
>all | 大于子查询结果中的所有值 |
<all | 小于子查询结果中的所有值 |
>=all | 大于等于子查询结果中的所有值 |
<=all | 小于等于子查询结果中的所有值 |
=all | 等于子查询结果中的所有值 |
!=all或<>all | 不等于子查询结果中的任何一个值 |
3.查询其他系中比信息系所有学生年龄小的学生名单(升序)
select *from dbo.s where age<all(select age from dbo.s where dept='信息') and dept !='信息' order by age asc
或集函数处理:
select *from dbo.s where age<(select min(age) from dbo.s where dept='信息') and dept !='信息' order by age asc
数据库表s,c,sc截图请到:http://www.cnblogs.com/fuge/archive/2012/03/16/2400913.html