參考:
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能執行的最重要的操作,在使用聯結之前,我們必須要了解下關係表。關係表來個栗子說明下 ...