表格合併介紹

何謂表格合併
  • 進行兩個以上的表格合併,並傳回單一結果的資料查詢,也可以稱為合併查詢
表格合併的類型
  • 等價合併
  • 自身合併
  • 非等價合併
  • 外部合併
  • 迪卡兒積(直積)
等價合併介紹
  • 可合併表格都存在的列,輸出合併後的資料
  • 格式
SELECT select_list FROM table_reference [INNER] JOIN table_reference
ON condition | USING(column) 
 select_list:欄位名稱
 table_reference:表格名稱和子查詢
 condition:合併條件
 column:合併條件所使用的欄位名稱
  • 語法示範(使用ON)
等價合併emp表格的dept_id欄位與dept表格的dept_id欄位,輸出合併後的查詢結果
 select * from emp e join dept d on(e.dept_id=d.dept_id);
  • 語法示範(使用USING
等價合併emp表格的dept_id欄位與dept表格的dept_id欄位,輸出合併後的查詢結果
 select * from emp e join dept d using(dept_id);
  • 語法示範(不使用JOIN就進行等價合併)
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);
  • 語法示範(不使用JOIN就進行自身合併)
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;
  • 語法示範(不使用JOIN就進行非等價合併)
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:合併條件所使用的欄位名稱
  • 語法示範(使用LEFT,RIGHT,FULL)
查詢哪些員工沒有部門
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;