數據庫組件 Hxj.Data (十四) (聯合查詢)

聯合查詢在前面的例子中已經出現過,只不過沒有細說。

先來個例子吧

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

生成的sql

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

是非常簡單操作就完成了。

 

方法 聯合查詢(sql)
InnerJoin inner join
LeftJoin left join
RightJoin right join
CrossJoin cross join
FullJoin full join
Union union
UnionAll union all

 

還是上例子清爽一些

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

生成的sql

Text: 
SELECT * FROM [Customers]
LEFT OUTER JOIN [Orders]
ON ([Customers].[CustomerID] = [Orders].[CustomerID])
WHERE [Customers].[Country] = @e3c66f9aa65c498abfd76908621b567a

Parameters:
@e3c66f9aa65c498abfd76908621b567a[String] = USA

InnerJoin、LeftJoin、RightJoin、CrossJoin、FullJoin這個操作都是類似的。

三個表及以上關聯例如

DbSession.Default.From<Customers>()
                .InnerJoin<Orders>(Customers._.CustomerID == Orders._.CustomerID)
                .InnerJoin<Order_Details>(Order_Details._.OrderID == Orders._.OrderID)
                .Where(Customers._.Country == "USA")
                .ToDataTable();
生成的sql:
Text: 
SELECT * FROM [Customers]
INNER JOIN [Orders] ON ([Customers].[CustomerID] = [Orders].[CustomerID])
INNER JOIN [Order Details] ON ([Order Details].[OrderID] = [Orders].[OrderID])
WHERE [Customers].[Country] = @5901349776db425492724e16c3c03a7a

Parameters:
@5901349776db425492724e16c3c03a7a[String] = USA

關聯查詢一下變簡單了吧。

 

下面講union 和 union all

這兩個是兩個結果的合集,union會區分結果排除相同的,union all 則直接合並結果集合。

DbSession.Default.From<Customers>().Where(Customers._.Country == "USA")
                .UnionAll(DbSession.Default.From<Customers>().Where(Customers._.Country == "UK"))
                .ToList();

生成的sql如下

Text: 
SELECT * FROM
(( SELECT * FROM [Customers] WHERE [Customers].[Country] = @f5b865bb20b64387b2c1be466c6d0980)
UNION ALL
( SELECT * FROM [Customers] WHERE [Customers].[Country] = @b7de905de065418dab5820094c764e1b))
AS Customers

Parameters:
@f5b865bb20b64387b2c1be466c6d0980[String] = USA @b7de905de065418dab5820094c764e1b[String] = UK

寫到這裏的時候發現了一個bug,所以請大家重新下載新版本。
 
union 和 union all用法是一樣的,就不再舉例子了。
 
 
下一節將講述排序和分組。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章