欢迎光临
我们一直在努力

sql artisan多层查询条件嵌套功能_数据库技巧

建站超值云服务器,限时71元/月

在实际开发过程中我们经常面对一些查询或统计子表信息,对于一层处理还是比较简单,如果二层、三层等或更多时这个时候编写出来的条件就比较复杂和容易出现编写错误的情况。SQL Artisan字段对象除了提供灵活的比较运算功能外,对象的In方法还提供N层条件嵌套的功能,让你在构造查询条件更灵活。


以MSSQL的NorthWind为例:


查询指定雇员在某段时间的销售金额。


处理的表:Employees,Orders,Order Details


在实现过程可以通过表关联查询或直接对目标表进行查询,对目标表直接进行查询就必须把父表的条件以嵌套的方式添加到当前查询条件中。


Employee.Employee->Orders.OrderDate-> Sum(Order Details)作一个反向条件嵌套。


以下是两种查询方法在SQL语句和SQL Artisa组件下的实现。


(代码只是用于表达SQL Artisan组件的功能,对于SQL语句本身存在的其他问题不作讨论)


SQL方法一:


       SELECT Sum(UnitPrice*Quantity*(1-Discount)) FROM Employees INNER JOIN Orders ON Employees.EmployeeID=Orders.EmployeeID INNER JOIN [Order Details] ON Orders.OrderID=[Order Details].OrderID  where ( ( Employees.EmployeeID = 3 And Orders.OrderDate >= 1997-7-1 )  And Orders.OrderDate <= 1997-8-1)


 


SQL Artisan方法一:


       query = session.CreateQuery(Employees.TBL.INNER(Orders.TBL,Orders._EmployeeID)&


                       Orders.TBL.INNER(OrderDetails.TBL,Orders._OrderID));


query.Selects= new FieldAdapter[]{SqlMath.Sum(OrderDetails._UnitPrice*OrderDetails._Quantity*(1-OrderDetails._Discount))};


     query.Expreesion = Employees._EmployeeID.At(Employees.TBL) ==3 &


             Orders._OrderDate.At(Orders.TBL) >= DateTime.Parse(“1997-7-1”)&


            Orders._OrderDate.At(Orders.TBL) <= DateTime.Parse(“1997-8-1”);


     ds = query.ExecuteDataSet();


SQL方法二:


       SELECT Sum(UnitPrice*Quantity*(1-Discount)) FROM [Order Details]  where OrderID in (select OrderID from Orders where ( ( ( OrderDate >= 1997-7-1And OrderDate < 1997-8-1 )  And EmployeeID in (select EmployeeID from Employees where ( EmployeeID = 3 )) ) ))


 


SQL Artisan方法二:


IQuery query = session.CreateQuery(OrderDetails.TBL);


query.Selects= new FieldAdapter[]{SqlMath.Sum(OrderDetails._UnitPrice*OrderDetails._Quantity*(1-OrderDetails._Discount))};


     query.Expreesion = OrderDetails._OrderID.In(Orders.TBL,Orders._OrderID,


              Orders._OrderDate >= DateTime.Parse(“1997-7-1”) &


              Orders._OrderDate < DateTime.Parse(“1997-8-1”) &


     Orders._EmployeeID.In(Employees.TBL,Employees._EmployeeID,Employees._EmployeeID ==3));


     System.Data.DataSet ds = query.ExecuteDataSet();


 


从以上代码可以看到SQL Artisan组件通过字段对象的In方法方便灵活地把多层条件嵌套起来,在编写这么烦琐的查询条件时用字符串拼揍SQL语句对开发人员来说并不是什么恶梦,但在人手检测其合法性上也是个非常头痛的问题;何况很多时候要面对更复杂的查询条件。


SQL Artisan给你所带来的是完全对象化的条件编写方式并提供开发环境的编译检测,大大提高了条件的编写效率和质量。


其实SQL两个方法的的SQL语句都是通过运行SQL Artisan方法过程中截取的.


 相应例子下载

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » sql artisan多层查询条件嵌套功能_数据库技巧
分享到: 更多 (0)