zoukankan      html  css  js  c++  java
  • SQL之WHERE,GROUP,HAVING,ORDER BY

    ①WHERE 是对数据集进行筛选

    ②GROUP BY 是分组查询,是对结果集进行分组, 一般 GROUP BY 是和聚合函数配合使用:

    GROUP BY 有一个原则,就是 SELECT后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面(重要),如下:

    SELECT column_A,column_B,SUM(column_C) FROM Orders
    GROUP BY column_A,column_B; 

    ③HAVING 用于对分组后的结果进行筛选.(即HAVING的前提是分组)

    ④ORDER BY 是对结果集进行排序

    详解:

    1.WHERE 必须在GROUP BY 之前

    2.GROUP BY 必须在HAVING 之前.

    3.HAVING只能用在GROUP BY 之后,对分组后的结果进行筛选.(即使用HAVING 的前提是分组)

    举例:

    当一个查询语句同时出现了WHERE ,GROUP BY, HAVING ,ORDER BY 时,执行顺序和编写顺序是select--from--where--group--having--select--order by:

    1.执行WHERE子句对全表数据做筛选,返回第一个结果集

    2.针对第一个结果集使用GROUP BY分组,返回第二个结果集

    3.针对第二个结果集使用HAVING进行筛选,返回第三个结果集

    4.针对第三个结果集中的每1组数据执行SELECT XX,有几组就执行几次,返回第四个结果集

    5.对第四个结果集使用OEDER BY进行排序

    WHERE 与 HAVING 的区别:

    WHERE子句中不能使用分组函数(!!!)

    可以在HAVING子句中使用分组函数

    WHERE的执行顺序在HAVING之前,因为WHERE子句在GROUP BY子句之前,HAVING 子句在GROUP BY 之后

    HAVING 子句是对分组结果进行筛选,所以使用HAVING的前提是使用了GROUP BY

  • 相关阅读:
    MySQL实战45讲
    mysql查看binlog日志
    Nginx核心知识100讲
    RabbitMQ消息为什么变成数字了呢?
    Spring core中一些API
    [LeetCode] 719. Find K-th Smallest Pair Distance 找第K小的数对儿距离
    Github Upload Large File 上传超大文件
    [LeetCode] Special Binary String 特殊的二进制字符串
    [LeetCode] Range Module 范围模块
    [LeetCode] Find Anagram Mappings 寻找异构映射
  • 原文地址:https://www.cnblogs.com/yaoze2018/p/11266919.html
Copyright © 2011-2022 走看看