MYSQL 多表聯結

2021-10-10 09:24:16 字數 1125 閱讀 4791

參考:

join與逗號的區別

交叉連線的操作只有兩種:inner join和cross join。

join,是 inner join的預設寫法。

cross join,因為有明確的語義,就是要生成笛卡爾全集。因此之後就不容許跟on條件。

inner join,是對笛卡爾全集的補充處理。因此可以跟條件。由於笛卡爾集是將左右表同等對待,也就是將臨時表中每個行作為乙個整體看待,因此on的條件就是對整行進行的處理,處理的結果就如同過濾。對於不滿足條件的整行,將不會傳遞給where語句,也就不會出現在最終的結果集中。

那為什麼mysql不按sql標準進行實現?

sql標準,是對sql的邏輯表示。因此強調語法在邏輯上必須自解釋和清晰。並不限制如何實現。

mysql,由於其本身是開源的,因此對sql標準實際進行了簡化和收斂,保留最核心最基本的內容,將可組合或沒必要具體的都去掉,這樣給使用者留下更寬鬆的語義空間。即使用者不必去修改mysql的源**,通過功能組合或對語義進行繼承也可完成自定義語義要求。

比如mysql中沒有 full outer join語法,但可通過left 和right join的聯合使用實現。

inner join /cross join/join的三者等價也是mysql的一種簡化和收斂。

在 inner join中,可以沒有on條件。

當沒有on條件時,表達完整的笛卡爾集。

當用on條件時,on是對臨時表整行記錄進行的處理,相當於過濾。

無論是否有on條件,都可以跟where語句。where對整行進行條件判斷,形成結果集。

但,並不是說使用where來替換on。

到這裡,自然又引出逗號,有必要整理下針對","與join,on和where的用法細微區別:

1)where,可跟在逗號語法之後,處理後形成最終結果集。

2)on,只能跟在join語法之後,是對中間結果的補充處理。處理後結果交給where。

3)on條件後,還可以跟where條件。

4)逗號,不能與join一起使用。逗號是隱式表達交叉連線;join,是顯式表達交叉連線。

sql多表聯結 三張表聯結 查詢

今天看了一道sql的題,這個查詢需要聯結三張表,具體的 內容參考 參考鏈結 很自然的想到了內聯結,但是之前做的大部分都是兩張表的內連線,這次是三張表,在網上搜也都是講兩張表的內連線,這裡總結一下 selecta.sname,b cname,c degree from student ainner j...

mysql 聯結主鍵 MySQL基礎 聯結

聯結表 mysql是一種關聯式資料庫,所謂關係就是指把資料分解為多個表,乙個類據一 個表。各表之間通過某些常用的值 即關係 相關聯 就比如說有乙個表儲存了 商資訊,商id為主鍵。另乙個表儲存了一些商品的資訊,但是也需要知道商品相應的 商資訊。那麼可以給商品設定乙個 商id 稱為外來鍵,通過這個外來鍵...

mysql使用聯結的好處 Mysql 聯結

聯結 簡介聯結是一種機制,用來在一條select語句中關聯表,聯結是由mysql根據需要而建立的,它存在於select語句的執行當中。在執行資料檢索查詢中使用聯結是sql強大的功能之一,聯結是利用sql的select能執行的最重要的操作,在使用聯結之前,我們必須要了解下關係表。關係表來個栗子說明下 ...