SQL基础⑨

1、删除重复值(关键词DISTINCT)

SELECT   COUNT(DISTINCT    <列名>)

   FROM    <表名>;

   这时DISTINCT必须写在括号内。使得在计算行数之前删除某列中的重复数据。

   所有的聚合函数都可以使用DISTINCT。

2、GROUP  BY子句

SELECT    <列名>,     COUNT(*)

   FROM    <表名>

 GROUP    BY   <列名>;

执行结果为多行,因为GROUP   BY 子句时,会将表中的数据分为多个组进行处理。

   在GROUP   BY 子句中指定的列称为聚合键或者分组列。由于能够决定表的切分方式,所以是非常重要的列。

    GROUP   BY子句的书写位置有严格要求,一定要写在FROM语句之后(如果有WHERE子句的话就写在WHERE子句之后)。如果无视子句的书写顺序,SQL就一定会无法正常执行。

(子句的书写顺序:1.SELECT→2.FROM→3.WHERE→4.GROUP  BY)

  (1)聚合键含有NULL

此时,结果会以“不确定”行(空行)的形式表现出来。

(2)使用WHERE子句时

SELECT  <列名1>,   <列名2>,   <列名3>,    ……

   FROM   <表名>

 WHERE 

  GROUP  BY  <列名1>,   <列名2>,   <列名3>,     ……

     像这样使用WHERE子句进行聚合处理时,会先根据WHERE子句指定的条件进行过滤,然后再进行聚合处理。

(3)与聚合函数和GROUP    BY子句有关的常见错误

①在SELECT中书写了多余的列

使用聚合函数时,SELECT子句中只能存在以下三种元素:常数、聚合函数、GROUP  BY子句中指定的列名(即聚合键)。

②在GROUP   BY 子句中写了列的别名

        在SELECT子句中的项目可以通过AS关键字来指定别名,但是在GROUP  BY子句中是不能使用别名。这是由于SQL语句在 DBMS内部的执行顺序造成的——SELECT子句在GROUP   BY子句之后执行!

③将GROUP  BY子句的结果排序

GROUP  BY子句的结果是随机排序的。当你再次执行同样的SELECT语句时,得到的结果的顺序可能会按照完全不同的顺序进行排列。【通常SELECT语句执行结果的显示顺序都是随机的。因此想要按照某种特定顺序进行排序的话,需要在SELECT语句中进行指定。】

④在WHERE子句中使用聚合函数

实际上,只有SELECT子句、HAVING子句和ORDER  BY子句中能够使用COUNT等聚合函数。

【WHERE子句只能指定记录(行)的条件,而不能用来指定组的条件。】

3、HAVING子句

SELECT   <列名1>,    <列名2>,   <列名3>,   ……

   FROM    <表名>

 GROUP     BY   <列名1>,    <列名2>,    <列名3>,     ……

HAVING     <分组结果对应的条件>;

       HAVING子句必须写在GROUP  BY 子句之后。

(1)构成要素

      HAVING子句和包含GROUP  BY子句时的SELECT子句中一样,能够使用的要素有一定的限制(限制内容想同)。HAVING子句中能够使用的3种要素:常数、聚合函数、GROUP  BY子句中指定的列名(即聚合键)。

(2)HAVING 子句与WHERE子句的选择条件

【既可以写在HAVING子句当中,又可以写在WHERE子句当中的条件称为聚合键所对应的条件。】

聚合键所对应的条件应该书写在WHERE子句中。理由:

① 子句的作用不同。

HAVING子句是用来指定“组”的条件,“行”对应 的条件还是应该写在WHERE子句中。这样可以使得SELECT语句分清两者各自的功能,容易理解。

②执行速度。

通常情况下,为了得到相同的结果,将条件写在WHERE子句子句中要比写在WHERE子句中的处理速度更快,返回结果所需时间更短。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值