iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 20
1

前言

經過正規化的資料庫常常會有多個表格(table),例如文章的表格裡只有作者id,要查作者資料就要拿作者id到用戶表格裡找。

  • articles

    id title user_id

    1|article1|1|
    2|article2|1|
    3|article3|Null|
    4|article4|3|
    5|article5|2|

  • users

    id user_name birth

    1|Amy|1990-03-03|
    2|Ban|1999-01-01|
    3|Cathy|1899-11-12|
    4|Dave|2012-11-11|
    5|Ele|1989-12-29|

為了要查找位於另一個表格內的資料,就需要用到Join,將兩個表格合併(咦!?)

Join有四種

  • Inner

  • Left

  • Right

  • Full

    分別表示交集、差集、連集。
    https://ithelp.ithome.com.tw/upload/images/20201005/20129556jstPXLQLIm.png

    以上面文章、作者表格為例。Inner就是如果兩邊有Null或找不到對應筆資料就會略過,如下文章表格裡Null那筆資料就不會被記。

    • Inner
      https://ithelp.ithome.com.tw/upload/images/20201005/20129556HvXq6xvTNE.png

    Left的話就是以左邊表格為主,即使左邊表格有NULL一樣會列出,只是那一欄也不會有右邊表格的資料。Right就是相反,以右邊表格為主。

    • Left
      https://ithelp.ithome.com.tw/upload/images/20201005/20129556bsGN8GtCaS.png

    • Right
      https://ithelp.ithome.com.tw/upload/images/20201005/201295564Kgz1wQQhM.png

    Full的話聰明的大家應該知道結果,只是mysql沒有Full這個選項,所以就不放圖了。

    SQL語法

    • t1、t2是自訂簡稱,可以少打些字。
    • 一開始可以先打SELECT*,先決定要Join哪兩個表格和Join的種類(join type),
      印出正確結果後再指定要確切哪些欄位(column)。
    • 可以再搭配條件sql使用,例如where
    SELECT <t1.column1>,<t2.column2>
    FROM <table1> AS t1
    <join_type> JOIN <table2> AS t2
    ON t1.<column> = t2.<column>
    [condition]
    

    最後可以把組合起來的新表格用view存起來,方便下次查找,不要再重打落落長的Join sql。

    CREATE VIEW <view_name> AS
    SELECT <t1.column1>,<t2.column2>
    FROM <table1> AS t1
    <type> JOIN <table2> AS t2
    ON t1.<column> = t2.<column>
    [condition]
    

    查找的話就是這樣

    SELECT * FROM <view_name>;
    

    參考資料

    https://www.youtube.com/watch?v=8jU8SrAPn9c


上一篇
Laravel:save, attach, sync, toggle的差別
下一篇
Laravel:Collection常用的一些方法整理
系列文
網頁後端的30件小事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言