程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> ASP.NET 2.0數據教程之六十九:在TableAdapter裡使用JOINs

ASP.NET 2.0數據教程之六十九:在TableAdapter裡使用JOINs

編輯:關於ASP.NET

返回“ASP.NET 2.0數據教程目錄”

導言:

在關系數據庫裡,我們處理的數據通常跨越了幾個數據表。舉 例:當展示產品信息時我們很可能想列出每個產品相應的category以及供應商的 名稱等.誠然,Products表裡包含有CategoryID 和SupplierID值,但是事實上的 category以及supplier names分別定義在Categories表和Suppliers表裡. 要從其 它的相關表裡獲取信息,我們可以使用correlated subqueries或JOINs.一條 correlated subquerie就是一個鑲套的SELECT,引用外部查詢(outer query)的列 .比如在第一章《Creating a Data Access Layer》裡我們在 ProductsTableAdapter的主查詢裡使用2條correlated subqueries來返回每個產 品的category 以及supplier names.而JOIN是一SQL構造,將2個不同的表的相關 聯的rows進行合並.在第47章《Querying Data with the SqlDataSource Control 》裡,我們使用JOIN來顯示每個產品的category信息.

我們避免在 TableAdapters裡使用JOIN是由於TableAdapter向導自動生成的INSERT, UPDATE, 以及DELETE statements有其局限性.具體來說,如果TableAdapter的主查詢裡包 含了任何的JOIN,那麼TableAdapter就不能為它的InsertCommand, UpdateCommand,以及DeleteCommand屬性自動地創建 ad-hoc SQL statements或存 儲過程.在開始之前,我們先簡要地對correlated subqueries和JOIN進行比 較.

比較Correlated Subqueries和JOINs

我們知道在第一章的 Northwind DataSet數據集裡創建的ProductsTableAdapter使用correlated subqueries來返回每個產品對應的category 和 supplier name。該 ProductsTableAdapter的主查詢如下:

SELECT ProductID, ProductName, SupplierID, CategoryID,
    QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder,
    ReorderLevel, Discontinued,
    (SELECT CategoryName FROM Categories WHERE Categories.CategoryID =
      Products.CategoryID) as CategoryName,
    (SELECT CompanyName FROM Suppliers WHERE Suppliers.SupplierID =
      Products.SupplierID) as SupplierName
FROM Products

我們注意這2個correlated subqueries——“(SELECT CategoryName FROM Categories WHERE Categories.CategoryID = Products.CategoryID)” 以及“ (SELECT CompanyName FROM Suppliers WHERE Suppliers.SupplierID = Products.SupplierID),都是一個SELECT查詢,返回一個單一值,並作為外部 SELECT statement的額外的列.

此外,我們可以使用JOIN來返回每個產品 的supplier 以及category name,下面的查詢與上面的代碼效果一樣,不過用的 是JOIN:

SELECT ProductID, ProductName, Products.SupplierID, Products.CategoryID,
    QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder,
    ReorderLevel, Discontinued,
    Categories.CategoryName,
    Suppliers.CompanyName as SupplierName
FROM Products
  LEFT JOIN Categories ON
    Categories.CategoryID = Products.CategoryID
  LEFT JOIN Suppliers ON
     Suppliers.SupplierID = Products.SupplierID

JOIN基於某種標 准將一個表的記錄與另一個表的記錄合並起來.比如上述代碼中,“LEFT JOIN Categories ON Categories.CategoryID = Products.CategoryID”就 指示SQL Server將每一條product記錄與category記錄合並起來,標准是category 記錄的CategoryID值與product記錄CategoryID值相吻合.在合並的結果裡,我們 可以對每個產品相應的category fields進行處理(比如CategoryName).

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved