使用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

原文地址:https://www.cnblogs.com/csdwan/p/SQL.html