SQL连接学习总结
SQL連接學(xué)習(xí)總結(jié)
一 SQL 連接(JOIN)
SQL join 用于把來自兩個(gè)或多個(gè)表的行結(jié)合起來。SQL JOIN 子句用于把來自兩個(gè)或多個(gè)表的行結(jié)合起來,基于這些表之間的共同字段。
最常見的 JOIN 類型:SQL INNER JOIN(簡(jiǎn)單的 JOIN)。?
SQL INNER JOIN 從多個(gè)表中返回滿足 JOIN 條件的所有行。
不同的 SQL JOIN
INNER JOIN:如果表中有至少一個(gè)匹配,則返回行
LEFT JOIN:即使右表中沒有匹配,也從左表返回所有的行
RIGHT JOIN:即使左表中沒有匹配,也從右表返回所有的行
FULL JOIN:只要其中一個(gè)表中存在匹配,則返回行
SQL INNER JOIN
INNER JOIN 關(guān)鍵字在表中存在至少一個(gè)匹配時(shí)返回行。
INNER JOIN 與 JOIN 是相同的。
SQL LEFT JOIN
LEFT JOIN 關(guān)鍵字從左表(table1)返回所有的行,即使右表(table2)中沒有匹配。如果右表中沒有匹配,則結(jié)果為 NULL。
在某些數(shù)據(jù)庫(kù)中,LEFT JOIN 稱為 LEFT OUTER JOIN。
SQL RIGHT JOIN
RIGHT JOIN 關(guān)鍵字從右表(table2)返回所有的行,即使左表(table1)中沒有匹配。如果左表中沒有匹配,則結(jié)果為 NULL。
在某些數(shù)據(jù)庫(kù)中,RIGHT JOIN 稱為 RIGHT OUTER JOIN。
SQL FULL OUTER JOIN
FULL OUTER JOIN 關(guān)鍵字只要左表(table1)和右表(table2)其中一個(gè)表中存在匹配,則返回行.
FULL OUTER JOIN 關(guān)鍵字結(jié)合了 LEFT JOIN 和 RIGHT JOIN 的結(jié)果。
FULL OUTER JOIN 關(guān)鍵字返回左表(Websites)和右表(access_log)中所有的行。
二 名詞的說明
內(nèi)聯(lián)接。包括相等聯(lián)接和自然聯(lián)接。 ? ??內(nèi)聯(lián)接使用比較運(yùn)算符根據(jù)每個(gè)表共有的列的值匹配兩個(gè)表中的行。例如,檢索 students和courses表中學(xué)生標(biāo)識(shí)號(hào)相同的所有行。 ??
? ??
外聯(lián)接。外聯(lián)接可以是左向外聯(lián)接、右向外聯(lián)接或完整外部聯(lián)接。 ? ??
完整外部聯(lián)接返回左表和右表中的所有行。當(dāng)某行在另一個(gè)表中沒有匹配行時(shí),則另一個(gè)表的選擇列表列包含空值。如果表之間有匹配行,則整個(gè)結(jié)果集行包含基表的數(shù)據(jù)值。 ??
交叉聯(lián)接 ??
交叉聯(lián)接返回左表中的所有行,左表中的每一行與右表中的所有行組合。交叉聯(lián)接也稱作笛卡爾積。
三 例子
? ?-------------------------------------------------
? 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)系 ??
-------------------------------------------------- ? ?
1) 內(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 ??
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 ??
3) 右連接 ??
?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 ??
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
總結(jié)
- 上一篇: VS2010重构学习总结
- 下一篇: SQL CTE学习总结