zoukankan      html  css  js  c++  java
  • mysql 中sql语句注意事项

    1.where中不能使用聚合函数

    mysql中常用的聚合函数有

     2.为什么where 条件中不能使用聚合函数?

    首先,sql的执行顺序为:

    FROM, including JOINs ---->WHERE-->group by-->having-->select---->order by

    聚合函数针对结果集,where并不是在结果集后运行。

    having针对结果集,把聚合函数放在having之后。

    where:用于在初始表中筛选查询。它是一个约束声明,用于约束数据,在返回结果集之前起作用。

    group by:对select查询出来的结果集按照某个字段或者表达式进行分组,获得一组组的集合,然后从每组中取出一个指定字段或者表达式的值。

    having:用于对where和group by查询出来的分组经行过滤,查出满足条件的分组结果。它是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作。

    3. having与where的区别

      在select 语句中可以使用group by 子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集。group by 子句可以将查询结果分组,并返回行的汇总信息Oracle 按照group by 子句中指定的表达式的值分组查询结果。

       在带有group by 子句的查询语句中,在select 列表中指定的列要么是group by 子句中指定的列,要么包含聚组函数

     select max(sal),job emp group by job;

       (注意max(sal), job 的job并非一定要出现,但有意义 )

       查询语句的select 和group by ,having 子句是聚组函数唯一出现的地方,在where 子句中不能使用聚组函数。

     select deptno,sum(sal) from emp where sal>1200 group by deptno having sum(sal)>8500 order by deptno;

      当在gropu by 子句中使用having 子句时,查询结果中只返回满足having条件的组。在一个sql语句中可以有where子句和having子句。having 与where 子句类似,均用于设置限定条件
      where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
      having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。

      查询每个部门的每种职位的雇员数

      select deptno,job,count(*) from emp group by deptno,job; 

    如果你对何时应该使用WHERE,何时使用HAVING仍旧很迷惑,请遵照下面的说明:  
      WHERE语句在GROUP BY语句之前;SQL会在分组之前计算WHERE语句。  
      HAVING语句在GROUP BY语句之后;SQL会在分组之后计算HAVING语句。

  • 相关阅读:
    Tcp/IP协议详讲
    LoadRunner生成测试报告
    Lombok Requires Annotation Processing
    js数组、对象、数组中套对象等的“复制”(不改变原来的值)的方法,
    一篇文章学完Mysql
    element中<el-input输入值后不变
    JS判断输入值是否为正整数等
    el-input类型为number时禁止输入e和.
    element-ui升级
    ndroid Studio 连接自己搭建的服务器 需要admin 的帐号的问题 SSH Password Login,please enter password for user git@git.
  • 原文地址:https://www.cnblogs.com/jingpeng77/p/13620818.html
Copyright © 2011-2022 走看看