表格合併介紹
何謂表格合併
- 進行兩個以上的表格合併,並傳回單一結果的資料查詢,也可以稱為合併查詢
表格合併的類型
- 等價合併
- 自身合併
- 非等價合併
- 外部合併
- 迪卡兒積(直積)
等價合併介紹
SELECT select_list FROM table_reference [INNER] JOIN table_reference
ON condition | USING(column)
select_list:欄位名稱
table_reference:表格名稱和子查詢
condition:合併條件
column:合併條件所使用的欄位名稱
等價合併emp表格的dept_id欄位與dept表格的dept_id欄位,輸出合併後的查詢結果
select * from emp e join dept d on(e.dept_id=d.dept_id);
等價合併emp表格的dept_id欄位與dept表格的dept_id欄位,輸出合併後的查詢結果
select * from emp e join dept d using(dept_id);
select * from emp e,dept d where e.dept_id=d.dept_id;
自身合併介紹
- 在自己的表格裡,合併自己的欄位
- 格式(與等價合併一樣)
- 語法示範(只能使用ON,不能使用USING)
傳回經理與員工的工作關係
select e.last_name,m.last_name
from emp e join emp m on(e.manager_id=m.employee_id);
select e.last_name,m.last_name
from emp e ,emp m where e.manager_id=m.employee_id;
非等價合併
- 可合併表格都存在的列,不是使用=操作符進行合併而是使用BETWEEN語句進行範圍內的合併
- 格式(與等價合併一樣)
- 語法示範(只能使用ON,不能使用USING)
查詢每個員工的薪資等級
select e.last_name,g.level_grade from emp e join sal_grade g
on e.salary between g.lower_sal and high_sal;
select e.last_name,g.level_grade from emp e,sal_grade g
where e.salary between g.lower_sal and hight_sal;
外部合併介紹
- 外部合併是內部合併(等價合併/自身合併/非等價合併)的延伸,內部合併可傳回指定欄位相等的列,但外部合併可以傳回不滿足對方條件的列
- 外部合併可以分為三種方式
LEFT OUTER JOIN:進行左側外部合併
RIGHT OUTER JOIN:進行右側外部合併
FULL OUTER JOIN: 進行完全外部合併
SELECT select_list
FROM table_reference {LEFT|RIGHT|FULL} [OUTER] JOIN table_reference
ON condition | USING(column)
select_list:欄位名稱
table_reference:表格名稱和子查詢
condition:合併條件
column:合併條件所使用的欄位名稱
查詢哪些員工沒有部門
select e.last_name,d.dept_name
from emp e right outer join dept d on(e.dept_id=d.dept_id);
查詢哪些部門沒有員工
select e.last_name,d.dept_name
from emp e left outer join dept d on(e.dept_id=d.dept_id);
查詢哪些部門沒有員工與哪些員工沒有部門
select e.last_name,d.dept_name
from emp e full outer join dept d on(e.dept_id=d.dept_id);
迪卡兒積(直積)介紹
- 多方表格的行數進行相乘,如果a表格有10筆資料,b表格有10筆資料,a與b表格進行合併所輸出的筆數為100行,因為10*10=100,這種型態的合併用於多種資料配對
- 語法示範
查詢結果為emp表格與dept表格的多種資料配對
select * from emp,dept;