日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 逗号 join_关于sql:MySQL中逗号分隔的连接和语法连接有什么区别?

發布時間:2025/4/5 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 逗号 join_关于sql:MySQL中逗号分隔的连接和语法连接有什么区别? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本問題已經有最佳答案,請猛點這里訪問。

例如,如果我有一個表"person",其列"id"引用表"worker"中的列"id"

這兩個查詢之間的區別是什么?它們產生相同的結果。

SELECT *

FROM Person

JOIN Worker

ON Person.id = Worker.id;

SELECT *

FROM Person,

Worker

WHERE Person.id = Worker.id;

謝謝

完全沒有區別。

第二種表示形式使查詢更具可讀性,并使查詢看起來非常清楚哪個聯接對應于哪個條件。

性能有什么不同嗎?PostgreSQL怎么樣?

性能絕對沒有差別。在這兩種情況下,由SQL Server準備的最終版本是相同的。

對于更大的查詢,我會說第一種方法更具可讀性。如果您有一個混合左聯接和一些內部聯接,那么在聯接子句中使用聯接條件要比在聯接子句中使用一些條件和在WHERE子句中使用一些條件一致得多。

第一種方法是更加可讀和明確

這個答案不正確。在dev.mysql.com/doc/refman/5.5/en/join.html頁面上的mysql手冊中,它指出:"但是,逗號運算符的優先級低于內部聯接、交叉聯接、左聯接等。如果在存在聯接條件時將逗號聯接與其他聯接類型混合,則可能會出現"on子句"中未知列"col_name"的格式錯誤。

@CaptainPayAlytic:問題中給出的兩個查詢在邏輯上是等效的。正如你指出的,這兩個符號實際上是有區別的。(我同意你的看法,這個答案是錯誤的。實際上,這兩個查詢之間存在差異…我們可以說,一個使用舊的逗號語法進行連接操作,另一個使用join關鍵字。)

除前面的注釋外,使用第一種格式,您可以將所有聯接條件分組到ON子句中,讓WHERE子句為您的數據指定篩選器(注意,可以編寫用作篩選器的聯接條件,但一般來說,保持這種做法會使代碼更具可讀性)。

這些查詢在邏輯上是等價的。逗號運算符等價于[INNER] JOIN運算符。

逗號是舊樣式的聯接運算符。join關鍵字是在后面添加的,因為它還允許外部聯接操作,所以比較受歡迎。

它還允許將連接謂詞(條件)與WHERE子句分隔成ON子句。這提高了(人類)的可讀性。

跟進

此答案表示問題中的兩個查詢是等效的。在同一個查詢中,我們不應該將舊的join操作逗號語法與新的JOIN關鍵字語法混合使用。如果我們真的混合了它們,我們需要知道優先級順序的不同。

摘自MySQL參考手冊

https://dev.mysql.com/doc/refman/5.6/en/join.html網站

INNER JOIN and , (comma) are semantically equivalent in the absence of a join condition: both produce a Cartesian product between the specified tables (that is, each and every row in the first table is joined to each and every row in the second table).

However, the precedence of the comma operator is less than that of INNER JOIN, CROSS JOIN, LEFT JOIN, and so on. If you mix comma joins with the other join types when there is a join condition, an error of the form Unknown column 'col_name' in 'on clause' may occur. Information about dealing with this problem is given later in this section.

逗號是1=1上的交叉聯接或內部聯接。它的優先級低于關鍵字聯接。上的內部聯接是用逗號和where定義的。

除了可讀性更好之外,還有一種情況是顯式聯接的表更好,而不是逗號分隔的表。

讓我們看一個例子:

下面的查詢將給出兩個表中的所有列和行

SELECT

*

FROM table1, table2

下面的查詢將給出表別名為"table2"的第一個表中的列

SELECT

*

FROM table1 table2

如果您錯誤地忘記了逗號分隔聯接中的逗號,則第二個表將自動轉換為第一個表的表別名。并非所有情況下都如此,但有可能出現這種情況

如果table1和table2是無關的,我會把這里的FROM逗號語法放在可選的和更冗長的INNER JOIN table2 ON 1 = 1之上,因為ON謂詞是多余的。

@Mattarnold:對于MySQL,ON子句是可選的。ON 1=1沒有作用,是不必要的。此外,inner關鍵字是可選的,沒有任何效果。也就是說,FROM table1 JOIN table2就足夠了,盡管在這種情況下,在on或where子句中沒有連接條件,我們可以包括可選的CROSS關鍵字,以幫助將來的讀者。幫助讀者理解缺少連接條件是有意的。即FROM table1 CROSS JOIN table2。我認為這種形式比逗號語法更清楚地傳達了我們的意圖。

使用連接使代碼更容易閱讀,因為它是不言而喻的。

在速度上沒有區別(我測試過),執行計劃是相同的

如果查詢優化器做得很好,那么這些查詢之間應該沒有區別。它們只是指定相同期望結果的兩種方法。

The SELECT * FROM table1, table2, etc.對于幾個表來說是好的,但是隨著表的數量的增加,它變得成倍的困難。

JOIN語法明確了什么條件影響哪些表(給出條件)。另外,第二種方法是舊標準。

但是,在數據庫中,它們最終是相同的

指數難度?怎樣?為了誰?

總結

以上是生活随笔為你收集整理的mysql 逗号 join_关于sql:MySQL中逗号分隔的连接和语法连接有什么区别?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。