精华内容
下载资源
问答
  • WHERE子句设置查询条件,过滤掉不需要的数据行。  例如下面语句查询年龄大于10的数据: SELECT * FROM student WHERE age>10  WHERE子句可包括各种条件运算符: 运算符 表示形式 比较运算符(大小比较) >、...
  • 主要给大家介绍了关于SQL中where子句与having子句的区别的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • having子句与where子句

    千次阅读 2020-10-11 20:10:50
    1.相同点 都是对记录进行筛选 2.不同点 ...where子句where子句仅仅用于从from子句中返回的值,from子句返回的每一行数据都会用where子句中的条件进行判断筛选,where子句中允许使用比较运算符和逻辑运算

    1.相同点
    都是对记录进行筛选
    2.不同点
    2.1 where 不能放在group by后面

    2.2 having 是跟group by连在一起用的,放在group by 后面,此时的作用相当于where

    2.3 where 后面的条件中不能有聚集函数,比如SUM(),AVG()等,而HAVING可以。

    一、where子句

    where子句:where子句仅仅用于从from子句中返回的值,from子句返回的每一行数据都会用where子句中的条件进行判断筛选,where子句中允许使用比较运算符和逻辑运算符

    二、having子句

    having子句:having子句通常是与group by子句一起使用的,因为having的作用是对使用group by 进行分组统计后的结果进行进一步的筛选。
    三、下面通过where子句和having子句的对比,更进一步的理解他们

    在查询过程中聚合函数(SUM,MIN,MAX,AVG,COUNT)要比having子句优先执行,简单的理解为只有有了统计结果后我才能执行筛选。where子句在查询过程中执行优先级别优先于聚合函数(SUM,MIN,MAX,AVG,COUNT),因为他是一句一句筛选的,HAVING子句可以让我们筛选成组后的对各组数据筛选。而WHERE子句在聚合前筛选记录,如:现在我们想要部门号不等于10的部门并且工资总和大于8000的部门编号?

    分析:通过where子句筛选除部门编号不为10的部门,然后对部门工资进行统计,然后使用having子句对统计结果进行筛选。

     select deptno,sum(sa1) from emp
    
        where deptno<>'10'  group by deptno
    
        having sum(sa1)>8000;
    

    FAQ:1.既然where 和having 都可以对记录进行筛选 那么为什么不直接用having?
    HAVING 只会在检索出所有记录之后才对结果集进行过滤. 这个处理需要排序,总计等操作. 如果能通过WHERE子句限制记录的数目,那就能减少这方面的开销。
    2.为什么group by 之后不可以用where 子句 ?
    答:1).首先 我们看一下数据库的书写顺序 以及 执行顺序
    书写顺序:select … from … where … group by … having … order by … limit …
    好的 我们看到 书写顺序应该是where 在 group by 之前 ,你要问我为啥,
    我会说甲鱼的屁股–规定。。。

    2).然后我们再看一下执行顺序
    执行顺序:from–>where–>select–>group by–>having–>order by–>limit…
    我们可以看到 where 子句 是在 group by 之前执行的 也就是说 我们先找到表,再根据where子句的条件进行筛选 ,再进行查询操作 ,之后再进行分组等操作 ,所以说 group by 是对 基于where 条件查询的结果进行操作。 having子句是会在分组后对分组形成的结果进行过滤。

    也正是因为执行顺序所以where中可以使用表别名但是不能使用列别名 ,而having中可以使用表别名 也可以使用列别名。

    小结:where子句只能接受from子句输出的数据,而having子句则可以接受来自group by ,where或者from子句的输入。

    参考了很多大佬的文章 ,侵删。
    以上。

    展开全文
  • where子句和having子句区别

    千次阅读 2019-11-13 16:58:31
    感谢大佬:... where子句和having子句的区别:     1.where  不能放在group by后面     2.having   是跟group by连在一起用的,放在group by 后面,此时的作用相当于wh...

    感谢大佬:https://blog.csdn.net/XiaopinOo/article/details/78305008

    where子句和having子句的区别:

        1.where  不能放在group by后面

        2.having   是跟group by连在一起用的,放在group by 后面,此时的作用相当于where

        3.where  后面的条件中不能有聚集函数,比如SUM(),AVG()等,而HAVING可以。

    一、where子句

        where子句:where子句仅仅用于从from子句中返回的值,from子句返回的每一行数据都会用where子句中的条件进行判断筛选,where子句中允许使用比较运算符和逻辑运算符

    二、having子句

        having子句:having子句通常是与order by子句一起使用的,因为having的作用是对使用group by 进行分组统计后的结果进行进一步的筛选。

    三、下面通过where子句和having子句的对比,更进一步的理解他们

        在查询过程中聚合函数(SUM,MIN,MAX,AVG,COUNT)要比having子句优先执行,简单的理解为只有有了统计结果后我才能执行筛选。where子句在查询过程中执行优先级别优先于聚合函数(SUM,MIN,MAX,AVG,COUNT),因为他是一句一句筛选的,HAVING子句可以让我们筛选成组后的对各组数据筛选。而WHERE子句在聚合前筛选记录,如:现在我们想要部门号不等于10的部门并且工资总和大于8000的部门编号?

        分析:通过where子句筛选除部门编号不为10的部门,然后对部门工资进行统计,然后使用having子句对统计结果进行筛选。

       select deptno,sum(sa1) from emp

            where deptno!='10'  group by deptno

            having sum(sa1)>8000;

    四、异同点

        他们的相同之处就是定义搜索条件,不同之处是where子句为单个筛选而having子句和组有关,而不是与单个的行有关

         最后:理解having子句和where子句最好的方法就是基础select 语句中的那些句子的处理次序:where子句只能接受from子句输出的数据,而having子句则可以接受来自group by ,where或者from子句的输入。

    having子句会在分组后对分组形成的结果进行过滤。

    这个过程需要聚合、排序、因此如果通过where子句限制记录而省略掉having子句,是可以提升性能的。






    总结:
    where子句:是在分组之前使用,表示从所有数据中筛选出部分数据,以完成分组的要求,
    在where子句中不允许使用统计函数,没有group by子句也可以使用。
    having子句:是在分组之后使用的,表示对分组统计后的数据执行再次过滤,可以使用
    统计函数,有group by子句之后才可以出现having子句。

    展开全文
  • 2.HAVING 是跟GROUP BY 连在一起用的,放在GROUP BY 后面,此时的作用相当于WHERE 3.WHERE 后面的条件中不能有聚集函数,比如SUM(),AVG()等,而HAVING 可以 Where和Having都是对查询结果的一种筛选,说的书面点就是...

    前言: 1.where 不能放在GROUP BY 后面 2.HAVING 是跟GROUP BY 连在一起用的,放在GROUP BY 后面,此时的作用相当于WHERE 3.WHERE 后面的条件中不能有聚集函数,比如SUM(),AVG()等,而HAVING 可以 Where和Having都是对查询结果的一种筛选,说的书面点就是设定条件的语句。下面分别说明其用法和异同点。注:本文使用字段为oracle数据库中默认用户scott下面的emp表,sal代表员工工资,deptno代表部门编号。

    一、聚合函数

    说明前我们先了解下聚合函数:聚合函数有时候也叫统计函数,它们的作用通常是对一组数据的统计,比如说求最大值,最小值,总数,平均值( MAX,MIN,COUNT, AVG)等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。简单举个例子:SELECT SUM(sal) FROM emp,这里的SUM作用是统计emp表中sal(工资)字段的总和,结果就是该查询只返回一个结果,即工资总和。通过使用GROUP BY 子句,可以让SUM 和 COUNT 这些函数对属于一组的数据起作用。

    二、where子句

    where自居仅仅用于从from子句中返回的值,from子句返回的每一行数据都会用where子句中的条件进行判断筛选。where子句中允许使用比较运算符(>,<,>=,<=,<>,!=|等)和逻辑运算符(and,or,not)。由于大家对where子句都比较熟悉,在此不在赘述。

    三、having子句

    having子句通常是与order by 子句一起使用的。因为having的作用是对使用group by进行分组统计后的结果进行进一步的筛选。举个例子:现在需要找到部门工资总和大于10000的部门编号? 第一步:

    select deptno,sum(sal) from emp group by deptno;
    复制代码

    筛选结果如下:

    DEPTNO SUM(SAL)

    —— ———-

    30 9400

    20 10875

    10 8750

    可以看出我们想要的结果了。不过现在我们如果想要部门工资总和大于10000的呢?那么想到了对分组统计结果进行筛选的having来帮我们完成。 第二步:

    select deptno,sum(sal) from emp group by deptno having sum(sal)>10000;
    复制代码

    筛选结果如下:

    DEPTNO SUM(SAL)

    —— ———-

    20 10875

    当然这个结果正是我们想要的。

    四、下面我们通过where子句和having子句的对比,更进一步的理解它们。

    在查询过程中聚合语句(sum,min,max,avg,count)要比having子句优先执行,简单的理解为只有有了统计结果后我才能执行筛选。where子句在查询过程中执行优先级别优先于聚合语句(sum,min,max,avg,count),因为它是一句一句筛选的。HAVING子句可以让我们筛选成组后的对各组数据筛选。,而WHERE子句在聚合前先筛选记录。如:现在我们想要部门号不等于10的部门并且工资总和大于8000的部门编号? 我们这样分析:通过where子句筛选出部门编号不为10的部门,然后在对部门工资进行统计,然后再使用having子句对统计结果进行筛选。

    select deptno,sum(sal) from emp 
    where deptno!='10' group by deptno
    having sum(sal)>8000; 
    复制代码

    筛选结果如下:

    DEPTNO SUM(SAL)

    —— ———-

    30 9400

    20 10875

    五、异同点

    它们的相似之处就是定义搜索条件,不同之处是where子句为单个筛选而having子句与组有关,而不是与单个的行有关。 最后:理解having子句和where子句最好的方法就是基础select语句中的那些句子的处理次序:where子句只能接收from子句输出的数据,而having子句则可以接受来自group by,where或者from子句的输入。

    展开全文
  • WHERE和HAVING子句什么区别?

    千次阅读 2019-09-12 10:27:00
    WHERE子句 HAVING子句 结合两者:WHERE和HAVING 在本文中学习何时使用WHERE和HAVING。两者都执行类似的功能,但用于不同的目的! 本文的所有示例都基于Microsoft SQL Server Management Studio和AdventureWorks...

    目录

    Where和Having有何不同?

    WHERE子句

    HAVING子句

    结合两者:WHERE和HAVING


    在本文中学习何时使用WHEREHAVING。两者都执行类似的功能,但用于不同的目的!

    本文的所有示例都基于Microsoft SQL Server Management StudioAdventureWorks2012数据库。

    WhereHaving有何不同?

    使用更高级的SQL时,可能不清楚何时使用WHEREHAVING子句才是有意义的。

    虽然看起来两个子句都做同样的事情,但它们以不同的方式做到的。事实上,它们的功能相互补充。

    • 使用WHERE子句是结果中的过滤器记录。过滤器在进行任何分组之前进行。
    • HAVING子句用于过滤组中的值。

    在我们继续之前,让我们回顾一下SQL语句的格式。它是

    SELECT
    FROM
    WHERE
    GROUP BY
    HAVING

    为了帮助保持正确,我喜欢从上到下考虑SQL语句的执行顺序。这意味着首先将WHERE子句应用于结果,然后根据GROUP BY汇总剩余的行。

    WHERE子句

    WHERE子句用于从结果中过滤行。例如

    SELECT   COUNT(SalesOrderID)
    FROM     Sales.SalesOrderDetail

    返回121,317作为计数,而查询

    SELECT   COUNT(SalesOrderID)
    FROM     Sales.SalesOrderDetail
    WHERE    UnitPrice > 200

    返回48,159作为计数。这是因为WHERE子句从结果中过滤出UnitPrice小于或等于20073,158SalesOrderDetails

    HAVING子句

    HAVING子句用于过滤GROUP BY中的值。您可以使用它们来过滤掉分组,如下

    SELECT   SalesOrderID,
             SUM(UnitPrice * OrderQty) AS TotalPrice
    FROM     Sales.SalesOrderDetail
    GROUP BY SalesOrderID
    HAVING   SalesOrderID > 50000

    但它们的真正力量在于它们能够根据聚合函数结果进行比较和过滤。例如,您可以选择总额超过10,000美元的所有订单

    SELECT   SalesOrderID,
             SUM(UnitPrice * OrderQty) AS TotalPrice
    FROM     Sales.SalesOrderDetail
    GROUP BY SalesOrderID
    HAVING   SUM(UnitPrice * OrderQty) > 10000

    由于WHERE子句的可见性是一次一行,因此无法在所有SalesOrderID中评估SUM。在创建分组后评估HAVING子句。

    结合两者:WHEREHAVING

    SQL语句同时具有WHERE子句和HAVING子句时,请记住首先应用WHERE子句,然后将结果分组,最后根据HAVING子句过滤组。

    在许多情况下,您可以将WHERE条件放在HAVING子句中,例如

    SELECT   SalesOrderID,
             SUM(UnitPrice * OrderQty) AS TotalPrice
    FROM     Sales.SalesOrderDetail
    GROUP BY SalesOrderID
    HAVING   SUM(UnitPrice * OrderQty) > 10000 
             AND SalesOrderID > 50000

    Vs

    SELECT   SalesOrderID,
             SUM(UnitPrice * OrderQty) AS TotalPrice
    FROM     Sales.SalesOrderDetail
    WHERE    SalesOrderID > 50000
    GROUP BY SalesOrderID
    HAVING   SUM(UnitPrice * OrderQty) > 10000

    如果你可以从having子句中的where子句中添加条件那么为什么甚至担心WHERE?我可以使用此查询吗?

    SELECT   SalesOrderID,
             SUM(UnitPrice * OrderQty) AS TotalPrice
    FROM     Sales.SalesOrderDetail
    GROUP BY SalesOrderID
    HAVING   SUM(UnitPrice * OrderQty) > 10000 AND LineTotal > 10

    实际上该查询会生成错误。LineTotal列不是按字段列表的组成部分,也不是总计的结果。

    为了有效,having子句只能比较聚合函数的结果或组的列部分。

    为了有效,必须将查询重写为

    SELECT   SalesOrderID,
             SUM(UnitPrice * OrderQty) AS TotalPrice
    FROM     Sales.SalesOrderDetail
    WHERE    LineTotal > 100
    GROUP BY SalesOrderID
    HAVING   SUM(UnitPrice * OrderQty) > 10000

    总结一下WHEREHAVING的区别:

    • WHERE用于在任何分组发生之前过滤记录。
    • HAVING用于在组成为组后过滤值。只有组中的列或表达式才能包含在HAVING子句的条件中。
    展开全文
  • HAVING子句和WHERE子句的不同作用

    千次阅读 2018-07-14 13:29:14
  • Having子句和Where子句

    千次阅读 2019-05-14 14:45:10
    where 子句和having子句中的区别(此文章为借鉴的总结) 1.where 不能放在GROUP BY 后面 2.HAVING 是跟GROUP BY 连在一起用的,放在GROUP BY 后面,此时的作用相当于WHERE 3.WHERE 后面的条件中不能有聚集函数,...
  • 易语言学习进阶WHERE子句源码,学习进阶WHERE子句
  • 主要介绍了在oracle中where 子句和having子句中的区别,本文通过sql语句给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
  • where 子句和having子句中的区别

    千次阅读 2019-04-08 14:34:27
    2.HAVING 是跟GROUP BY 连在一起用的,放在GROUP BY 后面,此时的作用相当于WHERE 3.WHERE 后面的条件中不能有聚集函数,比如SUM(),AVG()等,而HAVING 可以 Where和Having都是对查询结果的一种筛选,说的书面点就是...
  • where 子句的执行顺序

    2020-09-11 10:16:11
    貌似在2005之前的版本中,where子句的顺序是从前往后的。但是又貌似在2005的版本中进行了优化,所有的顺序都被统一成了以过滤能力进行排序的语句。
  • SQL where子句及查询条件语句(六)

    千次阅读 2019-10-29 20:38:46
    WHERE 子句用于提取那些满足指定条件的记录。 SELECT column_name1,column_name2 FROM table_name WHERE column_name operator value; 运算符 描述 = 等于 <>或!= 不等于 &...
  • 1.问题select department_id,avg(salary) from employees where avg(salary)>6000 group by department_id --having avg(salary)>6000 2.原因。...where 子句 group by 子句 having 子句 order by
  • Where子句常用查询条件

    千次阅读 2020-01-08 16:38:03
    IN:IN 操作符允许我们在 WHERE 子句中规定多个值。 LIKE:LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式,一般通配符使用,详情点击:通配符 IS NULL:条件字段内容不为空 EXISTS:用于检查子查询是否至少...
  • 什么聚集函数不能出现在where子句
  • Mysql中的where子句

    千次阅读 2017-04-18 21:46:37
    Mysql中的where子句 1、基本使用 在SELECT语句中,数据根据WHERE子句中指定的搜索条件进行过滤。WHERE子句在表名( FROM子句)之后给出。例如: SELECT * FROM book WHERE number=3 结果如下: 这条语句从...
  • 主要介绍了详解MySQL中WHERE子句的用法,是MySQL入门学习中的基础知识,需要的朋友可以参考下
  • 问题: 写了sql语句执行发现返回失败了,检查了半天没发现拼写错误啊。 原因: 原来where子句和order by 子句有先后顺序,必须是where子句——group by子句——order by子句—— limit。
  • 要实现这样的功能只要使用WHERE 子句就可以了,在WHERE 语句中我们设定适当的过滤条件,这样UPDATE 语句只会更新符合WHERE子句中过滤条件的行,而其他行的数据则不被修改。 执行下边的UPDATE语句: UPDATE T_...
  • Oracle中where子句详细用法

    千次阅读 2019-01-11 09:55:24
    Oracle WHERE子句简介 WHERE子句指定SELECT语句返回符合搜索条件的行记录。下面说明了WHERE子句的语法: SELECT column_1, column_2, ... FROM table_name WHERE search_condition ORDER BY column_1, ...
  • WHERE子句作用于基本表或视图,从中选择满足条件的元组; HAVING短语作用于组(通过GROUP BY子句讲查询结果按某一列或多列的值分组),从中选择满足条件的组。 WHERE子句是不能用聚集函数(COUNT,SUM,AVG,MAX,...
  • 外连接和WHERE子句

    千次阅读 2018-02-12 13:17:07
    PostgreSQL 分别支持传统的连接语法(用WHERE 子句去...我们需要注意这样一种情况:虽然列约束和连接没有关系,但列约束出现在WHERE子句和部分JOIN子句中时效果不总是相同的。 JOIN子句中的约束是在连接的过程中被处...
  • SQL语句中的Having子句与where子句之区别 ---WHERE句子作用于基本表或试图,从中选择满足条件的元组。HAVING作用于组,从中选择满足条件的组--- 在说区别之前,得先介绍GROUP BY这个子句,而在说GROUP子句前,...
  • where子句与having子句的区别

    千次阅读 2015-11-08 22:09:22
    where子句:是在分组之前使用,表示从所有数据中筛选出部分数据,以完成分组的要求,  在where子句中不允许使用统计函数,没有group by子句也可以使用。 having子句:是在分组之后使用的,表示对分组统计后的数据...
  • 本质分析:聚合函数是针对结果集操作的 ...1、where子句本身设计的目的就是用来筛选符和条件的数据。所以在where时还没有得到最终的结果集。 2、having子句是跟在group by之后的,此时已经是有结果集了,因为...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 214,696
精华内容 85,878
关键字:

where子句的作用是什么