请注明转载地址:http://www.cnblogs.com/arhat

在上一章中,老魏讲述了HQL的链接查询,本章呢,老魏开始讲述HQL的子查询。子查询在SQL中也是占据着非常重要的作用,如果没有子查询,则有些特殊的需求我们是无法满足的。好了,废话不多说了,开始本章的旅行。

首先NHibenrate对于子查询有着一个非常重要的要求:“HQL中,子查询必须出现在where子句中,并且以一对圆括号包围”。这条规矩希望大家能够牢记在心中。

比如,我们现在要查询出,班级人数大于2的班级名称。那么HQL语句如下:

from Clazz c where c.CId in (selec s.Clazz.CId from Student s group by s.Clazz.CID having count(*)>2)

我们来试着执行一下,代码如下:

static void Main(string[] args)

        {            

string hql = "from Clazz c where c.CId in (select s.Clazz.CId from Student as s group by cid having count(*)>2)";

            Model.Clazz clazz = DAL.NHibernateHelper.CreateQuery(hql, null).UniqueResult<Model.Clazz>();

Console.WriteLine("人数大于2的班级是:"+clazz.CName);          

        }

运行结果如下:

从结果中,我们得到了我们想要的,同时NHibernate的确生成了子查询。但是NHibernate为HQL语句提供了几个HQL函数,可以帮助我们方便的解决这个问题,我们再把这个HQL语句更改一下:

string hql = "from Clazz as c where size(c.Students)>2";

这里我们会发现,虽然结果相同,但是生成的SQL语句不通,而HQL提供的size()函数是把集合属性作为参数的。当然了,HQL还提供了minelement(), maxelement(), minindex(), maxindex()等函数。

现在我们需要查询年龄为60的学生所在的班级。HQL语句如下:

string hql = "from Clazz as c where 60 in (select s.SAge from Student as s where s.Clazz.CId = c.CId)";

执行结果如下:

从上面的几个例子中,我们了解了HQL语句对自查训的要求,不过,在使用子查询的过程中,我们还使用到了HQL的导航语法,比如where s.Clazz.CId = c.CId。本身在Student对象中没有Cid字段的,但是这里又需要,所以可以使用Student对象对父对象Clazz的引用来得到和Student关联的cid值。从上面的结果可以看出,最终HQL语句使用的还是Student表中的Cid和Clazz表中的CId.

不过话说回来了,HQL的子查询,说实在的老魏在一开始都比较蒙,可能因为习惯了SQL,导致在对对象查询的时候有点不知所措啊。以后还得多多练习。

那么本章就讲到这里了,大家多多练习吧!

一步步学习NHibernate(10)——连接查询和子查询(2)的更多相关文章

  1. 一步步学习NHibernate(9)——连接查询和子查询(1)

    请注明转载地址:http://www.cnblogs.com/arhat 在前几章中,我们把HQL的基本查询学习了一下,但是只有基本查询很显然不能满足我们的需求,那么就需要一下复杂查询比如" ...

  2. 一步步学习NHibernate(8)——HQL查询(2)

    请注明转载地址:http://www.cnblogs.com/arhat 在上一章中,老魏带着大家学习了HQL语句,发现HQL语句还是非常不错的,尤其是在懒加载的时候,书写起来比较的舒服,但是这里老魏 ...

  3. 从项目上一个子查询扩展学习开来:mysql的查询、子查询及连接查询

    上面这样的数据,想要的结果是:如果matchResult为2的话,代表是黑名单.同一个softId,version,pcInfoId的代表是同一个软件,需要去重:同时,如果相同软件里面只要有一个mat ...

  4. mysql的查询、子查询及连接查询

    >>>>>>>>>> 一.mysql查询的五种子句         where(条件查询).having(筛选).group by(分组). ...

  5. Mysql的查询语句(联合查询、连接查询、子查询等)

    Mysql的各个查询语句(联合查询.连接查询.子查询等) 一.联合查询 关键字:union 语法形式 select语句1 union[union选项] select 语句2 union[union选项 ...

  6. mysql查询、子查询、连接查询

    mysql查询.子查询.连接查询 一.mysql查询的五种子句 where子句(条件查询):按照“条件表达式”指定的条件进行查询. group by子句(分组):按照“属性名”指定的字段进行分组.gr ...

  7. MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习

    MySQL之多表查询 阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建 ...

  8. [转]mysql的查询、子查询及连接查询

    转自:http://www.cnblogs.com/rollenholt/archive/2012/05/15/2502551.html 一.mysql查询的五种子句         where(条件 ...

  9. sqlserver查询(子查询,全连接,等值连接,自然连接,左右连,交集,并集,差集)

    --部门表 create table dept( deptno int primary key,--部门编号 dname ),--部门名 loc )--地址 ); --雇员表 create table ...

随机推荐

  1. javaweb学习总结二十二(servlet开发中常见的问题汇总)

    一:web应用的映射问题 通常我们从别人那里拷贝来的代码,自己会修改应用的名称,但是web映射的访问路径并没有修改,还是原来的映射. 解决方法: 工程右键--properties--myeclipse ...

  2. javaweb学习总结十八(软件密码学、配置tomcat的https连接器以及tomcat管理平台)

    一:软件密码学 1:对称加密 对称加密是最快速.最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key).对称加密有很多种算法,由于它效 ...

  3. 使用CSS实现一个简单的幻灯片效果

    方法一: 简单的CSS代码实现幻灯片效果 方法二: 使用CSS3 Animation来制作幻灯片 方法一: 简单的CSS代码实现幻灯片效果 话不多说,直接上代码 <!DOCTYPE html&g ...

  4. CXF(2.7.10) - RESTful Services, JSON Support

    在 CXF(2.7.10) - RESTful Services 介绍了 REST 风格的 WebService 服务,数据传输是基于 XML 格式的.如果要基于 JSON 格式传输数据,仅需要将注解 ...

  5. HttpClient(4.3.5) - Redirect Handling

    HttpClient handles all types of redirects automatically, except those explicitly prohibited by the H ...

  6. SignalR 2.0 系列:SignalR的服务器广播

    英文渣水平,大伙凑合着看吧…… 这是微软官方SignalR 2.0教程Getting Started with ASP.NET SignalR 2.0系列的翻译,这里是第八篇:SignalR的服务器广 ...

  7. jQuery之点击弹出图标环形菜单

    <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8&quo ...

  8. Insert data from excel to database

    USE ESPA Truncate table dbo.Interface_Customer --Delete the table data but retain the structure exec ...

  9. DOS批处理命令-引数取得

    参数传递对程序来说,是一个很重要的事情,所以,获得传递的参数是很重要的,接下来,我们来探讨下获得传递的参数的N种方式. 1.%N  获得传递的第N个参数(N最大为9) 就是传递过去的参数原样值(并且忽 ...

  10. html保留字符详解

    本文由 www.169it.com 搜集整理 1. 注释 HTML中的注释和其它语言注释作用相似,都是为了方便阅读和调试代码.当浏览器遇到注释时会自动忽略注释内容.HTML的注释格式多行和单行注释都用 ...