本篇文章給大家?guī)?lái)了關(guān)于sql的相關(guān)知識(shí),其中主要介紹了關(guān)于表連接的相關(guān)內(nèi)容,sql server中支持多種連接,包括內(nèi)連接、左連接、右連接、交叉連接和全外連接,下面一起來(lái)看一下,希望對(duì)大家有幫助。
推薦學(xué)習(xí):《sql》
SQL的表連接
在關(guān)系數(shù)據(jù)庫(kù)中,數(shù)據(jù)分布在多個(gè)邏輯表。想要獲得完整有意義的數(shù)據(jù)集,則需要使用連接來(lái)查詢這些表中的數(shù)據(jù)。SQL Server中支持多種連接,包括內(nèi)連接、左連接、右連接、交叉連接和全外連接。
一、內(nèi)連接
內(nèi)部連接子句用于查詢來(lái)自兩個(gè)或多個(gè)相關(guān)表的數(shù)據(jù)。INNER JOIN 子句的語(yǔ)法:
SELECT p.product_name, p.list_price ,c.category_nameFROM production.products p INNER JOIN production.categories c ON c.category_id = p.category_id
注意:要查詢的字段,必須要在字段的前面加上表名或者表的別名,如:p.product_name
其中FROM后面的是主表,然后 INNER JOIN 后面的表是要連接的表。主表和連接表進(jìn)行比較,查 找滿足的條件的所有行。連接謂詞的計(jì)算結(jié)果為true是,則將主表和連接表進(jìn)行合并成新的結(jié)果 集,如下圖所示:
內(nèi)連接的多個(gè)表連接,如下所示:
SELECT p.product_name, p.list_price ,c.category_name, b.brand_nameFROM production.products p INNER JOIN production.categories c ON c.category_id = p.category_id INNER JOIN production.brands b ON b.brand_id = p.brand_id
二、左連接
在左連接中使用 LEFT JOIN 子句用于查詢來(lái)自多個(gè)表的數(shù)據(jù),它返回是左表中的所有行和右表中匹配行。若是右表中找不到匹配行,則使用NULL代替顯示,如圖所示:
使用 LEFT JOIN 語(yǔ)句進(jìn)行連接:如下所示:
SELECT p.product_name, p.list_price ,c.category_nameFROM production.products p LEFT JOIN production.categories c ON c.category_id = p.category_id
在上面的語(yǔ)法中 FROM 后面的表是左表(production.products),而 LEFT JOIN 后面緊跟的右 表(production.categories)。
三、右連接
在右連接中使用RIGHT JOIN子句來(lái)進(jìn)行兩個(gè)表或多個(gè)表進(jìn)行查詢。右查詢剛好與左查詢的是相反 的,返回右表的所有行和左表的匹配行,若左表找不到匹配行,則返回NULL代替顯示,如圖所示:
使用 RIGHT JOIN 語(yǔ)句進(jìn)行連接:如下所示:
SELECT p.product_name, p.list_price ,c.category_nameFROM production.products p RIGHT JOIN production.categories c ON c.category_id = p.category_id
在上面的語(yǔ)法中 FROM 后面的表是左表(production.products),而 RIGHT JOIN 后面緊跟的右 表(production.categories)。
四、交叉連接
CROSS JOIN 連接兩個(gè)或多個(gè)不相關(guān)的表。 以下是兩個(gè)表的CROSS JOIN 的語(yǔ)法,兩種寫法:
SELECT T1.select_list FROM T1 CROSS JOIN T2;
或者
SELECT T1.select_list FROM T1, T2;
CROSS JOIN 將第一個(gè)表(T1)中的每一行與第二個(gè)表(T2)中的每一行連接起來(lái)。 換句話說(shuō),交叉連 接返回兩個(gè)表中行的笛卡爾積。與INNER JOIN或LEFT JOIN不同,交叉連接不會(huì)在連接的表之間 建立關(guān)系。
假設(shè) T1 表包含三行: 1 , 2 和 3 , T2 表包含三行: A , B 和 C 。 CROSS JOIN 從第一個(gè) 表(T1)獲取一行,然后為第二個(gè)表(T2)中的每一行創(chuàng)建一個(gè)新行。 然后它對(duì) 第一個(gè) 表(T1)中的 下一行執(zhí)行相同操作,依此類推。在此圖中, CROSS JOIN 總共創(chuàng)建了 9 行。
五、自連接
自聯(lián)接用于將表連接到自身(同一個(gè)表)。 它對(duì)于查詢分層數(shù)據(jù)或比較同一個(gè)表中的行很有用。
自聯(lián)接使用內(nèi)連接或左連接子句。 由于使用自聯(lián)接的查詢引用同一個(gè)表,因此表別名用于為查詢 中的表分配不同的名稱。
注意:如果在不使用表別名的情況下在查詢中多次引用同一個(gè)表,則會(huì)出現(xiàn)錯(cuò)誤。
示例:
SELECT t1.select_list FROM T1 t1INNER JOIN T1 t2 ON t1.category_id = t2.category_id
在 INNER JOIN 這里可以使用其他的子句,比如:LEFT JOIN ,RIGHT JOIN
六、全外連接
FULL OUTER JOIN當(dāng)左表或右表中存在匹配項(xiàng)時(shí),該命令將返回所有行。如圖所示:
使用 FULL OUTER JOIN 查詢 pm.projects 表和 pm.member 表中的數(shù)據(jù):
SELECT m.name member, p.title project FROM pm.members m FULL OUTER JOIN pm.projects p ON p.id = m.project_id;
pm.projects 表數(shù)據(jù):
pm.member 表數(shù)據(jù):
查詢結(jié)果:
推薦學(xué)習(xí):《sql》