iT邦幫忙

2022 iThome 鐵人賽

DAY 9
0
自我挑戰組

資料庫二年級:練習AdventureWorks範例資料庫系列 第 9

[第九天]一層又一層的子查詢

  • 分享至 

  • xImage
  •  

今天要先來看一下雙層的子查詢。

這是兩層子查詢

題目是:一級主管的住址。
翻譯過後,一級主管的居住地資料...(傻眼)
好吧,來試試看!

需要的資料有:

  1. 一級主管的名單,
  2. 再去對應相對的詳細地址。

在資料表裡看起來相關的有:

  1. 一級主管名單:[HumanResources].[Employee](鍵:BusinessEntityID)
  2. 詳細地址:[Person].[Address](鍵:AddressID)

找到資料表後,我們再找出
兩者的橋樑:[Person].[BusinessEntityAddress],
因為這張資料表具備(鍵:BusinessEntityID)(鍵:AddressID)這兩個鍵,
所以可以將表關聯起來,
如圖所示:
https://ithelp.ithome.com.tw/upload/images/20220909/20152049XbhFwCAocC.jpg

另外我們也需要選定範圍,
這次的範圍是「一級主管」,
因此先建立「子」的部分。

步驟一:先寫出「子」(設定範圍)

先找出一級主管的工作編號(BusinessEntityID):
(暫時先把「管理階層」也列出來,比較安心)

select OrganizationLevel,BusinessEntityID 
from [HumanResources].[Employee] 
where OrganizationLevel = 1

https://ithelp.ithome.com.tw/upload/images/20220911/201520493dGt2gW6V6.jpg

再找出對應的地址邊號(AddressID):

select AddressID from Person.BusinessEntityAddress where BusinessEntityID 
in (select BusinessEntityID from HumanResources.Employee where OrganizationLevel=1)

https://ithelp.ithome.com.tw/upload/images/20220911/20152049jO8jpXaoCO.jpg
這樣選出來的結果,也就是我們要找的範圍。

步驟二:放入in的範圍

在[Person].[Address]資料表中找出地址

select * from Person.Address where AddressID 
in (
select AddressID from Person.BusinessEntityAddress where BusinessEntityID 
in (
select BusinessEntityID from HumanResources.Employee where OrganizationLevel=1)
)order by AddressID

https://ithelp.ithome.com.tw/upload/images/20220911/20152049J0wByJ05Ce.jpg

之前我們看了一層的子查詢,
以及如何轉換成JOIN,
今天我們學會了子查詢也可以一層又一層(的剝開我的心?)

試著轉換成JOIN看看吧。


上一篇
[第八天]取代子查詢的是...
下一篇
[第十天]子查詢(完)&效能初探
系列文
資料庫二年級:練習AdventureWorks範例資料庫30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言