SQL连接学习总结
SQL連接學習總結
一 SQL 連接(JOIN)
SQL join 用于把來自兩個或多個表的行結合起來。SQL JOIN 子句用于把來自兩個或多個表的行結合起來,基于這些表之間的共同字段。
最常見的 JOIN 類型:SQL INNER JOIN(簡單的 JOIN)。?
SQL INNER JOIN 從多個表中返回滿足 JOIN 條件的所有行。
不同的 SQL JOIN
INNER JOIN:如果表中有至少一個匹配,則返回行
LEFT JOIN:即使右表中沒有匹配,也從左表返回所有的行
RIGHT JOIN:即使左表中沒有匹配,也從右表返回所有的行
FULL JOIN:只要其中一個表中存在匹配,則返回行
SQL INNER JOIN
INNER JOIN 關鍵字在表中存在至少一個匹配時返回行。
INNER JOIN 與 JOIN 是相同的。
SQL LEFT JOIN
LEFT JOIN 關鍵字從左表(table1)返回所有的行,即使右表(table2)中沒有匹配。如果右表中沒有匹配,則結果為 NULL。
在某些數據庫中,LEFT JOIN 稱為 LEFT OUTER JOIN。
SQL RIGHT JOIN
RIGHT JOIN 關鍵字從右表(table2)返回所有的行,即使左表(table1)中沒有匹配。如果左表中沒有匹配,則結果為 NULL。
在某些數據庫中,RIGHT JOIN 稱為 RIGHT OUTER JOIN。
SQL FULL OUTER JOIN
FULL OUTER JOIN 關鍵字只要左表(table1)和右表(table2)其中一個表中存在匹配,則返回行.
FULL OUTER JOIN 關鍵字結合了 LEFT JOIN 和 RIGHT JOIN 的結果。
FULL OUTER JOIN 關鍵字返回左表(Websites)和右表(access_log)中所有的行。
二 名詞的說明
內聯接。包括相等聯接和自然聯接。 ? ??內聯接使用比較運算符根據每個表共有的列的值匹配兩個表中的行。例如,檢索 students和courses表中學生標識號相同的所有行。 ??
? ??
外聯接。外聯接可以是左向外聯接、右向外聯接或完整外部聯接。 ? ??
完整外部聯接返回左表和右表中的所有行。當某行在另一個表中沒有匹配行時,則另一個表的選擇列表列包含空值。如果表之間有匹配行,則整個結果集行包含基表的數據值。 ??
交叉聯接 ??
交叉聯接返回左表中的所有行,左表中的每一行與右表中的所有行組合。交叉聯接也稱作笛卡爾積。
三 例子
? ?-------------------------------------------------
? 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 ? 存在關系 ??
-------------------------------------------------- ? ?
1) 內連接 ??
?select ? a.*,b.* ? from ? a ? inner ? join ? b ? ? on ? a.id=b.parent_id ? ? ??
?結果是 ? ??
?1 ? 張3 ? ? ? ? ? ? ? ? ? 1 ? ? 23 ? ? 1 ??
?2 ? 李四 ? ? ? ? ? ? ? ? ?2 ? ? 34 ? ? 2 ??
2)左連接 ??
?select ? a.*,b.* ? from ? a ? left ? join ? b ? ? on ? a.id=b.parent_id ? ? ??
?結果是 ? ??
?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 ? ? ??
?結果是 ? ??
?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 ??
結果是 ? ??
?1 ? 張3 ? ? ? ? ? ? ? ? ?1 ? ? 23 ? ? 1 ??
?2 ? 李四 ? ? ? ? ? ? ? ? 2 ? ? 34 ? ? 2 ??
?null ? ? ? ? ? ? ? ?3 ? ? 34 ? ? 4 ??
?3 ? 王武 ? ? ? ? ? ? ? ? null
總結
- 上一篇: VS2010重构学习总结
- 下一篇: C++单元测试学习总结9