INNER JOIN 方法

Sql = "SELECT * FROM 資料表1 INNER JOIN 資料表2 ON 條件"  

SELECT * 的 * 代表所有欄位,也就是從資料表選取所有欄位.
INNER JOIN的意思是將資料表1與資料表2合併,而 ON 之後的條件要成立.
這條件怎麼寫呢?

假如說資料表1有一個class欄位而資料表2也有一個class欄位,那 ON 你可以寫
資料表1.class = 資料表2.class
xxx.yyy ,xxx代表的是資料表,yyy代表的是欄位名稱.

現在如果將這整段寫出來的話:
Sql = "SELECT * FROM 資料表1 INNER JOIN 資料表2 ON資料表1.class = 資料表2.class"  

意思也就是如果資料表1的class欄位與資料表2的class欄位數值相等就將他們合併,如果資料表1的class欄位含有資料表2的class欄位沒有的數值,就將其剔除,反推亦同.INNER JOIN的意思就是當兩個資料表的某欄位含有相同的資料再合併, 如果沒有就剔除. 
執行上面這段SQL以後就會產生一個同時含有資料表1與資料表2的資料的新資料表,中間的連結欄位是用兩個資料表的class欄位. 

這個技巧可以怎麼使用呢? 就拿文章系統來講, 如果你有一個文章列表,和一個文章分類.
文章列表中紀錄每一個文章的資料和分類,而文章分類紀錄著分類資訊,你可以用這個方法來將兩個資料表暫時合併(在SQL被執行時合併)來同時存取兩個資料表的資料. 

RIGHT JOIN 方法
剛剛的 INNER JOIN是很棒沒有錯,但是如果今天有一個文章分類裡面沒有任何的文章,那由於文章列表中沒有對應的分類資料,該分類就會被剔除...這...不大對吧?! 因此還有RIGHT JOIN的方法.


Sql = "SELECT * FROM 資料表1 RIGHT JOIN 資料表2 ON 資料表1.class = 資料表2.class"  

其實大致上和剛剛是一樣的,只是RIGHT JOIN會以資料表2, 也就是運算子的右邊的資料表為重,RIGHT JOIN會將所有右邊資料表 (也就是資料表2) 的資料都加進來,而只將左邊資料表 (資料表1) 符合的資料加進來.

這樣在做文章分類清單的時候,就算一個文章列表裡面沒有任何文章,那該分類仍然會顯示出來. 

LEFT JOIN 方法
有RIGHT JOIN,當然就有 LEFT JOIN... 

Sql = "SELECT * FROM 資料表1 LEFT JOIN 資料表2 ON 資料表1.class = 資料表2.class"
  

其實就是一樣的意思啦, 之前的RIGHT JOIN是包含所有右邊資料表的內容, 那LEFT JOIN當然就是包含所有左邊資料表的內容囉! 


只要記得:

INNER JOIN -兩邊的資料表擁有相同的優先權,要兩邊都有的資料才會被包含在新的資料表.
RIGHT JOIN -右邊的資料表擁有優先權,右邊所有的資料都會被包含,而左邊只有符合的資料才會被包含.
LEFT JOIN -左邊的資料表擁有優先權,左邊所有的資料都會被包含,而右邊只有符合的資料才會被包含. 

轉自http://www.study-area.org/coobila/tutorial_381.html
    http://blog.yam.com/hn12303158/article/16424488



創作者介紹

沒雨的雨天

jay0625 發表在 痞客邦 PIXNET 留言(0) 人氣()