論壇目錄 / 程式設計 / 資料庫 / Mysql /

用SQL合併資料表

發表新主題
隨機主題
上個主題
下個主題
|
    用SQL合併資料表

    ???

    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代表的是欄位名稱.

    現在如果將這整段寫出來的話:

    程式項目名稱
    1. /* 原始程式碼 */
    2. 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的方法.

    程式項目名稱
    1. /* 原始程式碼 */
    2. 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...

    程式項目名稱
    1. /* 原始程式碼 */
    2. Sql = "SELECT * FROM 資料表1 LEFT JOIN 資料表2 ON 資料表1.class = 資料表2.class"

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

    • INNER JOIN - 兩邊的資料表擁有相同的優先權, 要兩邊都有的資料才會被包含在新的資料表.
    • RIGHT JOIN - 右邊的資料表擁有優先權, 右邊所有的資料都會被包含, 而左邊只有符合的資料才會被包含.
    • LEFT JOIN - 左邊的資料表擁有優先權, 左邊所有的資料都會被包含, 而右邊只有符合的資料才會被包含.
    • 本文為轉載文章 [原文]
    • 關鍵字 : class, RIGHT, INNER, SELECT, class欄位, 原始程式碼, 左邊資料表, 右邊資料表, 這整段寫出來, 資料表為重, 資料表2合併, 資料加進來, 資料再合併, 該分類就會, 該分類仍然會顯示出來, 而文章分類紀錄, 由於文章列表中, 文章列表中紀錄每一, 技巧可以怎麼使用呢, 從資料表選取所
    00
    2013-12-05T15:08:00+0000


    • 當您未登入羊皮紙時,可以利用臉書 Facebook 登入來發表迴響。若使用羊皮紙會員身份發表迴響則可獲得經驗值及虛擬金幣,用來參加羊皮紙推出的活動。
    發表迴響
     
    驗證字串
    留言