
本文中3D天堂将介绍什么是SQL Server(Transact-SQL)中的子查询以及如何使用它。
Transact-SQL子查询是什么?
子查询是嵌套在SELECT、UPDATE、INSERT或DELETE语句(DML语句)中的查询(SELECT语句),子查询可以嵌套在另一个子查询中,可以在SQL Server语句中需要表达式的任何地方编写子查询。
内部和外部查询:子查询也称为INNER QUERY或INNER SELECT,包含子查询的查询称为OUTER QUERY或OUTER SELECT。
注意:以下是应该了解的有关SQL Server的几个要点。
- 子查询返回单个值。
- 子查询总是包含在括号中。
- 子查询必须包含SELECT子句和FROM子句。
- 子查询不能包含COMPUTE和 FOR BROWSE子句。
- ORDER BY子句只能包含在TOP语句中。
- 无法更新使用子查询创建的视图。
- 子查询最多可以嵌套32层。
SQL Server中的示例子查询
子查询可以写在SELECT子句、FROM子句或WHERE子句中,首先创建两个将在示例中使用的表。
产品表:
Create table ProductsTable
(
ID int Primary Key,
Name nvarchar(50),
Price int,
Details nvarchar(150)
)
Insert into ProductsTable Values (1, 'Laptop', 30000, 'A laptop for home users')
Insert into ProductsTable Values (2, 'Washing Machine', 20000, 'White color front load machine ')
Insert into ProductsTable Values (3, 'TV', 22000, '32 inch HD LED TV')
Insert into ProductsTable Values (4, 'Fridge', 30000, '190 Ltr double door fridge')

产品销售记录表:
Create table SaleRecordTable
(
Id int Primary Key Identity,
ProductID int,
SoldQuantity int,
SaleDate Date
)
Insert into SaleRecordTable Values (2, 3, '10-10-2016')
Insert into SaleRecordTable Values (3, 5, '10-10-2016')
Insert into SaleRecordTable Values (2, 2, '11-10-2016')
Insert into SaleRecordTable Values (4, 6, '11-10-2016')
Insert into SaleRecordTable Values (2, 6, '12-10-2016')
Insert into SaleRecordTable Values (4, 6, '13-10-2016')

WHERE子句
可以在SELECT语句中添加子查询。
可以使用比较运算符来比较列的值并从子查询中获取返回值。
需要显示在任何特定日期售出的产品及其数量,可以在WHERE和IN中使用子查询来得到这个结果。
显示在特定日期销售的给定产品的数量:
-- Where Clause
Select ID, Name, Details
From ProductsTable
Where ID = (Select ProductID from SaleRecordTable Where SaleDate ='10-10-2016' AND ProductID =2)

显示特定日期所有已售出的产品数量:
-- Where Clause
-- IN
Select ID, Name, Details
From ProductsTable
Where ID IN (Select ProductID from SaleRecordTable Where SaleDate ='10-10-2016')

现在如果需要显示已经售出的产品,那么可以使用NOT IN和WHERE子句。
-- NOT IN
Select ID, Name, Details
From ProductsTable
Where ID NOT IN (Select ProductID from SaleRecordTable)

选择子句
可以在SELECT子句中添加子查询,想使用聚合函数(如SUM、COUNT、MIN或MAX)获取数据,但不想在主查询中应用聚合函数时使用它。
假设3D天堂需要显示产品名称和销售总量,然后可以使用子查询来获得所需的结果。
-- Select Clause
Select Name,
(Select SUM(SoldQuantity) from SaleRecordTable where ProductId = ProductsTable.ID) as 'Total Quantity Sold'
from ProductsTable

FROM子句
可以在FROM子句中添加子查询,FROM中的子查询可用于返回多行和多列,子查询返回的结果集称为派生表。
假设需要显示产品名称和销售总量,然后可以使用子查询来获得所需的结果,在下面给出的查询中,子查询以名称作为别名,该名称用于获取子查询的字段。
最终结果将排除根本未售出的产品。
-- From Clause
select Name, Subquery1.total_quantity
From ProductsTable,
(Select ProductID, SUM(SoldQuantity) as total_quantity from SaleRecordTable GROUP BY ProductId) Subquery1
where Subquery1.ProductID = ProductsTable.ID

…
以上是3D天堂关于SQL Server中的子查询的全部内容,如果你有任何反馈,请随时在本页面下方留言。