简要描述内部连接和外部连接之间的区别_sqlserver的几种常见连接方法
感謝本文幾種描述方法,讓我解決了最近的一段時間的疑問,轉載下來,以供后面查血使用。
本文鏈接:https://blog.csdn.net/huanghanqian/article/details/52847835
四種join的區別已老生常談:
INNER JOIN(也可簡寫為JOIN): 如果表中有至少一個匹配,則返回行
LEFT JOIN: 即使右表中沒有匹配,也從左表返回所有的行
RIGHT JOIN: 即使左表中沒有匹配,也從右表返回所有的行
FULL 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啊。
見:How to do a FULL OUTER JOIN in MySQL?
————————————————
版權聲明:本文為CSDN博主「huanghanqian」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/huanghanqian/article/details/52847835
總結
以上是生活随笔為你收集整理的简要描述内部连接和外部连接之间的区别_sqlserver的几种常见连接方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用c语言简单办法做一个字典_幼儿园手工,
- 下一篇: 休眠 嵌入式_内幕消息:嵌入式软件挤出最