T-SQL語法 子查詢

摘要: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 之間有下過訂單的員工

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