數據庫中查詢的各種連接(左連接,右連接,全連接,內連接,交叉連接,自連接)


左右連接其實就是以哪個表為主(或者說為准),結果集為“主表”的全部記錄+“副表”與“主表”相匹配的記錄,如果“副表”中沒有和“主表”相匹配的記錄,則相對應的記錄顯示為NULL

 

左連接:左邊表全部行+右邊表相匹配的行,如果左邊表中的某一行,在右邊表中沒有匹配的行,則顯示NULL(left join 或者left outer join)

 

右連接:和左連接相反。(right join 或者right outer join)

 

內連接:它返回字段ID(連接條件)同時存在於兩個表中的記錄,也就是說,僅當至少有一個同屬於兩表的行符合聯接條件時,內聯接才返回行,內聯接消除與另一個表中的任何行不匹配的行。(inner join或者join)

 

全連接:不管匹配不匹配,全部都顯示出來。(full join或者full outer join)

 

交叉連接:沒有WHERE 子句的交叉聯接將產生聯接所涉及的表的笛卡爾積。第一個表的行數乘以第二個表的行數等於笛卡爾積結果集的大小。(cross join不帶where)

 

自連接:給自己取個別名,一個表當兩個表來使用。

 

-------------------------------------

 

例子

 

Table A

aid   adate

1      a1

2      a2

3      a3

 

TableB

 

bid bdate

1    b1

2    b2

4    b4

 

兩個表a,b相連接,要取出id相同的字段

select * from a inner join b on a.aid = b.bid這是僅取出匹配的數據.

此時的取出的是:

1 a1 b1

2 a2 b2

 

那么left join 指:

select * from a left join b on a.aid = b.bid

首先取出a表中所有數據,然后再加上與a,b匹配的的數據

此時的取出的是:

1 a1 b1

2 a2 b2

3 a3 空字符

 

同樣的也有right join

指的是首先取出b表中所有數據,然后再加上與a,b匹配的的數據

此時的取出的是:

1 a1 b1

2 a2 b2

4 空字符b4

 

LEFT JOIN 或LEFT OUTER JOIN。

左向外聯接的結果集包括LEFT OUTER 子句中指定的左表的所有行,而不僅僅是聯接列所匹配的行。如果左表的某行在右表中沒有匹配行,則在相關聯的結果集行中右表的所有選擇列表列均為空值。

 

SQL:JOIN之完全用法

 

外聯接可以是左向外聯接、右向外聯接或完整外部聯接。在FROM 子句中指定外聯接時,可以由下列幾組關鍵字中的一組指定:LEFT JOIN 或LEFT OUTER JOIN。

 

左向外聯接的結果集包括LEFT OUTER 子句中指定的左表的所有行,而不僅僅是聯接列所匹配的行。如果左表的某行在右表中沒有匹配行,則在相關聯的結果集行中右表的所有選擇列表列均為空值。

 

RIGHT JOIN 或RIGHT OUTER JOIN。

右向外聯接是左向外聯接的反向聯接。將返回右表的所有行。如果右表的某行在左表中沒有匹配行,則將為左表返回空值。

 

FULL JOIN 或FULL OUTER JOIN。

完整外部聯接返回左表和右表中的所有行。當某行在另一個表中沒有匹配行時,則另一個表的選擇列表列包含空值。如果表之間有匹配行,則整個結果集行包含基表的數據值。

 

僅當至少有一個同屬於兩表的行符合聯接條件時,內聯接才返回行。內聯接消除與另一個表中的任何行不匹配的行。而外聯接會返回FROM 子句中提到的至少一個表或視圖的所有行,只要這些行符合任何WHERE 或HAVING 搜索條件。將檢索通過左向外聯接引用的左表的所有行,以及通過右向外聯接引用的右表的所有行。完整外部聯接中兩個表的所有行都將返回


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM