[SQL 筆記備份]- 023_子查詢(2)
[SQL 筆記備份]- 023_子查詢(2)
資料來源:http://www.dotblogs.com.tw/jerrytab/archive/2012/12/25/85956.aspx
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