sql用逗號連線多張表對應哪個join?

2021-09-07 14:58:23 字數 1369 閱讀 4968

**:

四種join的區別已老生常談:

那麼問題來了,還有一種常見的寫法是將錶用逗號隔開,那這個又是怎麼連線的呢。

先看這兩張表。

使用逗號隔開的方法來連線表:

select *  

from employee,department where employee.departmentid = department.departmentid

輸出結果:

可以很明顯發現:這不就是inner join嘛!

沒錯,答案正是這樣:sql用逗號連線多張表對應的是 inner join。

為了嚴謹性,我到處找sql的官方文件來證實這一點。然而搜不出來sql的文件(誰知道**請務必發我),最後還是在維基百科上找到了可以當作論據的話。

sql 定義了兩種不同語法方式去表示"連線"。首先是"顯式連線符號",它顯式地使用關鍵字join,其次是"隱式連線符號",它使用所謂的"隱式連線符號"。隱式連線符號把需要連線的表放到select語句的from部分,並用逗號隔開。這樣就構成了乙個"交叉連線",where語句可能放置一些過濾謂詞(過濾條件)。那些過濾謂詞在功能上等價於顯式連線符號. sql 89標準只支援內部連線與交叉連線,因此只有隱式連線這種表達方式;sql 92標準增加了對外部連線的支援,這才有了join表示式。
也就是說,

select *

from employee

inner join department on employee.departmentid = department.departmentid

等價於:

select *  

from employee,department where employee.departmentid = department.departmentid

至於哪個效率高一點,其實兩者是一回事,沒有區別。只是內連線是由sql 1999規則定的書寫方式而已。

另外,在寫sql語句測試4種join的時候,發現mysql對於full join返回的結果和inner join一模一樣。經查閱資料,才發現原來mysql不支援full join啊。

見:

Mysql中使用逗號隔開多張表生成的表例項

摘自 mysql中使用使用逗號隔開多張表生成的表例項等價於使用join inner join cross join,而在標準sql中,它們並不等價,inner join 和 on 一起使用,cross join則使用其它方式 select from t1 left join t2,t3,t4 on ...

SQL 用JOIN連線多個表

select from table1 inner join table2 on table1.id table2.id 其實 inner join on的語法格式可以概括為 from 表1 inner join 表2 on 表1.欄位號 表2.欄位號 inner join 表3 on 表1.欄位號 ...

SQL基礎(二) 多張表Update語法

一 當用乙個表中的資料來更新另外乙個表中的資料時 兩張表要有關聯 1.update t1 set t1.c2 t2.c2 from t2 where t1.c1 t2.c1 2.update t1 set t1.c2 t2.c2 from t1 inner join t2 on t1.c1 t2.c...