Sql Server系列:多表連線查詢

libingql發表於2014-12-01

  連線查詢是關係資料中最主要的查詢,包括內連線、外連線等。通過連線運算子可以實現多個表查詢。內連線查詢操作列出與連線條件匹配的資料行,它使用比較運算子比較被連線列的列值。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]

相關文章