sql语句:where和having的区别

  1. where
    1)where是一个约束声明,使用where来约束来自数据库的数据
    2)where是在结果返回之前 起作用的
    3)where中不可以使用聚合函数
    4)where作用于记录(作用对象不同)

  2. having
    1)having是一个过滤声明
    2)having是在查询返回结果集后 对查询结果的过滤操作
    3)having中可以使用聚合函数
    4)having作用于组

在了解where和having的区别之前,需要先了解GROUP BY这个子句,而了解这个子句,又需要先了解 聚合函数

  1. 聚合函数
    SQL语言的一种特殊的函数,如SUM, COUNT, MAX, AVG等。这些函数与其他函数的区别在于它们作用在多条记录上。如:
    SELECT SUM(id) FROM student;
    其中SUM作用在所有返回记录 的id字段上。

  2. GROUP BY
    通过使用该子句,可以让聚合函数对属于一组的数据起作用。
    在select指定的字段要么就要包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数中。如以下情况,会导致sid失效:
    SELECT sid, cid, MAX(score) FROM stu_course GROUP BY cid;

  3. having与where区别
    having聚合后对组记录进行筛选
    where在聚合前先筛选记录
    (即,where作用在GROUP BY子句和having子句前)

此外,想要排序的话可以在最后加 order by sum(id) desc/asc

学习链接:
https://www.jianshu.com/p/fbf5d6376f9d (where与having的区别)
https://www.yanxurui.cc/posts/mysql/2016-11-10-10-sql-interview-questions/ (包含重要的sql语句)
https://www.cnblogs.com/jingfengling/p/5962182.html (group by查询字段问题)

步履不停
原文地址:https://www.cnblogs.com/yuanyunjing/p/15329418.html