聲明:本文為本人在分析學習了其他網(wǎng)友的博文后,得出的一些體會。編寫本文的目的,一則,分享自己的學習體會,希望通過此文與其他正在學習數(shù)據(jù)庫的網(wǎng)友互相交流,共同學習;二則,記錄下學習中的點滴收獲,供以后溫習。本人為數(shù)據(jù)庫初學者,有很多觀點可
聲明:本文為本人在分析學習了其他網(wǎng)友的博文后,得出的一些體會。編寫本文的目的,一則,分享自己的學習體會,希望通過此文與其他正在學習數(shù)據(jù)庫的網(wǎng)友互相交流,共同學習;二則,記錄下學習中的點滴收獲,供以后溫習。本人為數(shù)據(jù)庫初學者,有很多觀點可能存在錯誤,若諸位網(wǎng)友有不同觀點,望不吝指教。
首先引用一下這位網(wǎng)友的博文,本人從此博文中受益良多,感謝此位網(wǎng)友的分享。
http://hi.baidu.com/woaidelphi/item/d96be15c3ce2c1cbd2e10c6c
author:華夏之星
QQ:1019822077
email:woai_php@sina.com
內(nèi)連接: 只連接匹配的行
左外連接: 包含左邊表的全部行(不管右邊的表中是否存在與它們匹配的行),以及右邊表中全部匹配的行
右外連接: 包含右邊表的全部行(不管左邊的表中是否存在與它們匹配的行),以及左邊表中全部匹配的行
注:此博文中還講述了其他連接方式,鑒于本人剛開始學習數(shù)據(jù)庫,因此,僅研究較為普遍的3中方式。
在網(wǎng)上看到很多講述內(nèi)連接和左右連接的博文,一直認為這是3類連接方式。但看完這篇博文后,認識到,其實這3中連接方式,實際可以分為
兩類。一種內(nèi)連接,一種外連接。而外連接又可分為左連接和右連接。
------------------------------------------------------------------------------再次引用-----------------------------------------------------------------------
舉個例子吧。
表A
id name
1 張
2 李
3 王
表B
id address A_id
1 北京 1
2 上海 3
3 南京 10
/******************************** inner join 內(nèi)連接*****************************************/
排他性:A,B表中至少有1個匹配時,才返回行。兩表的交集
SQL語句如下:
select A.name,B.address from A
inner join B
on A.id = B.A_id
查詢結(jié)果為:
name address
張 北京
王 上海
------------------------------------------------------------------------------引用結(jié)束-----------------------------------------------------------------------
此sql查詢語句可按如下翻譯:使用內(nèi)連接的方式,選擇出A中id與B中A_id相等的A表和B表中的行,然后將A表中行的name字段和B表中的address字段組合成行,作為查詢結(jié)果。
具體過程可以描述為,對于A表中id為1的行(及表中第一行),與B表中的每一行都進行匹配,找到與B表中A_id字段相同的行(本例中B表的第一行便滿足條件)。由于本例中,A表的第一行和B表的第一行便滿足SQL語句的查詢條件,因此,查詢結(jié)果集的第一條結(jié)果為A表第一行的name(張)和B表第一行的address(北京)。然后,對A表的第二行進行匹配,遍歷B表的所有行,沒有找到滿足與A表id(2)相同的A_id的行,因此。接著為A表的第3行,在B表中尋找匹配的行。遍歷B表中所有的行,發(fā)現(xiàn)第二行的A_id(3)與A表id(3)匹配,因此,匹配成功,輸出結(jié)果。自此,A表的所有行的查詢了,本次SQL查詢結(jié)束。結(jié)果有兩條匹配的結(jié)果。
--------------------------------------------------------------------------接著引用---------------------------------------------------------------
表A
id name
1 張
2 李
3 王
表B
id address A_id
1 北京 1
2 上海 3
3 南京 10
/********************************
left join 左連接*****************************************/
包容性:A表包容B表,左連接左表是全的.(left join 或 left outer join )
SQL語句如下:
SELECT A.name, B.address
FROM A
LEFT JOIN B ON A.id = B.A_id
查詢結(jié)果為:
name address
張 北京
李 NULL
王 上海
/******************************** right join 右連接*****************************************/
包容性:B表包容A表,右連接右表是全的.(right join 或 right outer join )
SQL語句如下:
SELECT A.name, B.address
FROM A
RIGHT JOIN B ON A.id = B.A_id
查詢結(jié)果為:
name address
張 北京
王 上海
NULL 南京
------------------------------------------------------------------------------引用結(jié)束-----------------------------------------------------------------------
左右連接的匹配過程與內(nèi)連接的匹配過程相同,不同的是,左右連接查詢時,SQL語句中,指定的基準表(right join 或left join 后的表)字段
無論是否在另一張表中有與之匹配的行,基準表中的字段均會輸出。如上例左連接中的第二行,李(左連接基準表指定的查詢字段)和右連接中的
第3行南京(右連接基準表中指定的查詢字段)
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com