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

    如图所示:

  • 相关阅读:
    LA 2038 Strategic game(最小点覆盖,树形dp,二分匹配)
    UVA 10564 Paths through the Hourglass(背包)
    Codeforces Round #323 (Div. 2) D 582B Once Again...(快速幂)
    UVALive 3530 Martian Mining(贪心,dp)
    UVALive 4727 Jump(约瑟夫环,递推)
    UVALive 4731 Cellular Network(贪心,dp)
    UVA Mega Man's Mission(状压dp)
    Aizu 2456 Usoperanto (贪心)
    UVA 11404 Plalidromic Subsquence (回文子序列,LCS)
    Aizu 2304 Reverse Roads(无向流)
  • 原文地址:https://www.cnblogs.com/WJ-163/p/5859301.html
Copyright © 2011-2022 走看看