mysql 多表查詢的用法

本文僅在 Mysql 中驗證,其它數據庫中可能會有差異。

多表查詢,即同時查詢兩張表或更多表,包括交叉連接、內連接、左/右外連接、合併等。

在使用時:

  • 多張表中的列名可能一致,所以必須爲每張表起別名,通過別名指向對應的列
  • 通常需要有關聯條件

交叉連接查詢:

  • 得到的是兩個表的乘積(笛卡爾集),返回左表中的所有行,及左表中的每一行與右表中的所有行組合
  • 簡單查詢兩張表組合,就是求笛卡兒積,效率最低,基本不會使用。
select * from a, b;

內/外連接

內連接查詢:

  • 可以有效的去除笛卡爾集現象
  • 有兩種方式:隱式內連接,顯式內連接
"隱式內連接:"
select a.xx, a.xxx, b.xxx
from A a, B b
where a.xx = b.xx;
或者:
select a.*, b.*
from A a, B b
where a.xx = b.xx;

"顯式內連接:"
select * from A a
inner join B b
on a.xx = b.xx;
(其中 inner 可以省略)

外連接查詢:

  • 有兩種方式:左外連接,右外連接
  • 左外連接:簡稱左連接
    • 左邊表的內容全部顯示,然後匹配右邊的表
    • 如果右邊的表匹配不到,則空
    • 即返回兩張表共有的部分,及左表中獨有的信息
  • 右外連接:簡稱右連接
    • 右邊表的內容全部顯示,然後匹配左邊的表
    • 如果左邊的表匹配不到,則空
    • 即返回兩張表共有的部分,及右表中獨有的信息
(其中,out 可省略)
"左外連接:"
select * from A 
left outer join B 
on 條件

"右外連接:"
select * from A
right out join B 
on 條件

總結:

  • 內連接:兩表交集
  • 左外連接:左邊表,包含兩表交集
  • 右外連接:右邊表,包含兩表交集
select a.field1, b.field2...
from tab1 a
inner/left/right join tab2 b
on a.field1 = b.field1;

Union 合併

  • 用於合併兩個或多個 SELECT 語句的結果集
  • 使用 UNION 時,多張表查詢的結果要有相同數量的列、且列類型相似。
  • 有兩種用法:UNIONUNION ALL

UNION:

  • 消除多表中任何重複行

UNION ALL:

  • 不消除重複行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章