制作官網(wǎng)需要什么條件茶葉seo網(wǎng)站推廣與優(yōu)化方案
數(shù)據(jù)庫(kù)表的關(guān)聯(lián)、集合操作
join、MySQL、Oracle
什么left right的老是忘,歸根到底還是不熟練,記錄下來(lái),以后就不用再搜了。
設(shè)表A、表B分別包含員工信息和部門信息。
表A包含員工的ID、姓名和部門ID,
表B包含部門ID和部門名稱。
(Inner) Join 內(nèi)連接
返回兩個(gè)表中滿足連接條件的記錄。如果兩個(gè)表中沒(méi)有匹配的記錄,則不會(huì)返回任何結(jié)果。
inner join 和 join 等價(jià)。
SELECT A.ID, A.Name, B.DepartmentName
FROM TableA AINNER JOIN TableB B ON A.DepartmentID = B.DepartmentID;
在兩個(gè)字段同名的情況下,這個(gè)sql可以使用using進(jìn)一步簡(jiǎn)化:
SELECT A.ID, A.Name, B.DepartmentName
FROM TableA AINNER JOIN TableB B USING (DepartmentID);
若兩表只有一對(duì)同名字段,則可以進(jìn)一步簡(jiǎn)化(使用自然連接):
SELECT A.ID, A.Name, B.DepartmentName
FROM TableA ANATURAL JOIN TableB B;
返回表A中員工的ID和姓名,以及他們所在的部門名稱,只返回滿足連接條件的記錄。
Left Join 左連接
等效 left outer join
,outer
可省略
返回左表中所有的記錄,以及與右表中滿足連接條件的記錄。如果右表中沒(méi)有匹配的記錄,則返回NULL值。
SELECT A.ID, A.Name, B.DepartmentName
FROM TableA ALEFT JOIN TableB B ON A.DepartmentID = B.DepartmentID;
返回表A中員工的ID和姓名,以及他們所在的部門名稱,如果有員工所在的部門在表B中沒(méi)有對(duì)應(yīng)的部門記錄,那么部門名稱將顯示為NULL值。
Right Join 右連接
等效 right outer join
,outer
可省略
返回右表中所有的記錄,以及與左表中滿足連接條件的記錄。如果左表中沒(méi)有匹配的記錄,則返回NULL值。
SELECT A.ID, A.Name, B.DepartmentName
FROM TableA ARIGHT JOIN TableB B ON A.DepartmentID = B.DepartmentID;
返回表B中的部門ID和部門名稱,以及該部門下的員工信息,如果有部門在表A中沒(méi)有員工記錄,那么員工ID和姓名將顯示為NULL值。
全外連接
在 Oracle 中可以使用Full Outer Join
,等效full join
,outer
可省略:
SELECT A.ID, A.Name, B.DepartmentName
FROM TableA AFULL OUTER JOIN TableB B ON A.DepartmentID = B.DepartmentID;
返回所有員工和所有部門信息,員工無(wú)部門其部門顯示NULL,部門無(wú)員工其員工顯示NULL
解決MySQL中不支持全外連接的辦法:
將左外連接和右外連接中間利用union
取并集(去重,執(zhí)行效率低):
SELECT A.ID, A.Name, B.DepartmentName
FROM TableA ALEFT JOIN TableB B ON A.DepartmentID = B.DepartmentID
UNION
SELECT A.ID, A.Name, B.DepartmentName
FROM TableA ARIGHT JOIN TableB B ON A.DepartmentID = B.DepartmentID;
或可利用union all
取并集(不去重,執(zhí)行效率高):
SELECT A.ID, A.Name, B.DepartmentName
FROM TableA ALEFT JOIN TableB B ON A.DepartmentID = B.DepartmentID
UNION ALL
SELECT A.ID, A.Name, B.DepartmentName
FROM TableA ARIGHT JOIN TableB B ON A.DepartmentID = B.DepartmentID;
集合操作
MySQL只支持并集,交、差不支持;
Oracle支持并、交、差。
三表查詢
自連接查詢
以上是99語(yǔ)法
92語(yǔ)法
交叉連接
兩表中間使用逗號(hào)分隔,表示兩表笛卡爾積,然后利用where條件篩選。
- 92語(yǔ)法更簡(jiǎn)單但使用繁瑣,無(wú)特性關(guān)鍵詞(個(gè)人感覺(jué)可以理解為一種語(yǔ)法糖)
- 92語(yǔ)法的 表的連接條件 和 篩選條件 沒(méi)有分開(kāi)
- 99語(yǔ)法提供了更多查詢連接類型,使用和表達(dá)上更為簡(jiǎn)潔,但語(yǔ)法體系更為冗雜
聲明:本文使用八爪魚rpa工具從gitee自動(dòng)搬運(yùn)本人原創(chuàng)(或摘錄,會(huì)備注出處)博客,如版式錯(cuò)亂請(qǐng)?jiān)u論私信,如情況緊急或久未回復(fù)請(qǐng)致郵 xkm.0jiejie0@qq.com 并備注原委;引用本人筆記的鏈接正常情況下均可訪問(wèn),如打不開(kāi)請(qǐng)查看該鏈接末尾的筆記標(biāo)題(右擊鏈接文本,點(diǎn)擊 復(fù)制鏈接地址,在文本編輯工具粘貼查看,也可在搜索框粘貼后直接編輯然后搜索),在本人博客手動(dòng)搜索該標(biāo)題即可;如遇任何問(wèn)題,或有更佳方案,歡迎與我溝通!