基本功:SQL 多表聯(lián)合查詢的幾種方式
點擊關注公眾號,實用技術文章及時了解
來源:blog.csdn.net/zt15732625878/article
/details/79074123
前言
最近在項目中用到連接查詢,連接查詢是關系數(shù)據(jù)中最主要的查詢,包括內連接、外連接等。通過連接運算符可以實現(xiàn)多個表查詢。下面來復習一下。
正文
連接查詢主要分為三種:內連接、外連接、交叉連接。
內連接
使用比較運算符(包括=、>、<、<>、>=、<=、!> 和!<)進行表間的比較操作,查詢與連接條件相匹配的數(shù)據(jù)。根據(jù)所使用的比較方式不同,內連接分為等值連接、自然連接和自連接三種。
關鍵字 INNER JOIN

等值連接/相等連接
使用”=”關系將表連接起來的查詢,其查詢結果中列出被連接表中的所有列,包括其中的重復列
SELECT
????PM_ACT_JOB_RLS.*,?PM_ACT_RLS.*
FROM
????PM_ACT_JOB_RLS
INNER?JOIN?PM_ACT_RLS?ON?PM_ACT_JOB_RLS.RlsPK?=?PM_ACT_RLS.RlsPK

自然連接
等值連接中去掉重復的列,形成的連接
SELECT
????PM_ACT_JOB_RLS.JobPK,
????PM_ACT_RLS.RlsPK,
????RlsName
FROM
????PM_ACT_JOB_RLS
INNER?JOIN?PM_ACT_RLS?ON?PM_ACT_JOB_RLS.RlsPK?=?PM_ACT_RLS.RlsPK

自連接
如果在一個連接查詢中,設計到的兩個表都是同一個表,這種查詢稱為自連接查詢。
--c1、c2邏輯上是兩張表,物理上是一張表
SELECT
????c1.CategoryID,
????c1.CategoryName
FROM
????[dbo].[Category]?c1
INNER?JOIN?[dbo].[Category]?c2?ON?c1.[CategoryID]?=?c2.[ParentID]
外連接
內連接只返回滿足連接條件的數(shù)據(jù)行,外連接不只列出與連接條件相匹配的行,而是列出左表(左外連接時)、右表(右外連接時)或兩個表(全外連接時)中所有符合搜索條件的數(shù)據(jù)行。外連接分為左外連接、右外鏈接、全外連接三種。
左外連接
返回左表中的所有行,如果左表中行在右表中沒有匹配行,則在相關聯(lián)的結果集中右表的所選擇字段均為NULL。
關鍵字 LEFT [OUTER] JOIN

--左外連接??--1679條數(shù)據(jù)
SELECT
????me.*,
????mo.*
FROM
????MM_LOTS_EXT?AS?me
LEFT?OUTER?JOIN?MM_LOT_OPERATIONS?AS?mo?ON?me.LotID?=?mo.SerialNumber

右外連接
返回右表中的所有行,如果右表中行在左表中沒有匹配行,則在左表中相關字段返回NULL值。
關鍵字 ? ? RIGHT [OUTER] JOIN
--右外連接??--209條數(shù)據(jù)
SELECT
????me.*,
????mo.*
FROM
????MM_LOTS_EXT?AS?me
RIGHT?OUTER?JOIN?MM_LOT_OPERATIONS?AS?mo?ON?me.LotID?=?mo.SerialNumber

全外連接/完全外連接
返回兩個連接中所有的記錄數(shù)據(jù),是左外連接和右外連接的并集。
關鍵字 ? ? FULL [OUTER] JOIN
--全外連接??--1816條數(shù)據(jù)?
SELECT
????me.*,
????mo.*
FROM
????MM_LOTS_EXT?AS?me
FULL?OUTER?JOIN?MM_LOT_OPERATIONS?AS?mo?ON?me.LotID?=?mo.SerialNumber
交叉連接/笛卡爾積
兩個表做笛卡爾積,得到的結果集的行數(shù)是兩個表的行數(shù)的乘積。
關鍵字 ? ? ?CROSS JOIN
--笛卡爾積?(cross?join后加條件只能用where,不能用on)??--45條數(shù)據(jù)(9*5)
SELECT
????*
FROM
????PM_ACT_JOB_RLS
CROSS?JOIN?PM_ACT_RLS
注意:帶有where條件的子句,往往會先生成兩個表行數(shù)乘積的數(shù)據(jù)表,然后從根據(jù)where條件從中選擇。
當數(shù)據(jù)量比價大的時候,笛卡爾積操作會很消耗數(shù)據(jù)庫的性能
總結
連接查詢是關系型數(shù)據(jù)庫中的一個重要標志,這次和大家一起復習多表查詢的幾種操作,希望給您帶來幫助!
如有文章對你有幫助,
“在看”和轉發(fā)是對我最大的支持!
暫時開放微信大號,好友位不多,需要的小伙伴們可以加,朋友圈和交流群里會發(fā)一些學習資料、個人見解、白嫖課程等等。 掃描下方二維碼即可加我微信啦,2022,抱團取暖,一起牛逼。

