嵌套子查询的概念
在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条件中的。上层查询块又称为外层查询或父查询,下层查询块称为内层查询或者子查询。
嵌套查询的求解方法由里向外处理,每一个子查询在其上一级查询处理之前查询,子查询的结果用于建立父查询的查询条件。
6.3.2 带有IN谓词的子查询
带有IN谓词的子查询指的是父查询与子查询用谓词IN连接,判断某个属性列值是否在子查询的结果中。在嵌套查询中,子查询的结果往往是一个集合。
例如,查询与“李晓梅”在同一个系学习的学生。可以使用如下的方法进行:先查询“李晓梅”所在系,然后查询在这个系里的所有学生。先查询的作为条件是子查询,后查询的是父查询。具体代码如下。
from Student s
where s.sdept in
(select s.sdept from s where s.sname='李晓梅')
6.3.3 比较子查询
如果确切知道子查询返回的是单值,可以用=、>、>=、<、<=、<>比较运算符进行比较子查询。
例:查询与“李晓梅”在同一个系学习的学生。
这个例子与上面的例子一样。“李晓梅”只可能在一个系学习,所以子查询返回单值,可以用比较子查询。
from Student s
where s.sdept=
(select s.sdept from s where s.sname='李晓梅')
6.3.4 带有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的嵌套子查询 ##### 4.1 嵌套子查询的概念 嵌套子查询是指在主查询中包含另一个查询的情况。例如: ```hql SELECT s FROM Student s WHERE s.sage > (SELECT AVG(sage) FROM Student) ``` 此查询将...
#### HQL的嵌套子查询 子查询是在另一个查询内部的查询,可以用于多种复杂的场景。 ##### 嵌套子查询的概念 子查询通常用于比较、筛选等操作。 ##### 带有IN谓词的子查询 用于检查值是否存在于另一个查询结果中...
6. **HQL的嵌套子查询.docx**:这部分将深入探讨HQL中的子查询,包括如何在查询中嵌套其他查询,以实现复杂的逻辑。 7. **HQL专题.docx**:可能是针对HQL的一些特定主题或问题的深度解析,如性能优化、动态查询等。...
HQL中可以嵌套子查询,如下所示: ```java from Employee e where e.id in (select e2.id from Employee e2 where e2.age > 30) ``` 这将返回所有年龄大于30的员工的ID。 ### 7. **命名查询** 在Hibernate配置...
在HQL中可以嵌套子查询,如`select e from Employee e where e.salary > (select avg(salary) from Employee)`,找出薪水高于平均值的员工。 8. **参数化查询**: 使用`?`作为参数占位符,避免SQL注入,如`from ...
- **子查询**:可以在HQL查询中嵌套子查询,以实现更复杂的逻辑。 - **命名查询(Named Queries)**:预定义的HQL查询,可以在配置文件中声明,然后在代码中通过名称引用,提高可读性和复用性。 总的来说,HQL是...
#### 1.3 HQL的嵌套子查询 ##### 1.3.1 嵌套子查询的概念 - **解释**: 子查询是在另一个查询语句内部的查询,用于增强查询的灵活性和表达能力。 ##### 1.3.2 带有IN谓词的子查询 - **语法**: ```hql SELECT s ...
子查询:在 Criteria 查询中可以嵌套子查询,例如找出年龄大于所有用户平均年龄的用户: ```java Criteria subquery = session.createCriteria(User.class, "subUser"); ProjectionList avgAgeProj = Projections....
- 可以在`where`子句中嵌套子查询,例如`from Employee e where e.id in (select emp.id from Employee emp where emp.age > 30)`。 7. **参数化查询**: - 使用`?`作为参数占位符,可以避免SQL注入问题,如`from...
12. ** Criteria API的子查询**:Criteria API允许在查询中嵌套子查询,提供了更复杂的查询能力。 13. **HQL(Hibernate查询语言)**:类似于SQL,但面向对象,可以更自然地表达对象之间的关系。 通过观看...
4. **Criteria API 的子查询和关联查询**: 支持在 Criteria 查询中嵌套子查询,以及基于关联的复杂查询。 5. **级联操作**: 可以配置实体之间的级联关系,如一个实体的删除会级联删除相关的其他实体。 6. **缓存...
8. ** Criteria subqueries**:如何在Criteria查询中嵌套子查询,实现更复杂的逻辑。 9. ** Native SQL查询**:当HQL和Criteria无法满足需求时,如何使用原生SQL查询,并处理结果集。 10. **关联映射**:介绍一对...
6. **Criteria API的子查询**:允许在Criteria查询中嵌套子查询,以实现更复杂的查询逻辑。 7. ** Criteria API的投影与分组**:通过Criteria API,可以进行聚合函数的使用,如求和、平均值,以及分组操作。 8. **...
5. Criteria Subqueries:可以在查询条件中嵌套子查询,实现复杂的查询逻辑。 6. HQL:面向对象的查询语言,类似SQL,但操作的是对象而非表。 7. Criteria Aliases:为类属性设置别名,使查询表达式更简洁。 8. ...
5. ** Criteria API的子查询**:在Criteria查询中,可以嵌套子查询来实现复杂的逻辑,如找到满足某个子集条件的实体。 6. **事件监听和拦截器**:Hibernate允许注册监听器来捕获对象生命周期的各个阶段,如加载、...
8. **Criteria API的子查询**:允许在Criteria查询中嵌套子查询,增强了查询的复杂性。 9. **关联映射**:Hibernate支持一对一、一对多、多对一、多对多等各种关联关系的映射,如@OneToOne、@OneToMany、@ManyToOne...
在 Criteria 查询中,可以嵌套子查询来实现复杂的查询逻辑,这在处理关联对象或多表查询时非常有用。 8. **一对多(One-to-Many)、多对一(Many-to-One)关联** Hibernate 支持不同对象之间的关联映射,如一个...
10. ** Criteria Subqueries**: 在Criteria查询中嵌套子查询,实现复杂的查询逻辑。 11. **Criteria Projections**: 定义查询结果的投影,如计算平均值、求和等。 12. ** CascadeType**: 定义关联对象的级联操作,...
3. ** Criteria Subqueries**: 在Criteria查询中嵌套子查询,实现更复杂的查询逻辑。 ### 六、缓存策略 1. **第一级缓存**: Session级别的缓存,自动管理实体对象的存取。 2. **第二级缓存**: SessionFactory级别...