• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            山寨:不是最好的,是最適合我們的!歡迎體驗山寨 中文版MSDN

            Blog @ Blog

            當華美的葉片落盡,生命的脈絡才歷歷可見。 -- 聶魯達

            常用鏈接

            統計

            積分與排名

            BBS

            Blog

            Web

            最新評論

            SQL Server的Inner Join及Outer Join

              在一個正規化的數據庫環境中, 我們常會碰到這款情形: 所需的資料并不是放在同一個資料表中, 在這個時候, 你就要用到 Join

              當然 Join 如何將不同的數據庫的資料結合, 還要看你如何使用它, 一共有四種不同的 Join 的方式, 在這篇文章中我們將為你介紹 Inner Join 及 Outer Join 以及其應用

              Inner Join

              Inner Join 應該是最常用的 Join 方式, 它只會傳回符合 Join 規則的紀錄, 還是先來看看語法

              Select <要選擇的字段> From <主要資料表>

              <Join 方式> <次要資料表> [On <Join 規則>]

              現在我們利用 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 <Left 資料表>

              <Left | Right> [Outer] Join <Right 資料表> On <Join 規則>

              語法中的 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

              Products.Suppliers = Suppliers.SupplierId

              比較一下兩種 Join 方式的查詢結果, 你應該就會知影其中的差別!

              再來看看 Right Outer Join, 請新增下底這筆記錄

              Insert Into Suppliers (CompanyName)

              values ('LearnASP')

              現在請使用 Right Out Join 來作查詢, 比較看看查詢的結果和 Inner Join 有什么不同!

              尋找不相符紀錄

              這里我們來看看如何使用 Out Join 來找不相符紀錄, 可能是有子紀錄卻沒有父紀錄或是顛倒過來

              Select Suppliers.CompanyName From Products

              Right Join Suppliers

              On Products.SupplierId = Suppliers.SupplierId

              Where Products.SupplierId is Null

              執行結果你會找到一筆資料為 LearnASP, 該筆供貨商資料存在, 但基本上已經沒有產品是來自這個供貨商, 想象一下如果不用 Outer Join 你要怎么以一個 SQL 指令完成同一查詢結果! 知道 Outer Join 的好用了吧! 再執行

              Select Products.ProductName

              From Products

              Left Join Suppliers

              On Products.SupplierId = Suppliers.SupplierId

              Where Suppliers.SupplierId is Null

              這個查詢結果你會發現 Test Product 這項產品竟然找不到供貨商的資料!

            posted on 2008-06-19 10:03 isabc 閱讀(442) 評論(0)  編輯 收藏 引用 所屬分類: 數據庫

            廣告信息(免費廣告聯系)

            中文版MSDN:
            歡迎體驗

            久久精品中文字幕一区| 久久久久AV综合网成人| 青草久久久国产线免观| 99久久精品免费看国产一区二区三区| 亚洲成色www久久网站夜月| 久久精品国产精品亚洲精品| 久久久久亚洲AV成人网人人网站 | 久久综合九色欧美综合狠狠| 亚洲精品无码久久久久去q| 婷婷综合久久中文字幕| 色妞色综合久久夜夜| 成人精品一区二区久久久| 中文字幕久久亚洲一区| 一本大道久久a久久精品综合| 狠狠色丁香久久婷婷综合_中| 欧美伊香蕉久久综合类网站| 久久综合久久美利坚合众国| 精品国产综合区久久久久久| avtt天堂网久久精品| 久久久久久国产精品美女| 国产精品成人99久久久久 | 久久精品一区二区三区AV| 久久综合九色综合欧美狠狠| 久久精品aⅴ无码中文字字幕重口| 亚洲色欲久久久久综合网| 久久最新精品国产| …久久精品99久久香蕉国产| 伊人久久精品无码二区麻豆| 天堂无码久久综合东京热| 久久久无码精品午夜| 国产综合成人久久大片91| 国产精品久久久久9999| 久久婷婷成人综合色综合| 奇米综合四色77777久久| 老男人久久青草av高清| 久久婷婷午色综合夜啪| 亚洲国产成人久久综合区| 老司机午夜网站国内精品久久久久久久久 | 91麻豆精品国产91久久久久久| 久久99精品国产麻豆| 久久久久人妻一区精品色 |