`

HQL的嵌套子查询

阅读更多

一:嵌套子查询的概念:

在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查询语句教程

    #### 四、HQL的嵌套子查询 ##### 4.1 嵌套子查询的概念 嵌套子查询是指在主查询中包含另一个查询的情况。例如: ```hql SELECT s FROM Student s WHERE s.sage &gt; (SELECT AVG(sage) FROM Student) ``` 此查询将...

    hibernate 中HQL语句查询学习笔记

    #### HQL的嵌套子查询 子查询是在另一个查询内部的查询,可以用于多种复杂的场景。 ##### 嵌套子查询的概念 子查询通常用于比较、筛选等操作。 ##### 带有IN谓词的子查询 用于检查值是否存在于另一个查询结果中...

    HQL学习大全.rar

    6. **HQL的嵌套子查询.docx**:这部分将深入探讨HQL中的子查询,包括如何在查询中嵌套其他查询,以实现复杂的逻辑。 7. **HQL专题.docx**:可能是针对HQL的一些特定主题或问题的深度解析,如性能优化、动态查询等。...

    hibernate hql大全

    HQL中可以嵌套子查询,如下所示: ```java from Employee e where e.id in (select e2.id from Employee e2 where e2.age &gt; 30) ``` 这将返回所有年龄大于30的员工的ID。 ### 7. **命名查询** 在Hibernate配置...

    HQL学习教程Hibernate入門

    在HQL中可以嵌套子查询,如`select e from Employee e where e.salary &gt; (select avg(salary) from Employee)`,找出薪水高于平均值的员工。 8. **参数化查询**: 使用`?`作为参数占位符,避免SQL注入,如`from ...

    HQL查询语言的使用介绍

    - **子查询**:可以在HQL查询中嵌套子查询,以实现更复杂的逻辑。 - **命名查询(Named Queries)**:预定义的HQL查询,可以在配置文件中声明,然后在代码中通过名称引用,提高可读性和复用性。 总的来说,HQL是...

    Hibernate HQL教程

    #### 1.3 HQL的嵌套子查询 ##### 1.3.1 嵌套子查询的概念 - **解释**: 子查询是在另一个查询语句内部的查询,用于增强查询的灵活性和表达能力。 ##### 1.3.2 带有IN谓词的子查询 - **语法**: ```hql SELECT s ...

    很全面的Hibernate查询介绍

    子查询:在 Criteria 查询中可以嵌套子查询,例如找出年龄大于所有用户平均年龄的用户: ```java Criteria subquery = session.createCriteria(User.class, "subUser"); ProjectionList avgAgeProj = Projections....

    Hibernate3框架系列 [ 2 ]

    - 可以在`where`子句中嵌套子查询,例如`from Employee e where e.id in (select emp.id from Employee emp where emp.age &gt; 30)`。 7. **参数化查询**: - 使用`?`作为参数占位符,可以避免SQL注入问题,如`from...

    Hibenater例子视频

    12. ** Criteria API的子查询**:Criteria API允许在查询中嵌套子查询,提供了更复杂的查询能力。 13. **HQL(Hibernate查询语言)**:类似于SQL,但面向对象,可以更自然地表达对象之间的关系。 通过观看...

    hibernate中文文档

    4. **Criteria API 的子查询和关联查询**: 支持在 Criteria 查询中嵌套子查询,以及基于关联的复杂查询。 5. **级联操作**: 可以配置实体之间的级联关系,如一个实体的删除会级联删除相关的其他实体。 6. **缓存...

    hibernate-distribution中文帮助手册

    8. ** Criteria subqueries**:如何在Criteria查询中嵌套子查询,实现更复杂的逻辑。 9. ** Native SQL查询**:当HQL和Criteria无法满足需求时,如何使用原生SQL查询,并处理结果集。 10. **关联映射**:介绍一对...

    Hibernate_3.2.0_Reference_zh_CN

    6. **Criteria API的子查询**:允许在Criteria查询中嵌套子查询,以实现更复杂的查询逻辑。 7. ** Criteria API的投影与分组**:通过Criteria API,可以进行聚合函数的使用,如求和、平均值,以及分组操作。 8. **...

    hibernate(ppt)

    5. Criteria Subqueries:可以在查询条件中嵌套子查询,实现复杂的查询逻辑。 6. HQL:面向对象的查询语言,类似SQL,但操作的是对象而非表。 7. Criteria Aliases:为类属性设置别名,使查询表达式更简洁。 8. ...

    hibernate3.1参考手册中文版.pdf

    5. ** Criteria API的子查询**:在Criteria查询中,可以嵌套子查询来实现复杂的逻辑,如找到满足某个子集条件的实体。 6. **事件监听和拦截器**:Hibernate允许注册监听器来捕获对象生命周期的各个阶段,如加载、...

    Hibernate架包

    8. **Criteria API的子查询**:允许在Criteria查询中嵌套子查询,增强了查询的复杂性。 9. **关联映射**:Hibernate支持一对一、一对多、多对一、多对多等各种关联关系的映射,如@OneToOne、@OneToMany、@ManyToOne...

    hibernate学习

    在 Criteria 查询中,可以嵌套子查询来实现复杂的查询逻辑,这在处理关联对象或多表查询时非常有用。 8. **一对多(One-to-Many)、多对一(Many-to-One)关联** Hibernate 支持不同对象之间的关联映射,如一个...

    传智播客hibernate源码

    10. ** Criteria Subqueries**: 在Criteria查询中嵌套子查询,实现复杂的查询逻辑。 11. **Criteria Projections**: 定义查询结果的投影,如计算平均值、求和等。 12. ** CascadeType**: 定义关联对象的级联操作,...

    hibernate培训教程

    3. ** Criteria Subqueries**: 在Criteria查询中嵌套子查询,实现更复杂的查询逻辑。 ### 六、缓存策略 1. **第一级缓存**: Session级别的缓存,自动管理实体对象的存取。 2. **第二级缓存**: SessionFactory级别...

Global site tag (gtag.js) - Google Analytics