Sql Server系列:多表連接查詢


  連接查詢是關系數據中最主要的查詢,包括內連接、外連接等。通過連接運算符可以實現多個表查詢。內連接查詢操作列出與連接條件匹配的數據行,它使用比較運算符比較被連接列的列值。SQL Server中的內連接有:等值連接和不等連接。

1 內連接-相等連接

  相等連接又叫等值連接,在連接條件這使用等號(=)運算符比較被連接列的列值,其查詢結果中列出被連接表中的所有列,包括其中的重復列。

  示例:

SELECT [dbo].[Category].* , [dbo].[Product].*
FROM [dbo].[Category] INNER JOIN [dbo].[Product]
ON [dbo].[Category].[CategoryID] = [dbo].[Product].[CategoryID]
SELECT p.[ProductCode], p.[ProductName], c.[CategoryName], d.[Quantity], d.[Subtotal]
FROM [dbo].[Product] p
INNER JOIN [dbo].[Category] c
    ON p.[CategoryID] = c.[CategoryID]
INNER JOIN [dbo].[OrderDetails] d
    ON p.[ProductID] = d.[ProductID]

2 帶選擇條件的連接

  帶選擇條件的連接查詢是在連接查詢的過程中,通過添加過濾條件限制查詢的結果,使查詢的結果更加准確。

  示例:

SELECT [dbo].[Category].* , [dbo].[Product].*
FROM [dbo].[Category] INNER JOIN [dbo].[Product]
ON [dbo].[Category].[CategoryID] = [dbo].[Product].[CategoryID]
AND [dbo].[Category].[CategoryID] = 1

3 自連接

  如果在一個連接查詢中,涉及到的兩個表都是同一個表,這種查詢稱為自連接查詢。自連接是一種特殊的內連接,它是指相互連接的表在物理上為同一張表,但可以在邏輯上分為兩張表。

  示例:

SELECT c1.CategoryID, c1.CategoryName
FROM [dbo].[Category] c1 INNER JOIN [dbo].[Category] c2
ON c1.[CategoryID] = c2.[ParentID]

4 外連接

  連接查詢將查詢多個表中相關聯的行,內連接時,返回查詢結果集合中的僅是符號查詢條件和連接條件的行,但有時需要包含沒有關聯的行中數據,即返回查詢結果集合中的不僅包含符合連接條件的行,還需要包括左表(左外連接或左連接)、右表(右外連接或右連接)或者兩個邊接表(全外連接)中的所有數據行。外連接分為左外連接和右外連接。

  ◊ LEFT JOIN(左連接):返回包括左表中的所有記錄和右表中連接字段相等的記錄。

  ◊ RIGHT JOIN(右連接):返回包括右表中的所有記錄和左表中連接字段相等的記錄。

4.1 左外連接

  左連接的結果包括LEFT OUTER JOIN關鍵字左邊連接的表的所有行,而不僅僅是連接列所匹配的行。如果左表的某行在右表中沒有匹配行,則在相關聯的結果集中右表的所有選擇字段均為NULL。

  示例:

SELECT [dbo].[Category].* , [dbo].[Product].*
FROM [dbo].[Category] LEFT OUTER JOIN [dbo].[Product]
ON [dbo].[Category].[CategoryID] = [dbo].[Product].[CategoryID]

4.2 右外連接

  右連接將返回RIGHT OUTER JOIN關鍵字右邊的表中的所有行。如果右表的某行在左表中沒有匹配行,左表將返回NULL。

  示例:

SELECT [dbo].[Category].* , [dbo].[Product].*
FROM [dbo].[Category] RIGHT OUTER JOIN [dbo].[Product]
ON [dbo].[Category].[CategoryID] = [dbo].[Product].[CategoryID]

4.3 全外連接

  全外連接又稱為完全外連接,該連接查詢方式返回兩個連接中所有的記錄數據。根據匹配條件,如果滿足匹配條件時,則返回數據;如果不滿足匹配條件時,同樣返回數據,但在相應的列中填入NULL,全外連接返回的結果集中包含了兩個完全表的所有數據。全外連接關鍵字FULL OUTER JOIN。

  示例:

SELECT [dbo].[Category].* , [dbo].[Product].*
FROM [dbo].[Category] FULL OUTER JOIN [dbo].[Product]
ON [dbo].[Category].[CategoryID] = [dbo].[Product].[CategoryID]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM