数据库-表连接
表連接
(1)左外連接 (左邊的表不加限制)
(2)右外連接(右邊的表不加限制)
(3)全外連接(左右兩表都不加限制)
inner join 表示內(nèi)連接;
left join表示左外連接;
right join表示右外連接;
full join表示完全外連接;
on子句 用于指定連接條件。
注意:
如果使用from子句指定內(nèi)、外連接,則必須要使用on子句指定連接條件;
如果使用(+)操作符指定外連接,則必須使用where子句指定連接條件。
一. 內(nèi)連接(Inner Join/Join)
1.1 Inner Join
Inner join邏輯運(yùn)算符返回滿足第一個(gè)(頂端)輸入與第二個(gè)(底端)輸入聯(lián)接的每一行。這個(gè)和用select查詢多表是一樣的效果,所以內(nèi)連接用的很少。
還有一點(diǎn)要說明的就是Join 默認(rèn)就是inner join。 所以我們?cè)趯憙?nèi)連接的時(shí)候可以省略inner 這個(gè)關(guān)鍵字。
1.3 自然連接(Natural join)
自然連接是在兩張表中尋找那些數(shù)據(jù)類型和列名都相同的字段,然后自動(dòng)地將他們連接起來,并返回所有符合條件按的結(jié)果。
二. 外連接(Outer Join)
outer join則會(huì)返回每個(gè)滿足第一個(gè)(頂端)輸入與第二個(gè)(底端)輸入的聯(lián)接的行。它還返回任何在第二個(gè)輸入中沒有匹配行的第一個(gè)輸入中的行。外連接分為三 種: 左外連接,右外連接,全外連接。 對(duì)應(yīng)SQL:LEFT/RIGHT/FULL OUTER JOIN。 通常我們省略outer 這個(gè)關(guān)鍵字。 寫成:LEFT/RIGHT/FULL JOIN。
在左外連接和右外連接時(shí)都會(huì)以一張表為基表,該表的內(nèi)容會(huì)全部顯示,然后加上兩張表匹配的內(nèi)容。 如果基表的數(shù)據(jù)在另一張表沒有記錄。 那么在相關(guān)聯(lián)的結(jié)果集行中列顯示為空值(NULL)。
對(duì)于外連接, 也可以使用“(+) ”來表示。 關(guān)于使用(+)的一些注意事項(xiàng):
1.(+)操作符只能出現(xiàn)在where子句中,并且不能與outer join語法同時(shí)使用。
2. 當(dāng)使用(+)操作符執(zhí)行外連接時(shí),如果在where子句中包含有多個(gè)條件,則必須在所有條件中都包含(+)操作符
3.(+)操作符只適用于列,而不能用在表達(dá)式上。
4.(+)操作符不能與or和in操作符一起使用。
5.(+)操作符只能用于實(shí)現(xiàn)左外連接和右外連接,而不能用于實(shí)現(xiàn)完全外連接。
2.1 左外連接(Left outer join/ left join)
left join是以左表的記錄為基礎(chǔ)的,示例中Dave可以看成左表,BL可以看成右表,它的結(jié)果集是Dave表中的數(shù)據(jù),在加上Dave表和BL表匹配的數(shù) 據(jù)。換句話說,左表(Dave)的記錄將會(huì)全部表示出來,而右表(BL)只會(huì)顯示符合搜索條件的記錄。BL表記錄不足的地方均為NULL.
2.2 右外連接(right outer join/ right join)
和left join的結(jié)果剛好相反,是以右表(BL)為基礎(chǔ)的, 顯示BL表的所以記錄,在加上Dave和BL 匹配的結(jié)果。 Dave表不足的地方用NULL填充.
2.3 全外連接(full outer join/ full join)
左表和右表都不做限制,所有的記錄都顯示,兩表不足的地方用null 填充。 全外連接不支持(+)這種寫法。
三. 自連接
自連接(self join)是SQL語句中經(jīng)常要用的連接方式,使用自連接可以將自身表的一個(gè)鏡像當(dāng)作另一個(gè)表來對(duì)待,從而能夠得到一些特殊的數(shù)據(jù)。
總結(jié)
- 上一篇: MyEclipse启动tomcat出现j
- 下一篇: JDBC的事务处理