首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

Hxj.Data 聯合查詢:InnerJoin/LeftJoin/RightJoin/CrossJoin/FullJoin/Union/UnionAll 一網打盡

     編輯:關於ASP.NET

Join 方法對應 SQL 標準

方法SQL
InnerJoinINNER JOIN
LeftJoinLEFT OUTER JOIN
RightJoinRIGHT OUTER JOIN
CrossJoinCROSS JOIN
FullJoinFULL OUTER JOIN
UnionUNION
UnionAllUNION ALL

基本 InnerJoin 範例

DbSession.Default.From()
    .InnerJoin(Customers._.CustomerID == Orders._.CustomerID)
    .ToDataTable();

SQL:SELECT * FROM [Customers] INNER JOIN [Orders] ON ([Customers].[CustomerID] = [Orders].[CustomerID])

LeftJoin + Where 篩選

DbSession.Default.From()
    .LeftJoin(Customers._.CustomerID == Orders._.CustomerID)
    .Where(Customers._.Country == "USA")
    .ToDataTable();

SQL:SELECT * FROM [Customers] LEFT OUTER JOIN [Orders] ON (...) WHERE [Customers].[Country] = @p0

三表以上串聯 Join

DbSession.Default.From()
    .InnerJoin(Customers._.CustomerID == Orders._.CustomerID)
    .InnerJoin(Order_Details._.OrderID == Orders._.OrderID)
    .Where(Customers._.Country == "USA")
    .ToDataTable();

鏈式呼叫,順序即 Join 順序,ON 條件以強型別 Field 運算式表達,編譯期檢查。

Union / UnionAll 合併結果集

var q1 = DbSession.Default.From().Select(Products._.ProductID);
var q2 = DbSession.Default.From().Select(ArchivedProducts._.ProductID);
var allIds = q1.UnionAll(q2).ToList();

要求兩查詢欄位數量、型別、順序一致,自動產生 UNION ALL SQL。

最佳實務

  • 優先使用 InnerJoin,效能最佳。
  • LeftJoin 僅在「主表資料必須保留」時使用。
  • 避免 CrossJoin/FullJoin 除非極特殊需求(笛卡兒積/雙向保留)。
  • Join 條件務必使用索引欄位(FK/PK),否則大表 Join 災難性慢。
  • 只需部分欄位時,搭配 Select 投影,減少網路傳輸與記憶體。

Hxj.Data 以流暢介面封裝標準 SQL Join,型別安全、可讀性高、零字串拼接,是 ORM 層處理關聯查詢的最佳實踐。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved