在上一章我們學到合併查詢兩個資料表並且將查詢後取得的資料顯示在一個結果集中。而在這一章我們要學到更深入複雜的內容,對兩個以上的資料表建立合併查詢、關聯資料表、如何管理結果集中的資料、如何以類似資料表的格式暫存查詢結果。
情境一 具兩種類型的合併查詢
需要對三個以上的資料表進行合併查詢時,可能會需要用到不同類型的合併查詢,像是內部合併與外部合併做搭配。
舉例:查詢出每個部門的員工名單和對應的薪水,並且即使某些員工沒有薪水記錄或者某些部門沒有員工,也能在結果中顯示。
select e.employee_name,
d.department_name,
s.salary
from employees e
join departments d
on e.department_id = d.department_id -- 內部合併:將員工與部門信息合併
left join salaries s
on e.employee_id = s.employee_id; -- 外部合併:將薪水信息合併進來
情境二 合併查詢多個資料表
MYSQL實際上能允許我們一次合併查詢61個資料表,但我們其實很難寫出一次查詢這麼多資料表的程式碼,如果發現需要合併查詢超過10個資料表時就可能需要重新設計正在使用的資料庫,來簡化查詢程式碼的流程。
在撰寫此類程式碼時需要注意查詢引用資料欄時,要記得在資料欄名稱前加上資料表的別名與英文句點,來避免錯誤
舉例:查詢出在某一特定地點如Taipei的部門中,員工的薪水大於某一特定數額如 50000
select e.employee_name,
d.department_name,
d.location,
s.salary
from employees e
join departments d
on e.department_id = d.department_id --關鍵字on處理第一個條件
and d.location = 'Taipei' -- 使用 AND 關鍵字行第二個條件-篩選部門所在位置
left join salaries s
on e.employee_id = s.employee_id
and s.salary > 50000 ; -- 使用 AND 關鍵字行第二個條件-員工薪水大於50000
在這個範例中查詢會需要滿足多個條件,我們會用到關鍵字on和and,on用來處理第一個條件而and用來處理指定的第二個條件,根據需求增加and陳述式
關聯資料表
藉由引用其他資料表的主要索引鍵,讓其他資料表的資料列可以彼此建立關係
管理結果集的資料
關鍵字limit
select *
from best restaurant
order by place
limit 5;
表示結果集會顯示出餐廳排名前五名。limit後面加的數字是多少就會顯示多少資料列關鍵字union
select fruit_name form orchard_1
union all
select fruit_name form orchard_2;
結果集
fruit_name
----------------
apple
banana
orange
peach
apple
暫存資料表
外層查詢
selsct employee_name
from employees
where department_id =
( 內層查詢
selsect department_id
from departments
wherw location = 'Taipei'
);
selsct employee_name
from employees
where department_id **in**
(
selsect department_id
from departments
wherw location = 'Taipei'
);
以關鍵字in取代=下一章:比較運算子&查詢值