SQL多表查詢

SQL 提供了JOIN關鍵字來連接多張表的查詢(即連接的是SELECT結果集)基本分爲以下幾種:

  • 內連接:JOIN / INNER JOIN,是最爲常用的一種連接,其效果是隻返回條件匹配的那條數據

    • 等值連接:ON 子句中使用了運算符“=”,且連接的兩個字段最好是主鍵
      例如select student.name, avg(sc.score) as avg_score from student join score on student.id = sc.id group by name;
    name avg_score
    趙雷 89.66667
    錢電 70.00000
    孫風 80.00000
    李雲 33.33333
    • 不等連接:ON 子句中使用了不等於運算符,例如"<>" "<=>"等(可以搜下 SQL 比較運算符)
    • 自連接:一張表連接自身。例如select * from student a, student b where a.sex = b.sex and a.sex = '男';相當於做了次笛卡爾積運算,就不全部展示了
    id name sex id name sex
    1 趙雷 1 趙雷
    2 錢電 1 趙雷
    3 孫風 1 趙雷
    4 李雲 1 趙雷
  • 外連接:除了返回條件匹配的數據,那些不滿足的數據也會返回。根據連接表的順序可分爲:

    • 左(外)連接:LEFT JOIN / LEFT OUTER JOIN
      以左表爲基表連接右表,在右表中若沒有匹配到基表中的數據則返回 null
      例如select stu.name, avg(sc.score) as avg_score from student stu left join sc on sc.id = stu.id group by stu.name;
    name avg_score
    趙雷 89.66667
    錢電 70.00000
    孫風 80.00000
    李雲 33.33333
    張三 null
    李四 null
    • 右(外)連接:RIGHT JOIN / RIGHT OUTER JOIN
      以右表爲基表連接左表,在左表中若沒有右匹配到基表中的數據則返回 null
  • 全(外)連接:FULL JOIN / FULL OUTER JOIN

    • 等同於 LEFT JOIN 結果集 UNION RIGHT JOIN 結果集
  • 交叉連接:CROSS JOIN (可用","代替)

    • 等同於笛卡爾積 (所以不常用)
    • select * from table1 CROSS JOIN table2;<=> select * from table1, table2;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章