zoukankan      html  css  js  c++  java
  • 08章 分组查询、子查询、原生SQL

    一、分组查询

    使用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语句配置到一个文件

    如图所示:

  • 相关阅读:
    常用FPGA功能块记录
    鸿蒙相关
    微波相关
    Python库大全
    C#环境实现代码的自动生成编译
    STM32相关
    硬件相关
    C# 获取枚举中文注释
    C# 获取自定义特性值
    Asp.Net Core 中 Host 与 WebHost的区别
  • 原文地址:https://www.cnblogs.com/WJ-163/p/5859301.html
Copyright © 2011-2022 走看看