程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server的Inner Join及Outer Join

SQL Server的Inner Join及Outer Join

編輯:關於SqlServer
在一個正規化的數據庫環境中, 我們常會碰到這款情形: 所需的資料並不是放在同一個資料表中, 在這個時候, 你就要用到 Join
  當然 Join 如何將不同的數據庫的資料結合, 還要看你如何使用它, 一共有四種不同的 Join 的方式, 在這篇文章中我們將為你介紹 Inner Join 及 Outer Join 以及其應用

  Inner Join
  Inner Join 應該是最常用的 Join 方式, 它只會傳回符合 Join 規則的紀錄, 還是先來看看語法
Select <要選擇的字段> From <主要資料表> <次要資料表> [On ]
  現在我們利用 MS SQL 內建的北風數據庫來實際練習一下! 想多了解 MS SQL 的內建數據庫, 你可以看看 SQL Server 的內建數據庫這篇文章
  請打開 QA (Query Analyzer), 為了使用北風數據庫, 請先執行 Use Northwind, 然後執行
Select ProductId, ProductName, SupplIErId From Products
  從 Products 產品資料表中取出三個字段, 分別是產品代碼, 產品名稱, 供貨商代碼, 但查詢出來的結果保證讓你的老板很不滿意, 因為供貨商代碼對於人類實在是無什麼意義, 這個時候 Join 就可以幫上忙了, 藉由 Join SupplIErs 這個資料表我們便可以查詢到供貨商名稱
Select ProductId, ProductName, Suppliers.SupplIErId
From Products
Inner Join SupplIErs
Products.Suppliers = Suppliers.SupplIErId
  這款的查詢結果是不是清楚呢! Inner Join 的主要精神就是 exclusive , 叫它做排他性吧! 就是講 Join 規則不相符的資料就會被排除掉, 譬如講在 Product 中有一項產品的供貨商代碼 (SupplierId), 沒有出現在 SupplIErs 資料表中, 那麼這筆記錄便會被排除掉

  Outer Join
  這款的 Join 方式是一般人比較少用到的, 甚至有些 SQL 的管理者也從未用過, 這真是一件悲哀的代志, 因為善用 Outer Join 是可以簡化一些查詢的工作的, 先來看看 Outer Join 的語法
Select <要查詢的字段> From [Outer] Join On
  語法中的 Outer 是可以省略的, 例如你可以用 Left Join 或是 Right Join, 在本質上, Outer Join 是 inclusive, 叫它做包容性吧! 不同於 Inner Join 的排他性, 因此在 Left Outer Join 的查詢結果會包含所有 Left 資料表的資料, 顛倒過來講, Right Outer Join 的查詢就會包含所有 Right 資料表的資料, 接下來我們還是來做些實際操作, 仍然是使用北風數據庫, 但要先做一些小小的修改, 才能達到我們要的結果
  首先要拿掉 Products 資料表的 Foreign Key, 否則沒有法度在 Products 資料表新增一筆 SupplierId 沒有對映到 SupplIErs 資料表的紀錄, 要知影一個資料表的 Constraint 你可以執行 SQL 內建的 sp_helpconstraint , 在 QA 執行
sp_helpconstraint Products
  接下來刪除 FK_Products_SupplIErs 這個 Foreign Key
Alter Table Products
Drop Constraint FK_Products_SupplIErs
  再來新增一筆紀錄於 Products 資料表, SupplierId 使用 50 是因為它並沒有對映到 SupplIErs 資料表中的記錄
Insert Into Products (ProductName,SupplIErId,CategoryId)
values ('Test Product','50','1')
  現在我們再執行頭前的查詢, 只是將 Inner Join 改為 Left Outer Join
Select ProductId, ProductName, Suppliers.SupplIErId
From Products
Left Outer Join SupplIErs
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved