使用SQL语言实现相关子查询和嵌套子查询
在SQL中,子查询分为两种:相关子查询和嵌套子查询
今天和大家讲解一个小知识,下面举一个例子:
如图所示,在一个表中有多个列,编号(BookId)图书名(BookName)出版社(CB)价格(MN)
先在数据库中插入一个Book表,
1 use 数据库名称 2 go 3 create table Book 4 ( 5 BookId int not null, 6 BookName nvarchar(20) not null, 7 CB nvarchar(20) not null, 8 MN money not null 9 )
再在表中插入几条数据
1 insert Book(BookId,BookName,CB,MN) 2 select 2,'c#高级应用','圣通出版',23.00 union 3 select 2,'Jsp开发应用','机械出版社',45.00 union 4 select 3,'高等数学','济南出版社',25.00 union 5 select 3,'疯狂英语','清华大学出版社',32.00
-------------------------------------------------------------------------------------------------------
下面进入正题
嵌套子查询:
嵌套子查询的执行部依赖于外部的查询.
执行过程:
1.执行子查询,其结果不被显示,而是传递给外部查询,作为外部查询的条件使用.
2.执行外部查询,并显示整个结果.
嵌套子查询一般分为:返回单值的子查询和返回一个列表的子查询,下面举例说明:
返回单值:
--查询所有价格高于平均价格的图书名,作者,出版社和价格。
USE tempdb GO SElECT BookName,作者,CB,MN FROM Books WHERE MN > ( SELECT AVG(MN) FROM Books ) GO
-------------------------------------------------------------------------------------------------------
返回值列表:
--查询所有借阅图书的读者信息
SElECT * FROM Readers WHERE 读者编号 IN ( SELECT 读者编号 FROM [Borrow History] ) GO
相关子查询:
相关子查询的执行依赖于外部查询.多数情况下都是子查询的WHERE语句中引用了外部查询的表.
执行过程:
1.从外层查询中取出一个元组,讲元组相关的列的值传给内层查询
2.执行内层查询,得到子查询的值
3.外查询根据子查询返回的结果或结果集得到满足条件的行
4.然后外层查询取出下一个元组重复做以上3条步骤,知道外层的元组全部处理完毕
下面举例说明:
一、查询Booka表中大于该类图书价格平均值的图书信息
1 select BookName,CB,BookId,MN 2 from Book as a where MN > 3 ( 4 select AVG(MN) FROM Books AS b 5 where a.BookId=b.BookId 6 )
在讲个一个就结束了,18岁以下的请自觉关闭页面-.-
SQL语言的执行顺序:
五slelect
一、from
二、where
三、group by
四、having
六、order by