文章出處
文章列表
一、分組查詢
使用group by關鍵字對數據分組,使用having關鍵字對分組數據設定約束條件,從而完成對數據分組和統計
1.1 聚合函數:常被用來實現數據統計功能
① count() 統計記錄條數
② sum() 求和
③ min() 求最小值
④ max() 求最大值
⑤ avg() 求平均值
例子:查詢所有員工的平均工號
注:select語句查詢出來只有一個值,因此不能用list(),list投影出來的是一個集合。在這里提供uniqueResult()方法
/* * 分組查詢 所有員工的平均工號 */ @Test public void avgTest(){ Query query=session.createQuery("select avg(empId) from Emp"); Object count=query.uniqueResult(); System.out.println(count); }
輸出結果:
二、子查詢
子查詢語句應用于HQL查詢語句的where子句中。
子查詢關鍵字:
all:子查詢語句返回的所有記錄
any:子查詢語句返回的任意一條記錄
some:和“any”意思相同
in:與“=any”意思相同
exists:子查詢語句至少返回一條記錄
例子:查詢所有員工工資都小于2000的部門
/* * 子查詢 查詢所有員工工資都小于2000的部門 */ @Test public void childTest(){ List<Dept> list=session.createQuery("from Dept d where 2000>all(select e.sal from d.emps e) and d.emps.size>0").list(); for (Dept dept : list) { System.out.println(dept.getDeptName()); } }
輸出結果:
三、原生SQL查詢和命名查詢
注:對于原生SQL查詢方式,使用Session的createSQLQuery()方法來創建SQLQuery對象,createSQLQuery()方法的參數是底層數據庫的sql語句,SQLQuery接口繼承了Query接口。該語句不能返回強類型的Dept對象,需使用addEntity()封裝到一個Dept實體類
例子:查詢部門名稱
/* * 原生sql */ @Test public void sqlTest(){ SQLQuery query=session.createSQLQuery("select * from dept1").addEntity(Dept.class); List<Dept> list=query.list(); for (Dept dept : list) { System.out.println(dept.getDeptName()); } }
輸出結果:
命名查詢:在映射文件中定義字符串形式的查詢語句
將SQL語句配置到一個文件
如圖所示:
文章列表
全站熱搜