「iThome 第七屆鐵人賽 11」SQL語法III:join

熱門文章 (Popular Post)

Posted by : Duran Hsieh 1月 06, 2015



JOIN 在 SQL 語法中是常用且相當基礎的語法,在系統開發與資料庫維護是必備技能,

但在經歷的過的專案中,也有少數不能隨意使用 JOIN 語法的限制



(因為資料量過於龐大,使用 JOIN 可能會造成資料庫卡住,只能將資料取出後自行組裝)。


這一篇寫 JOIN 熟練一下JOIN語法(如left、right join不常用,每次用都要查一下),

也順便留一些範例,讓自己未來忘記的時候,能回來看一下。

----------------------------------- 我是分隔線 -----------------------------------

在oracle的join使用方法分成下列幾項:

1.cross join

將所有結果全部顯示出來且回傳

(若A table有10個資料項,B table有5個資料欄,則回傳10*5資料結果)


select user_name,department_name

from user 

cross join department

2.natural join

可用於資料欄中有相同欄位名稱的兩個資料表進行join,除了兩個欄位內容值必須相同才會select,

其兩個欄位的資料型態要必須相同。
select use_id, user_name, city, location_id

from user 

natural join location (可+where 子句 )


3.using clause

若兩個資料表有相同欄位名稱,但沒有相同的資料型態,我們能夠使用using 進行equaljoin。

using 只能用來比對其中一個欄位,且不能與資料表名稱或別名一起使用。

select u.user_name ,l.city

from user u join location l using (location_id)

where location_id = '2300'


4.join on

join可以使用on來指定任意條件或特定欄位進行join,且可以讓sql語法更具可讀性。

select u.user_name ,l.city

from user u join location l

on u.location_id = l.location_id


5.three way join

我們也可以join多個資料表

select u.user_name, l.city, d.department_name

from user u

join location l 

on u.department_id= d.department_id

join department d

on d.locaiton_id = l.location_id


6.full(or two-side)join

一般的inner join只會回傳相同數值的資料內容,而不相符的欄位不會回傳回來。

故出現的outer join顯示不符合的欄位,回傳使用者想要的資料內容(right outer join,left outer join)。

若同時顯示right outer join,left outer join的結果,就是full join

select u.user_name, d.department_name

from user u (outer\left\right) outer join department d

on (u.department_id = e.department_id)


常用的SQL語法大致上就介紹這些,多數的語法大致上用上列方式組合而成,

其於個人較熟悉的部分就不詳加介紹

後續會介紹sequence, index, view,synonyms等資料庫相關物件。

--

一連串的出差與教育訓練旅程終於結束了QQ 可以專心寫code !!

耶!! 放假 !!


Leave a Reply

Subscribe to Posts | Subscribe to Comments

- Copyright © Duran Hsieh @ Matsurigoto - Date A Live - Powered by Blogger - Designed by Johanes Djogan -