精华内容
下载资源
问答
  • having和where区别

    2021-01-20 15:34:13
    having和where区别having是在分组后对数据进行过滤 where是在分组前对数据进行过滤 having后面可以使用聚合函数 where后面不可以使用聚合 具体实例说明: 区别1 where是从数据表中的字段直接进行的筛选的。 ...

    having和where区别:
    having是在分组后对数据进行过滤
    where是在分组前对数据进行过滤
    having后面可以使用聚合函数
    where后面不可以使用聚合

    具体实例说明:

    区别1
    where是从数据表中的字段直接进行的筛选的。

    having是从 前面筛选的字段再筛选

    eg:  select goods_price,goods_name from goods having  goods_price > 100
    
                     等价于  
    
       select goods_price,goods_name from goods where goods_price > 100
    
    select goods_name,goods_number from goods having  goods_price > 100
    

    // 报错!!!因为前面并没有筛选出 goods_price 字段

    区别2

    having子句中可以使用字段别名,而where不能使用

    区别3

    having能够使用统计函数,先分组,再判断(having),但是where不能使用

    展开全文
  • 从整体声明的角度来理解: Where是一个约束声明,在查询数据库的结果返回之前对数据库中的查询条件进行约束,即在结果返回之前起作用,且where后面不能使用聚合...1. where和having都可以使用的场景 #where select g

    从整体声明的角度来理解:

    Where是一个约束声明,在查询数据库的结果返回之前对数据库中的查询条件进行约束,即在结果返回之前起作用,且where后面不能使用聚合函数

    Having是一个过滤声明,所谓过滤是在查询数据库的结果返回之后进行过滤,即在结果返回之后起作用,并且having后面可以使用聚合函数。

    所谓聚合函数,是对一组值进行计算并且返回单一值的函数:sum—求和,count—计数,max—最大值,avg—平均值等。

    1. where和having都可以使用的场景

    #where
        select goods_price,goods_name from sw_goods where goods_price > 100
    #having
        select goods_price,goods_name from sw_goods having goods_price > 100
    

    解释:上面的having可以用的前提是我已经筛选出了goods_price字段,在这种情况下和where的效果是等效的,但是如果我没有select goods_price 就会报错!!因为having是从前筛选的字段再筛选,而where是从数据表中的字段直接进行的筛选的。

    2. 只可以用where,不可以用having的情况

    #where
        select goods_name,goods_number from sw_goods where goods_price > 100
    #having
        select goods_name,goods_number from sw_goods having goods_price > 100 //报错!!!因为前面并没有筛选出goods_price 字段
    

    3. 只可以用having,不可以用where情况

    查询每种goods_category_id商品的价格平均值,获取平均价格大于1000元的商品信息

    #having
        select goods_category_id , avg(goods_price) as ag from sw_goods group by goods_category having ag > 1000
    #where
        select goods_category_id , avg(goods_price) as ag from sw_goods where ag>1000 group by goods_category //报错!!因为from sw_goods 这张数据表里面没有ag这个字段
    

    注意:where 后面要跟的是数据表里的字段,如果我把ag换成avg(goods_price)也是错误的!因为表里没有该字段。而having只是根据前面查询出来的是什么就可以后面接什么。

    4、执行的顺序不一样

    where的搜索条件是在执行语句进行分组之前应用
    having的搜索条件是在分组条件后执行的
    即如果where和having一起用时,where会先执行,having后执行

    5、子句有区别

    where子句中的条件表达式having都可以跟,而having子句中的有些表达式where不可以跟;having子句可以用集合函数(sum、count、avg、max和min),而where子句不可以。

    总结:

    1.Where和Having的作用对象不同:WHERE 子句作用于表和视图,HAVING 子句作用于组。

    2.WHERE 在分组和聚集计算之前选取输入行(因此,它控制哪些行进入聚集计算), 而 HAVING 在分组和聚集之后选取分组的行。因此,WHERE 子句不能包含聚集函数; 因为试图用聚集函数判断那些行输入给聚集运算是没有意义的。 相反,HAVING 子句总是包含聚集函数。

    3.having一般跟在group by之后,执行记录组选择的一部分来工作的。
    where则是执行所有数据来工作的。
    再者having可以用聚合函数,如having sum(qty)>1000

    展开全文
  • 区别唯一区别是为了区别where:其实是where只能跟着from后,having只能跟着group by后。即:having是对一个表的数据进行了分组之后,对“组信息”进行相应 条件筛选;可见:having筛选时,只能根据select子句中可...

    区别

    唯一区别是为了区别where:其实是where只能跟着from后,having只能跟着group by后。

    即:

    having是对一个表的数据进行了分组之后,对“组信息”进行相应 条件筛选;

    可见:

    having筛选时,只能根据select子句中可出现的字段(数据)来进行条件设定。

    having子句与where子句一样,都是用于条件判断的。

    区别1

    where是判断数据从磁盘读入内存的时候

    having是判断分组统计之前的所有条件

    区别2

    having子句中可以使用字段别名,而where不能使用

    区别3

    having能够使用统计函数,但是where不能使用

    一、MySQL的group by语句

    1、group by是将具有相同的进行分组,化成一块数据集合,之后配合聚合函数进行数据处理。比如:全校学生成绩表(学号,姓名,班级,成绩….),现在我需要将按照相同的班级进行分类,之后计算出每个班的最高的成绩。

    (1)创建好student_score表

    SID SNAME CLASS total_score

    (2)按照班级进行分类:以班级分类为主

    按照班级分类:计算出每个班的最高的成绩。

    select CLASS, SNAME from student_score group by CLASS, SNAME;

    select CLASS, MAX(TOTAL_SCORES) AS TOP from student_score group by CLASS;

    2、group by需要注意的几点

    group by语句通常配合聚合函数SUM、MAX、MIN等使用处理数据。

    group by语句中使用的聚合函数处理数据是group by分组完毕之后聚合函数是对分组数据进行处理的,不是对整个表。比如group by之后一班的成绩有250、251、253、254。聚合函数MAX()是针对一班这四个数据计算的。并不是MAX()整个表。

    select后面的查询字段要包含在group by后面的字段中。

    select后面的列要包含在group by后面的列中。

    二、MySQL的having语句

    1、having与where的区别

    (1)where:

    是作用在查询结果进行分组之前,过滤掉不符合条件的数据。

    where中不能包含聚合函数。(注意是:where后面子句不能有聚合函数,而在含有where中可以使用聚合函数)

    作用在group by和having字句前

    是作用于对表与视图

    (2)having:

    是作用在查询结果分组之后,筛选满足条件的组,过滤掉数据。

    通常跟聚合函数一起使用。

    having子句在聚合后对组记录进行筛选。

    是作用于分组

    2、使用having例子

    (1)计算出每个班级的总成绩

    SELECT CLASS,SUM(TOTAL_SCORES) FROM student_score GROUP BY CLASS;

    (2)筛选出总成绩大于505的班级

    SELECT CLASS,SUM(TOTAL_SCORES) FROM student_score GROUP BY CLASS HAVING SUM(TOTAL_SCORES)>505;

    这里用where SUM(TOTAL_SCORES)>505的话,将会出错,因为表中根本没有总成绩分数这项,这是分组之后才有的

    3、使用having与where联立的例子

    利用having与where联立查询

    实例:查询班级中分数大于250的学生的总成绩大于531的班级有哪几个班。

    执行顺序为:

    开始 -> where行记录筛选 -> group by分组 -> 聚合函数(sum、max、min)计算 -> having分组筛选->结束

    具体的如下:

    where筛选学生成绩大于250的所有学生。

    group by分组班级

    sum计算分组班级中学生的总分数

    having筛选总成绩大于531的班级

    具体代码如下:

    -- 1.WHERE筛选出分数大于250的学生

    SELECT CLASS,SNAME,TOTAL_SCORES FROM student_score WHERE TOTAL_SCORES>250;

    -- 4.SUM计算之后,having筛选总成绩大于531的分组

    SELECT CLASS,SUM(TOTAL_SCORES) AS SUM_SCORE FROM student_score

    WHERE TOTAL_SCORES>250

    GROUP BY CLASS HAVING SUM(TOTAL_SCORES)>531;

    展开全文
  • 数据库中:where子句与having子句的区别where: ① where是一个约束声明,使用where来约束来自数据库的数据; ② where是在结果返回之前起作用的; ③ where不能使用聚合函数(聚合函数包括:sum、count、max...

    数据库中:where子句与having子句的区别:

    where:

    ① where是一个约束声明,使用where来约束来自数据库的数据;

    ② where是在结果返回之前起作用的; 

    ③ where不能使用聚合函数(聚合函数包括:sum、count、max、avg等对一组或多条数据操作的函数);

    ④ where的执行顺序早于having;

    having:

    ① having是一个过滤声明;

    ② 在查询结果以后,对查询结果进行的过滤操作;

    ③ having可以使用聚合函数(聚合函数包括:sum、count、max、avg等对一组或多条数据操作的函数);

    ④ having的执行顺序后于where;

    聚合函数:

    例如:sum、count、max、avg等对一组或多条数据操作的函数,在使用时需要配合group by来使用。

    平均成绩以学号(sno)分成小组,属于同一个学号的为一组[group by sno]取其成绩的平均值[having avg(grade)],作为该学号(sno)的平均成绩。

    上图为嵌套查询all (select avg(grade) from SC group by sno)以学号分组取其平均成绩,进而求其平均成绩的最大值;然后再以学号分组求最高平均成绩(即平均成绩最大值)学生的学号以及平均成绩。

    展开全文
  • 浏览网页对这个问题有了深入的理解,主要参考了如下两个链接,得到的结论是:区别在于功能性能两个方面,链接1对功能描述比较详细,链接2主要从性能角度进行解释。 wherehaving区别 具体区别: 1、Where 是一...
  • 【SQL】having和 where先执行的是哪个? 文章目录【SQL】having和 where先执行的是哪个?1、在一个含有group by的查询SQL中,同时存在having和where,SQL在解析执行的时候,先执行的是哪一个?2、 1、在一个含有...
  • where和having区别 where叙述 1.where子句实现分组之前过滤数据 having叙述 1.having子句实现分组后过滤数据 2.having子句作用是筛选满足条件的组,就是分组之后过滤数据,having子句的位置在group by子句之后,它常...
  • having一般跟在group by后面,先对查询结果分组,再根据having条件,筛选满足条件的组,限制字段最好选择分组的字段,可以操纵使用聚合函数...group by一般聚合函数配合使用,having 的字段一般也只对这些聚合函数...
  • HAVING关键字和WHERE关键字都是用来过滤数据的,二者的区别主要是HAVING在数据分组之后进行过滤来选择分组,而WHERE在分组之前来选择记录。另外WHERE排除的记录不再包括在分组内。
  • 让我们先运行2个sql语句:1、...1LIMIT0,302、SELECT*FROM`welcome`WHEREid>1LIMIT0,30查看一下结果吧,怎么样?是不是查询到相同的结果。让我们再看2个sql语句:1、SELECT user, MAX(salary) FROM users GROU...
  • 以前在学校里学习过SQLserver数据库,发现学习的都是皮毛,今天以正确的姿态谈一下MySQL中where和having区别。误区:不要错误的认为having和group by 必须配合使用。下面以一个例子来具体的讲解:1. where和having...
  • SQL-where和having区别

    千次阅读 2021-02-07 18:59:01
    SQL-where和having区别 概念 where where是一个约束声明,在查询数据库的结果返回之前对数据库中的查询条件进行约束,再返回结果前起作用,并且where后不能使用“聚合函数”。 聚合函数 对一组值执行计算,并...
  • having和where区别

    2021-11-15 21:32:26
    wherehaving和on的区别都有一个共同点就是可以用来过滤数据 其次,在谈这些的区别的时候,我们首先要进行对SQL语言的执行顺序,做一个回忆: SQL语言中的语法的顺序执行的顺序是不一样的 其语法的顺序是 1...
  • Having表示对上述结果进行过滤,所以比Where更加灵活。Where之后不能跟聚合函数,因为where表示对每一行进行条件限制,此时聚合函数的值还没有求出,但是Having可以跟聚合函数,因为Having表示对结果进行过滤。 例子...
  • having和where区别

    2021-05-27 10:18:00
    having和where区别在于having是对聚合后的结果进行条件的过滤,而where是在聚合前就对记录进行过滤。 注意如果逻辑允许,我们尽可能用where先过滤记录,这样因为结果集减小,将对聚合的效率大大提高,最后再根据...
  • having和where的使用知识 wherehaving同时使用时,执行顺序时where->having。 但只使用where或者having时,作用一样(不能(慎用)使用聚合函数)。 where不能使用聚合函数 因为聚合函数是从确定的结果集中...
  • 1、where 不能放在group by 的后面2、HAVING 是跟GROUP BY 连在一起用的,放在GROUP BY 后面,此时的作用相当于WHERE3.WHERE 后面的条件中不能有聚集函数,比如SUM(),AVG()等,而HAVING 可以where 条件group by 某个...
  • 1.where和having区别2.聚合函数group by3.where 和having的执行顺序4.where不能使用聚合函数、having中可以使用聚合函数 1.where和having区别 where: where是一个约束声明,使用where来约束来自数据库的数据; ...
  • select accid as uid,date(datetime) AS datetime from game.logLogin GROUP BY accid HAVING datetime='2013-8-20';+---------+------------+| uid | datetime |+---------+------------+| 1000010...
  • sql中where和having区别 用的地方不一样 where可以用于select、update、deleteinsert into values(select * from table where ..)语句中。 having只能用于select语句中 执行的顺序不一样 where的搜索条件是...
  • having是用来弥补where在分组数据判断时的不足。having 和where 都是用来筛选用的,...mysql中wherehaving的用法和区别误区:不要错误的认为having和group by 必须配合使用。举例说明:1. where和having都可以使...
  • 有没有办法在整个’WHERE类型条件’HAVING类型条件’之间添加OR?这样我可以做类似的事情: SELECT [some fields], CONCAT(firstname, ' ', 'lastname') as fullname FROM people WHERE firstname LIKE '%user_...
  • 1.HAVING 和WHERE区别

    2021-12-02 00:03:49
    只是一个新手菜鸡的学习笔记,HAVING 和WHERE区别
  • 分享关于mysql中的where和having子句的区别,本文主要分享对象为刚刚接触sql的新人,下面将结合实际案例分析:下面以一个例子来具体的讲解:1. where和having都可以使用的场景1)select addtime,name from dw_users ...
  • 这是我今天上数据库课时思考的grouporder的的区别,然后今天看一个大佬博客的时候发现where和group一起用我刚开始以为写错了,我就去查了一下,就有了新的收获,我在网上找了一些,然后总结出来的,也有借用一些...
  • where和having: "Where" 是一个约束声明,使用Where来约束来自于数据库的数据,Where是在结果返回之前起作用的,且Where中不能使用聚合函数。 "Having" 是一个过滤声明,是在查询返回结果集以后对查询结果进行的...
  • having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句前。而 having子句在聚合后对组记录进行筛选。SQL实例:一、显示每个地区的总人口数总面积.SELECT ...
  • MySQL HAVING子句MySQL的HAVING子句在SELECT语句中是用来为某一组行或聚合指定过滤条件。...如果省略了GROUPBY子句,HAVING子句行为就像WHERE子句一样。请注意,HAVING子句应用筛选条件每一个分组的行,而...
  • where” 是一个约束声明,使用where来约束来之数据库的数据,where是在结果返回之前起作用的,且where中...注意:返回结果集之后起作用在查询过程中where子句、聚合语句、having子句,的执行优先级为where>grou...
  • Is there a way to add a OR between the whole 'WHERE type conditions' and the 'HAVING type conditions'? This way I could do something like: SELECT [some fields], CONCAT(firstname, ' ', 'lastname') as ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 239,896
精华内容 95,958
关键字:

having和where的区别