什么是多表關(guān)聯(lián)查詢?
有時(shí)一個(gè)查詢結(jié)果需要從兩個(gè)或兩個(gè)以上表中提取字段數(shù)據(jù),此時(shí)需要使用的就是多表關(guān)聯(lián)查詢。
鏈接查詢主要分為三種:內(nèi)鏈接、外鏈接、交叉連接。
內(nèi)鏈接
使用比較運(yùn)算符(包括=、>、<、<>、>=、<=、!> 和!<)進(jìn)行表間的比較操作,查詢與連接條件相匹配的數(shù)據(jù)。根據(jù)所使用的比較方式不同,內(nèi)連接分為等值連接、自然連接和自連接三種。
關(guān)鍵字:INNER JOIN
1.等值連接/相等鏈接:
使用”=“關(guān)系將表連接起來的查詢,其查詢結(jié)果中列出被鏈接表中的所有列,包括其中的重復(fù)列
2.自然鏈接
等值連接中去掉重復(fù)的列,形成的鏈接。
3.自鏈接
如果在一個(gè)連接查詢中,涉及到的兩個(gè)表是同一個(gè)表,這種查詢稱為自連接查詢。
外鏈接
內(nèi)連接只返回滿足連接條件的數(shù)據(jù)行,外連接不只列出與連接條件相匹配的行,而是列出左表(左外連接時(shí))、右表(右外連接時(shí))或兩個(gè)表(全外連接時(shí))中所有符合搜索條件的數(shù)據(jù)行。外連接分為左外連接、右外鏈接、全外連接三種。
1.左外連接
關(guān)鍵字:LEFT[OUTER]JOIN
返回左表中的所有行,如果左表中行在右表中沒有匹配行,則在相關(guān)聯(lián)的結(jié)果集中右表的所有字段均為NULL。
2.右外連接
關(guān)鍵字:RIGHT[OUTER]JOIN
返回右表中的所有行,如果右表中行在左表中沒有匹配行,則在左表中相關(guān)字段返回NULL值。
3.全外鏈接
關(guān)鍵字:FULL[OUTER]JOIN
返回兩個(gè)連接中所有的記錄數(shù)據(jù),是左外鏈接和右外鏈接的并集。
交叉連接/笛卡爾積
關(guān)鍵字:CROSS JOIN
兩個(gè)表做笛卡爾積,得到的結(jié)果集的行數(shù)是兩個(gè)表中的行數(shù)的乘積。
注意:帶有where條件的子句,往往會(huì)先生成兩個(gè)表行數(shù)乘積的數(shù)據(jù)表,然后從根據(jù)where條件從中選擇。
當(dāng)數(shù)據(jù)量比價(jià)大的時(shí)候,笛卡爾積操作會(huì)很消耗數(shù)據(jù)庫的性能