mysql查詢語句5:連線查詢

一九九六年秋_發表於2020-12-22

說明:連線查詢又稱多表查詢,當查詢語句涉及到的欄位來自於多個表時,就會用到連線查詢。

笛卡爾乘積現象:表1 有m行,表2有n行,結果=m*n行
發生原因:沒有有效的連線條件
如何避免:新增有效的連線條件

分類:
按年代分類:
1.sql92標準:僅僅支援內連線
內連線:等值連線/非等值連線/自連線
2.sql99標準【推薦】:支援內連線+外連線(左外和右外)+交叉連線
按功能分類:
內連線:等值連線/非等值連線/自連線
外連線:左外連線/右外連線/全外連線
交叉連線

SQL92標準:

1.內連線:
語法:
select 查詢列表
from 表1 別名,表2 別名
where 連線條件
and 篩選條件
group by 分組列表
having 分組後篩選
order by 排序列表

執行順序:
①from子句
② where子句
③ and子句
④ group by子句
⑤ having子句
⑥ select子句
⑦ order by子句

等值連線:
語法:
select 查詢列表
from 表1 別名,表2 別名
where 等值連線的連線條件
特點:
①為了解決多表中的欄位名重名問題,一般需要為表起別名,提高語義性。
②多表的順序沒有要求。
③多表等值連線的結果為多表的交集部分。
④n表連線,至少需要n-1個連線條件。
⑤可以搭配前面介紹的所有子句使用,比如排序、分組、篩選。
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

SQL99標準:

一. 內連線
語法:
SELECT 查詢列表
FROM 表名1 別名
(INNER) JOIN 表名2 別名
ON 連線條件
WHERE 篩選條件
GROUP BY 分組列表
HAVING 分組後篩選
ORDER BY 排序列表;

SQL92和SQL99的區別:
SQL99使用JOIN關鍵字代替了之前的逗號,並且將連線條件和篩選條件進行了分離,提高閱讀性。
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
二. 外連線(左連線/右連線/全外連線)
查詢結果為主表中所有的記錄,如果從表有匹配項,則顯示匹配項;如果從表沒有匹配項,顯示null。
應用場景:一般用於查詢主表中有但從表沒有的記錄。
特點:

  1. 外連線分主從表,兩表的順序不能任意替換。
  2. 左連線:join左邊為主表。
    右連線:join右邊為主表
    語法:
    select 查詢列表
    from 表1 別名
    left/right/full (outer) join 表2 別名
    on 連線條件
    where 篩選條件
    在這裡插入圖片描述
    在這裡插入圖片描述

相關文章