關於left join、right join和join等join的區別

前言:

這兩天,有個項目需要對SQL進行優化,公司的實習生對一些SQL的連接不太懂,今天和實習生講解後就趁熱打鐵說一下各種join的區別。

各種join的區別

首先放兩張關係圖:
在這裏插入圖片描述在這裏插入圖片描述

下面就講解下關係:

多表查詢分爲 內、外連接

外連接分爲左連接(left join 或left outer join)、右連接(right join 或者 right outer join)、和完整外部連接 (full join 或者 full outer join)

左連接(left join 或 left outer join)的結果就是left join子句中的左表的所有行,而不僅僅是鏈接列所匹配的行,如果左表中的某行在右表中沒有匹配,則在相關聯的結果行中右表的所有選擇列均爲空值(NULL)

SQL語法 :

`select * from table1 left join table2 on table1.條件列名 = table2.條件列名;

註釋: 顯示的就是table1中的所有列和能匹配的列

右連接(right join 或 right outer join )在這裏不做多說這左連接很象但是是相反的,只說一下語法

 select *from table1 right join table2 on table1. 條件列= table2.條件列

完全外部連接(full join 或 full outer join)
顯示左右表中的所有行,當某一個表中沒有匹配的行時,則另一個表的選擇列表列包含空值(NULL)如果有則顯示全部數據

SQL語法:

 select *from table1 full join table2 on table1.條件列名= table2.條件列名

內連接:
概念:內連接就是用比較運算符比較要用連接列的值的連接

內連接(join 或者inner join )

SQL語法:

select *fron table1 join table2 on table1.條件列名 = table2.條件列名

返回符合匹配條件的兩表列

select A* ,B* from table1 A ,table2 B where A.條件列名 =B.條件列名

等價於:

select *form table1 cross join table2 where table1.條件列名 = table2.條件列名(注: Cross join 後面不能跟on 只能用where

交叉連接(完全)
概念:沒有用where子句的交叉連接將產生連接所涉及的笛卡爾積第一個表的行數乘以第二個表的行數等於笛卡爾積和結果集的大小

交叉連接: Cross join(不帶條件where,如果帶返回或顯示的是匹配的行數)

SQL語法:

select *from table1 cross join table2

如果有條件(whereselect * from table1 cross join table2 where table1. 條件列名= table2.條件列名

等價於


select *from table1,table2 (不帶where)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章