SQL Server 查詢指令 (3)

基本介紹

教學目標

初步了解 T-SQL 透過 SELECT 指令從 SQL Server 中的一個或多個資料表選取一個或多個資料列或資料行。

重點概念

首先 SELECT 指令是資料操作語言中語法最複雜的陳敘式,其主要子句摘要為:

1
2
3
4
5
6
[ WITH <common_table_expression>]
SELECT select_list [ INTO new_table ]
[ FROM table_source ] [ WHERE search_condition ]
[ GROUP BY group_by_expression]
[ HAVING search_condition]
[ ORDER BY order_expression [ ASC | DESC ] ]

接著 SELECT 指令子句都有不同的用途,說明如下表所示。

子句 說明
WITH 指定通用資料表運算式的暫存結果之名稱
SELECT 指定查詢結果的欄位資訊
FROM 指定查詢結果的來源資料表
WHERE 指定查詢結果篩選的條件
GROUPBY 指定相同欄位進行群組查詢
HAVING 指群組查詢的篩選條件
ORDERBY 指定查詢結果的欄位排序

最後透過三個示意範例簡單說明如何透過 SELECT 指令從 SQL Server 中的一個或多個資料表選取一個或多個資料列或資料行。

示意範例一

顯示每個業務人員每年的銷售訂單總數。

1
2
3
4
5
6
7
8
9
10
11
12
13
WITH Sales_CTE (SalesPersonID, SalesOrderID, SalesYear)
AS
(
SELECT SalesPersonID, SalesOrderID, YEAR(OrderDate) AS SalesYear
FROM Sales.SalesOrderHeader
WHERE SalesPersonID IS NOT NULL
)

SELECT SalesPersonID, COUNT(SalesOrderID) AS TotalSales, SalesYear
FROM Sales_CTE
GROUP BY SalesYear, SalesPersonID
ORDER BY SalesPersonID, SalesYear;

GO

示意範例二

擷取 SalesPerson 資料表中的獎金是 5000.00,且 Employee 和 SalesPerson 資料表中的員工識別碼相符的每一位員工的姓名。

1
2
3
4
5
6
7
8
SELECT DISTINCT p.LastName, p.FirstName 
FROM Person.Person AS p
JOIN HumanResources.Employee AS e
ON e.BusinessEntityID = p.BusinessEntityID WHERE 5000.00 IN
(SELECT Bonus
FROM Sales.SalesPerson AS sp
WHERE e.BusinessEntityID = sp.BusinessEntityID);

GO

示意範例三

會依產品識別碼來分組 SalesOrderDetail 資料表,且只會包括訂單總計超出 $1000000.00,平均訂單數量小於 3 的產品群組。

1
2
3
4
5
6
SELECT ProductID, AVG(OrderQty) AS AverageQuantity, SUM(LineTotal) AS Total
FROM Sales.SalesOrderDetail
GROUP BY ProductID
HAVING SUM(LineTotal) > $1000000.00
AND AVG(OrderQty) < 3;

GO

相關資源