摘要:T-SQL語法 子查詢
SQL 2000之前, 子查詢可說是個不可或缺的功能, 有些稍微複雜的功能, 都得透過子查詢來完成,
這裡大致把子查詢分成三大類:
1. IN
Select * From Products
Where ProductID IN (1, 12, 17)
找出 ProductId = 1 或是 12 或是 17 的資料, 可以簡化條件式的下法,
而這個 IN 的條件又可以放一個完整的 Select 語法 (除了Order By 以外)
Select * From Employees
Where EmployeeID IN
(
Select EmployeeID From Orders
Where OrderDate Between '1997-1-1' And '1997-1-5'
)
找出Employees的資料, 在 Orders 中 1997-1-1 至 1997-1-5 之間有下過訂單的員工
找出Employees的資料, 在 Orders 中 1997-1-1 至 1997-1-5 之間有下過訂單的員工
2. Table
子查詢也可當成一個資料表使用
Select e.EmployeeID, e.FirstName, o.OrderID
From Employees e
Left Join
(
Select OrderID, EmployeeID
From Orders
Where OrderDate Between '1997-1-1' And '1997-1-5'
) o
on e.EmployeeID = o.EmployeeID
不過如果將子查詢當成一個資料表時, 一定要有別名
3. Field
子查詢也可以當作是個欄位, 不過使用這樣的語法時, 要小心效能的問題
雖然邏輯上是行得通的, 可實際跑起來很可能會愈時中止, 用這樣的方法時
依三思,
Select CategoryID, SUM(UnitPrice) as Total,
100 * SUM(UnitPrice) / (Select SUM(UnitPrice) From Products) as [%]
From Products
Group By CategoryID
這大概是整理出來 子查詢常用的幾種方式,
下一篇, 來討論一個資料庫讓人又愛又恨的議題, NULL