HQL不支持from的子查询
一:嵌套子查询的概念:
在SQL中,一个select-from-where语句成为一个查询块。将一个查询块嵌套在另一个查询块的where子句
或having短语的条件中,这样的查询称为嵌套查询或者子查询。如:
from Student s
where s.sno in
(select sno from sc where cno='1')
上面的HQL语句在Hibernate后台生成的SQL语句为:
select
student0_.id as id1_,
student0_.Sno as Sno1_,
student0_.Sname as Sname1_,
student0_.Ssex as Ssex1_,
student0_.Sdept as Sdept1_,
student0_.Sage as Sage1_,
student0_.Saddress as Saddress1_
from
joblog.student student0_
where
student0_.Sno in (
select
sc1_.Sno
from
joblog.sc sc1_
where
sc1_.Cno='1'
)
在这个例子中,下层查询块select sno from sc where cno='1'是嵌套在上层查询块
from Student s where s.sno in的where条件中的。上层查询块又称为外层查询或父查询,
下层查询块称为内层查询或者子查询。
嵌套查询的求解方法由里向外处理,每一个子查询在其上一级查询处理之前查询,
子查询的结果用于建立父查询的查询条件。
二:带有IN谓词的子查询:
带有IN谓词的子查询指的是父查询与子查询用谓词IN连接,判断某个属性列值是否在子查询的结果中。
在嵌套查询中,子查询的结果往往是一个集合。
例如,查询与“张三”在同一个系学习的学生。可以使用如下的方法进行:先查询“张三”所在系,
然后查询在这个系里的所有学生。先查询的作为条件是子查询,后查询的是父查询。具体代码如下。
from Student s
where s.sdept in
(select s.sdept from s where s.sname='张三)
三:比较子查询:
如果确切知道子查询返回的是单值,可以用=、>、>=、<、<=、<>比较运算符进行比较子查询。
例:查询与“张三”在同一个系学习的学生。
这个例子与上面的例子一样。“张三”只可能在一个系学习,所以子查询返回单值,可以用比较子查询。
from Student s
where s.sdept=
(select s.sdept from s where s.sname='张三')
四: 带有ANY或ALL的子查询:
使用ANY或者ALL谓词时,必须同时使用比较运算符。查询其他系中比计算机系任一学生年龄小的学生名单。
from Student s
where s.sage<ANY(select s.sage from s where s.sdept='计算机系')
and s.sdept<>'计算机系'
子查询查询出计算机系学生的所有年龄,然后用“<ANY”关键字进行年龄比较。
and后的条件s.sdept<>‘计算机系’是父查询的条件。
带有ANY或ALL的子查询的谓词如下所述。
>ANY,大于子查询结果中的某个值。
<ANY,小于子查询中的某个值。
>=ANY,大于等于子查询中的某个值。
<=ANY,小于等于子查询中的某个值。
=ANY,等于子查询中的某个值。
!=ANY或者<>ANY,不等于子查询中的某个值。
>ALL,大于子查询中的所有值。
<ALL,小于子查询中的所有值。
>=ALL,大于等于子查询中的所有值。
<=ALL,小于等于子查询中的所有值。
=ALL,等于子查询中的所有值。
!=ALL或者<>ALL,不等于子查询中的任何一个值。
此处记录一条HQL语句:
from OuterFilesBasic as o inner join fetch o.outerCosts as c where c.costcol='0' and c.endtime =to_date('2011-01-02','yyyy-MM-dd') and o.id in(select filesBasic from OuterZcsb as z where z.declevel like '%初级%')
分享到:
相关推荐
Hibernate HQL查询 分页查询 模糊查询.docxHibernate HQL查询 分页查询 模糊查询.docxHibernate HQL查询 分页查询 模糊查询.docxHibernate HQL查询 分页查询 模糊查询.docxHibernate HQL查询 分页查询 模糊查询....
hql模糊查询hql模糊查询hql模糊查询hql模糊查询
hql多表查询hql多表查询hql多表查询
HQL多表查询
Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Lanaguage)查询提供了更加丰富的和灵活的查询特性,因此Hibernate将HQL查询方式立为官方推荐的标准查询方式,HQL查询...
1.3 HQL的嵌套子查询 15 1.3.1 嵌套子查询的概念 15 1.3.2 带有IN谓词的子查询 16 1.3.3 比较子查询 16 1.3.4 带有ANY或ALL的子查询 17 1.4 HQL的多表查询 17 1.4.1 表之间的关联关系 17 1.4.2 表中的数据 18 1.4.3 ...
Hibernate(HQL、QBC查询)源码 Hibernate(HQL、QBC查询)源码 Hibernate(HQL、QBC查询)源码 Hibernate(HQL、QBC查询)源码 Hibernate(HQL、QBC查询)源码
hibernate查询之HQLhibernate查询之HQLhibernate查询之HQL
Hibernate中的关联查询实际上生成的是数据库表连接查询的SQL语句
HQL是指定连接查询方式,而且显式指定了关联级别的查询策略
总结的hql的查询,感觉很实用 已经写成.java格式,直接复制到项目中就能看了
HQL查询及语法,java web开发必备。
HQL查询 帮助文档
Hibernate实例开发 HQL 与 QBC 查询
hibernate hql各类查询范例
1、掌握Hibernate框架应用项目 2、学习HQL参数查询和Criteria查询 3、比较HQL和Criteria的不同 建立web项目,通过页面查询构造动态查询语句,struts2和hibernate框架整合。
HQL查询语言基础,HQL查询语言基础,HQL查询语言基础
NHibernate HQL 条件查询
hql精点查询语句.doc