所有觀念如同part1,只是實做出來。
1.內部合併之基本方法 以及 撰寫sql步驟
--step4:填入需要輸出之資料行
select 員工.員工編號,姓名,性別,職稱,訂單.訂單編號,訂貨日期,產品編號,數量
--Step1:找出所需要的兩張DataTable,並且做交叉合併
--select *
from 員工,訂單,訂單明細
--Step2:進行內部合併(就是此三個資料表都有的條件)
where (員工.員工編號 = 訂單.員工編號 and
訂單.訂單編號 = 訂單明細.訂單編號) and
--Step3:加入塞選條件
(性別='男' and 職稱 = '業務')
--Step5:資料行的排序
order by 員工.員工編號 asc, 訂單.訂單編號 desc
2.使用Join On進行內部合併(Inner Join):Inner Join多張資料表間都有的資料。
select e.員工編號,o.訂單編號,姓名,o.訂單編號,訂貨日期,產品名稱,數量
from 員工 as E
inner join 訂單 as O on E.員工編號 = O.員工編號
inner join 訂單明細 as OD on O.訂單編號 = OD.訂單編號
inner join 產品資料 as P on OD.產品編號 = P.產品編號
--where DATEPART(YEAR,訂貨日期) = 2005 and DATEPART(QUARTER,訂貨日期) = 4
order by od.訂單編號 desc
3.外部合併(Left Join)
查詢每一位員工所承接之訂單資料,沒有承接訂單的員工也列出
select 員工.員工編號,姓名,訂單編號,訂貨日期
from 員工 left outer join 訂單 on 員工.員工編號 = 訂單.員工編號
order by 員工.員工編號
NOTE:外部合併最好注意,要先將符合的訂單資料先挑出來,在進行外部合併
查出2005第4季,所有員工與其訂單相關資料,無承接訂單之員工也要列出
易錯:
SELECT E.員工編號,姓名,O.訂單編號,訂貨日期,產品名稱,數量
FROM 員工 AS E
--先將符合的訂單資料先挑出來,在進行外部合併
--將訂單中符合的資料篩選出來,重新命名為O,在進行外部合併
LEFT OUTER JOIN (SELECT * FROM 訂單 WHERE DATEPART(YEAR,訂貨日期) = 2005 AND DATEPART(QUARTER,訂貨日期) = 4) AS O ON E.員工編號 = O.員工編號
LEFT OUTER JOIN 訂單明細 OD ON O.訂單編號 = OD.訂單編號
LEFT OUTER JOIN 產品資料 P ON OD.產品編號 = P.產品編號
ORDER BY E.員工編號 ASC,O.訂單編號 ASC
4.自我合併+外部合併
select 部屬.員工編號 as 部屬編號, 部屬.姓名 as 部屬性名, 上司.員工編號 as 上司編號 , 上司.姓名 as 上司姓名
--將員工資料表取別名為部屬之資料表
from 員工 as 部屬
--外部合併
left outer join
--再將員工資料表取別名為上司之資料表
員工 as 上司
--以此兩個同資料表(有相同資料但不同別名之資料表)做外部合併,條件如下
on 部屬.主管 = 上司.員工編號
5.自我合併+內部合併
select 部屬.員工編號 as 部屬編號 , 部屬.姓名 as 部屬性名, 上司.員工編號 as 上司編號, 上司.姓名 as 上司姓名
--將員工資料表利用別名,弄成兩個同資料但不同別名資資料表,自我合併成
from 員工 as 部屬,員工 as 上司
where 部屬.主管 = 上司.員工編號 and
(部屬.職稱 = '業務' or 部屬.職稱 = '業務助理')
6.UNION,INTERSECT,EXCEPT
UNION: A UNION B 包含A,B所有元素,若重複只出現一次,如果要重複的元素也可以重複出現改 UNION ALL
INTERSECT : A INTERSECT B,包含A,B兩者共同元素。
EXCEPT: A EXCEPT B 代表,從A中扣除所有B之元素,相反B EXCEPT A,就從B中扣除所有A之元素。
EX.
(UNION)
SELECT 公司名稱
FROM 客戶
UNION
SELECT 供應商名稱
FROM 供應商
(UNION ALL)
SELECT 公司名稱
FROM 客戶
UNION ALL
SELECT 供應商名稱
FROM 供應商
(INTERSECT)
SELECT 公司名稱
FROM 客戶
INTERSECT
SELECT 供應商名稱
FROM 供應商
(EXCEPT)
SELECT 公司名稱
FROM 客戶
EXCEPT
SELECT 供應商名稱
FROM 供應商
留言列表