SQL SERVER:多表查询之—行子查询、表子查询(25)
一、行子查询:
1、子查询返回的结果为一行,可以是多列;
2、常用的操作符:=、<>、IN、NOT IN
3、例:
1)查询与王小小的年龄与性别相同的员工记录
USE MyServer
GO
SELECT E_Name,E_Age,E_Gender FROM Employee WHERE
CHECKSUM(E_Age,E_Gender) =
(
SELECT CHECKSUM (E_Age,E_Gender) FROM Employee WHERE E_Name='王小小'
)
GO
注:在SQL SERVER 不支持多列查询,可用CHECKSUM函数来实现
三、表子查询:
1、子查询返回结果是多行多列,这种子查询称为表子查询,通常做为虚拟表来进行连接查询
2、常用操作符:IN、NOT IN
3、例:
1)查询销售1部、销售2部的人员名称,包括部门名称、姓名、年龄、电话
USE MyServer
GO
SELECT E_Name,E_Age,E_Phone,D_Name FROM Employee E JOIN
(
SELECT D_Id,D_Name FROM Department WHERE D_Name IN ('销售1部','销售2部')
) D ON E.D_Id=D.D_ID
GO
2)查询各产品类别的库存量大于30的产品记录,包含产品类别名称、库存数量
USE MyServer
GO
SELECT P_SortName,库存量 FROM ProductSort P JOIN
(
SELECT P_ID,SUM(PL_Amount) 库存量 FROM ProductList
GROUP BY P_Id HAVING SUM(PL_Amount)>30
) P2 ON P.P_Id=P2.P_Id
GO