all 返回的所有记录
any 返回的任意一条记录
some 和“any”意思相同
in 与“=any”意思相同
exists 至少返回一条记录
查询工资高于平均工资的员工。
"fromEmp ewheree.salary>(selectavg(salary)fromEmp)"
查询所有员工工资都小于5000的部门。
"fromDept dwhere 5000>all(selecte.salary fromd.emps e) andd.emps.size>0"
查询至少有一位员工工资低于5000的部门。
"fromDept dwhere 5000>any(selecte.salary fromd.emps e)"
查询至少有一位员工的部门
"fromDept dwhere exists (fromd.emps)"
查询员工工资正好是5000元的部门
"fromDept dwhere 5000 in (selecte.salary fromd.emps e)"
"fromDept dwhere 5000=some(selecte.salary fromd.emps e)"
"fromDept dwhere 5000=any(selecte.salary fromd.emps e)"
查询指定员工所在部门
"fromDeptd where ? in (fromd.emps)"
"fromDeptd where ? in elements (d.emps)"
查询员工个数大于5的部门
"fromDeptd where d.emps.size>5"
"fromDeptd where size(d.emps)>5"
按职位统计员工个数。select job,count(*)from Employee group by job
统计各个部门的平均工资 select e.dept.dname,avg(sal)from Employee egroup by e.dept.dname
统计各个职位的最低工资和最高工资 selecte.job,max(sal),min(sal)from Employee e group by e.job
统计各个部门平均工资高于4000元的部门名称,打印部门名称、部门平均工资
selecte.dept.dname,avg(sal)from Employee e group by e.dept.dname havingavg(sal)>2000
统计各个部门平均工资高于4000元的部门名称,打印部门名称、部门平均工资,使用JavaBean封装查询结果
查询有50条以上房屋信息的街道。
查询所有房屋信息的租金高于2000元的的街道。
查询至少有一条房屋信息的租金低于1000元的街道。
统计各个街道的房屋信息条数。
fromStreet s where 50<(select count(h) froms.houses h)
fromStreet s where 2000
fromStreet s where 1000> any (selecth.price froms.houses h)
selects.name,s.houses.size from Street s
使用隐式内连接查询某用户发布的房屋信息 (提示:from House h where h.user.uname = 'rose')
连接类型 HQL语法
内连接 inner join 或 join
迫切内连接 inner join fetch或 join fetch
左外连接 left outer join或 left join
迫切左外连接 left outer join fetch或 left join fetch
右外连接 right outer join 或right join
HQL使用group by关键字对数据分组,用having关键字对分组数据设定约束条件
Hibernate可以在映射文件中定义字符串形式的查询语句
Hibernate使用Session的createSQLQuery()方法创建SQLQuery对象,用来执行原生SQL语句
在持久化类中,二进制大对象可以声明为byte[]或java.sql.Blob类型;字符串大对象可以声明为java.lang.String或java.sql.Clob类型
Query query = session
.createSQLQuery(
"select * from EMP where ENAME like :ename and JOB = :job")
.addEntity(Emp.class).setString("ename", "%e%")
.setString("job", "ENGINEER");
List list = query.list();
String sql = "select {e.*},{d.*} from EMP e join DEPT d on d.DEPTNO=e.DEPTNO"+ " where e.JOB = :job";
Query query = session.createSQLQuery(sql).addEntity("e", Emp.class).addJoin("d", "e.dept").setString("job", "ENGINEER");
select {e.*} from EMP e where e.job = :job
select {e.*},{d.*} from EMP e join DEPT d on d.DEPTNO=e.DEPTNO where e.JOB = :job
......
select {e.*} from EMP e where e.job = :job
......
原生sql查询
SQLQuerysession.createSQLQuery("sql");
命名查询
映射文件
根标签下
session.getNamedQuery("N");
原生sql命名查询
映射文件
根标签下
session.getNamedQuery("N");
八、