09,select查询子句——having筛选

需要注意的是,having不是只能对结果集中的数据进行操作,其也可以通过原表数据进行查询筛选。

要好好看一下这道综合题的练习,对于count,having的使用,以及逻辑判断的结果都有涉及。燕十八mysql-21

比如,有一个列字段名为score,那么score<60要么返回0,要么返回1。而对于前一篇中所讲,count(arg)中arg等于1或0,结果都是一样的(来一行数一个0,或者来一行数一个1)。。。

一、查询过程。

  • 1、如果goods表中有a/b/c/d/e列,那么where条件中用到的列也只能是abcde之一。
    如下图,用where进行筛选,也只能对于abcde进行筛选。
  • 2、在经过筛选以及列之间的计算以后,得到了一个结果集,结果集中有新的列xy
  • 3、对于已经用where筛选过的结果集,再用having筛选一下,得到的就是最终结果集。

二、举个例子

回顾之前做过的查询:找到店铺价格比市场价格便宜200的商品。07,sql 的查询模型(很重要)

对于第一步的解释:where只能作用于表中已有的字段。

其中最后的语句,我们用的是where market_price- shop_price >200.而不是where discount > 200(会出错)

解释原因是,where只能作用于goods表中已有的列,因此用where market_price- shop_price >200才不会出错。

对于第二步的解释:经过where筛选以后,会得到一个中间的结果集

这里,我们令where=1,那么经过筛选的结果集中,有goods_id,market_price,shop_price以及discount字段。

对于第三步的解释:having对中间的结果集进行筛选。

这里可以直接用having对中间结果集discount进行筛选了。

三、查询实例

3.1、把列字段看成变量,比如,查询商店积压的总贷款(每个商品积压贷款(商品数乘以商品价格)之和),查询每个栏目下的物品的积压贷款(分组即可)

利用sum。

继续查询,如有对结果集进行操作。

3.2、查询出每个商品栏目的积压贷款且筛选出积压金额>20000的栏目

对结果集进行操作,就要利用having了。(注意,因为是要对结果集进行操作,那么having应该加在上面语句中的group语句后面才是

3.3、having与where使用再次对比

你可能感兴趣的:(09,select查询子句——having筛选)