细说SQL 连接
?
連接條件可在FROM或WHERE子句中指定,建議在FROM子句中指定連接條件。WHERE和HAVING子句 也可以包含搜索條件,以進(jìn)一步篩選連接條件所選的行。???????
????? 連接可分為以下幾類:?????
????
??????內(nèi)連接。 ? ? ??從兩個(gè)關(guān)系的笛卡兒積中選取給定屬性間滿足一定條件的元組. ? ? ? 自然連接運(yùn)算作用于兩個(gè)關(guān)系,并產(chǎn)生一個(gè)關(guān)系作為結(jié)果。它只考慮那些在兩個(gè)關(guān)系模式中都出現(xiàn)的屬 ? ? ? 性上取值相同的元組對(duì)。 ? ? ? 笛卡爾積,他將一個(gè)關(guān)系的每個(gè)元組與第二個(gè)關(guān)系的所有元組都進(jìn)行連接。 ? ? ? 利用內(nèi)連接可獲取兩表的公共部分的記錄(典型的連接運(yùn)算,使用像 ? = ? 或 ? <> ? 之類的比較運(yùn)算符)。 包括相等連接,不等連接和自然連接? ?
????? 內(nèi)連接使用比較運(yùn)算符根據(jù)每個(gè)表共有的列的值匹配兩個(gè)表中的行。例如,檢索 ? students ? 和 ? courses 表中學(xué)生標(biāo)識(shí)號(hào)相同的所有行。???
????
??????外連接。外連接可以是左向外連接、右向外連接或完整外部連接。?????
????? 在FROM子句中指定外連接時(shí),可以由下列幾組關(guān)鍵字中的一組指定:???
??????LEFT ? JOIN ? 或 ? LEFT ? OUTER ? JOIN。?????
??????左向外連接的結(jié)果集包括LEFT??OUTER子句中指定的左表的所有行,而不僅僅是連接列所匹配的行。如果左表 的某行在右表中沒有匹配行,則在相關(guān)聯(lián)的結(jié)果集行中右表的所有選擇列表列均為空值。????
??????RIGHT??JOIN??或??RIGHT ? OUTER ? JOIN。?????
????? 右向外連接是左向外連接的反向連接。將返回右表的所有行。如果右表的某行在左表中沒有匹配行,則將為左表 返回空值。???
????? FULL ? JOIN ? 或 ? FULL ? OUTER ? JOIN。?????
??????完整外部連接返回左表和右表中的所有行。當(dāng)某行在另一個(gè)表中沒有匹配行時(shí),則另一個(gè)表的選擇列表列包含空 值。如果表之間有匹配行,則整個(gè)結(jié)果集行包含基表的數(shù)據(jù)值。???
????
????? 交叉連接。交叉連接返回左表中的所有行,左表中的每一行與右表中的所有行組合。交叉連接也稱作笛卡爾積。???
????
????? FROM ? 子句中的表或視圖可通過內(nèi)連接或完整外部連接按任意順序指定;但是,用左或右向外連接指定表或視 圖時(shí),表或視圖的順序很重要。有關(guān)使用左或右向外連接排列表的更多信息,請(qǐng)參見使用外連接。?????
????
?例子: ??
? ? ? ?a表 ? ??? id ? name ? ? b表 ? ? id ??? job ? parent_id ??
? ? ? ? ? ? ? ? ? ?1 ? 張3 ? ? ? ? ? ? ? ? ? 1 ? ? 23 ? ? 1 ??
? ? ? ? ? ? ? ? ? ?2 ? 李四??????????????? ? 2 ? ? 34 ? ? 2 ??
? ? ? ? ? ? ? ? ? ?3 ? 王武 ? ? ? ? ? ? ? ? ?3 ? ? 34 ? ? 4 ??
? ??
? a.id同parent_id ? 存在關(guān)系???
????
??內(nèi)連接???
? select ? a.*,b.* ? from ? a ? inner ? join ? b ? ? on ? a.id=b.parent_id ??
? ??
? 結(jié)果是 ? ??
? 1 ? 張3 ? ? ? ? ? ? ? ? ? 1 ? ? 23 ? ? 1 ??
? 2?? 李四??????????????? ??2 ? ? 34 ? ? 2???
????
??左連接???
? select ? a.*,b.* ? from ? a ? left ? join ? b ? ? on ? a.id=b.parent_id ??
? ??
? 結(jié)果是 ? ??
? 1 ? 張3 ? ? ? ? ? ? ? ? ? ?1 ? ? 23 ? ? 1 ??
? 2 ? 李四 ? ? ? ? ? ? ? ? ?2 ? ? 34 ? ? 2 ??
? 3 ? 王武 ? ? ? ? ? ? ? ? ?null???
??右連接???
? select ? a.*,b.* ? from ? a ? right ? join ? b ? ? on ? a.id=b.parent_id ??
? ??
? 結(jié)果是 ? ??
? 1 ? 張3 ? ? ? ? ? ? ? ? ? 1 ? ? 23 ? ? 1 ??
? 2 ? 李四 ? ? ? ? ? ? ? ? 2 ? ? 34 ? ? 2 ??
? null ? ? ? ? ? ? ? ?????? ?3 ? ? 34 ? ? 4???
????
??完全連接???
? select ? a.*,b.* ? from ? a ? full ? join ? b ? ? on ? a.id=b.parent_id???
? 結(jié)果是 ? ??
? 1 ? 張3 ? ? ? ? ? ? ? ? ? 1 ? ? 23 ? ? 1 ??
? 2 ? 李四 ? ? ? ? ? ? ? ? 2 ? ? 34 ? ? 2 ??
? null ? ? ? ? ? ? ? ? 3 ? ? 34 ? ? 4 ??
? 3 ? 王武 ? ? ? ? ? ? ? ? null
轉(zhuǎn)載于:https://www.cnblogs.com/wssxr/p/4331063.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
- 上一篇: 关于J2SE/Jsp/Sping/Hib
- 下一篇: 基于Sql Server 2008的分布