[SQL 筆記備份]- 023_子查詢(2)

[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


 


發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *