网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > SQL技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.错误 2812: 未能找到存储过程 ma.
.实例讲解System.Data.DataTable计.
.数据库的分页问题.
.sql server数据库备份有两种方式.
.sa登陆失败 SQL Server错误18456.
.SQL Server 2005数据库镜像配置脚.
.问题“未于信任SQL Server连接相.
.在SQL Server 2005数据库中进行错.
.利用flashback query 恢复误操作.
.由浅入深讲解update statistics的.
.关于提高mssql的查询效率.
.巧用数据库引擎优化Tuning Advis.
.关于sql数据库维护失败的问题查找.
.快速了解数据仓库及数据建模的常.
.Xp下安装SQL2000或者其他软件系统.
.讲解数据库及数据仓库建模方法的.
.数据库差异备份与增量备份的不同.
.两个sql server 2000的通用分页存.
.优化SQL Server索引的小技巧.
.怎样在SQL Server 2005中用证书加.

SQL Artisan多层查询条件嵌套功能

发表日期:2006-5-16


在实际开发过程中我们经常面对一些查询或统计子表信息,对于一层处理还是比较简单,如果二层、三层等或更多时这个时候编写出来的条件就比较复杂和容易出现编写错误的情况。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-1'And 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方法过程中截取的.

 相应例子下载

上一篇:Sql server数据库开发常用汇总 人气:8363
下一篇:小记存储过程中经常用到的本周,本月,本年函数 人气:7796
浏览全部SQL Artisan的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐