天天看點

SQL連接配接 交叉連接配接 内連接配接 外連接配接

前一段時間在做一個項目時,由于采用的Ibatis架構,在SQL查詢語句方面遇到了,一些問題。期間,曾經在學習資料庫這門課程中,曾經對查詢資料庫語句有過相關接觸。然而,真正的了解還是需要在真真正正的實踐中。

連接配接可分為以下幾類:

交叉連接配接:有兩種,顯式的和隐式的(不帶on字句)。交叉連接配接傳回左表中的所有行,左表中的每一行與右表中的所有行組合。交叉連接配接也稱作笛卡爾積。

如果 A 和 B 是兩個集合, 它們的交叉連接配接就記為: A × B.

語句1:隐式的交叉連接配接,沒有cross join。

SELECT*FROMRecord,WebsiteInfo;

語句2:顯式的交叉連接配接,有cross join。

SELECT*FROMRecordCROSSJOINWebsiteInfo;

内連接配接(join 或者inner join )

内連接配接使用比較運算符根據每個表共有的列的值比對兩個表中的行。

SQL語句:

select*fromRecordjoinWebsiteInfoonRecord.RecordID=WebsiteInfo.RecordID;

等價于:

select*fromRecordCROSSJOINWebsiteInfoWhere Record.RecordID = WebsiteInfo.RecordID;

外連接配接分為左連接配接(left join 或left outer join)、右連接配接(right join 或者 right outer join)、和完整外部連接配接 (full join 或者 full outer join)

左連接配接(left join 或 left outer join)的結果就是left join子句中的左表的所有行,而不僅僅是連結列所比對的行,如果左表中的某行在右表中沒有比對,則在相關聯的結果行中右表的所有選擇列均為空值(NULL)。

   SQL語句:

select*fromRecordleftjoinWebsiteInfoonRecord.RecordID=WebsiteInfo.RecordID;

注釋:  顯示的就是Record中的所有列和能比對的列。

右連接配接(right join 或 right outer join )傳回值和左連結相反。

select*fromRecordrightjoinWebsiteInfoonRecord.RecordID=WebsiteInfo.RecordID;

注釋:  顯示的就是WebsiteInfo中的所有列和能比對的列。

完全外部連接配接(full join 或 full outer join)顯示左右表中的所有行,當某一個表中沒有比對的行時,則另一個表的選擇清單列包含空值(NULL)如果有則顯示全部資料

SQL文法:

select*fromRecordfulljoinWebsiteInfoonRecord.RecordID=WebsiteInfo.RecordID;

本文轉自HDDevTeam 51CTO部落格,原文連結:http://blog.51cto.com/hddev/1217522,如需轉載請自行聯系原作者