专栏首页bisal的个人杂货铺几种去重的SQL写法

几种去重的SQL写法

墨天轮社区的每日一题(https://www.modb.pro/test),可以说是个小而精的专栏,利用碎片时间,就可以学习知识,非常推荐。

这是其中一道,考的就是SQL语法,基础中的基础,但乍一看,或许不是所有人能直接给出正确答案,不信你试试?

创建测试表,插入测试数据,一共4条,2条id=1,1条id=2,1条id是空,

SQL> create table t1(id number);
Table created.


SQL> select rownum, id from t1;
 ROWNUM     ID
-------- ---------
   1         1
   2         1
   3         2
   4

选项A,按照id列执行group分组,会按照列id的值进行分组操作,包括空值,因此这个操作,是正确的选项,

SQL> select id from t1 group by id;
  ID
----------
   1


   2

选项B,他使用的是UNION,略微迷惑,但他是正确选项,

SQL> select id from t1 union select null from dual;
  ID
----------
   1
   2

UNION和UNION ALL的区别,UNION会做去重,UNION ALL则会返回所有的数据,

The UNION operator returns only distinct rows that appear in either result, while the UNION ALL operator returns all rows.

这就很清楚了,虽然select id from t1返回了所有数据,但通过使用UNION,就可以达到去重,而且连接UNION的可以是select 1 from t1,可以是select id from t1,只需要在数据类型上一致即可,

SQL> select id from t1 union select 1 from t1;
  ID
----------
   1
   2




SQL> select id from t1 union select id from t1;
  ID
----------
   1
   2

选项C,是正确选型,可能有些朋友,很少见到unique的用法,其实他是Oracle的SQL风格支持的旧语法,在Oracle以外的数据库,很可能就报错了,

SQL> select unique id from t1;
  ID
----------
   1


   2

选项D,是正确选项,返回不重复记录,是distinct标准用途,distinct和unique的区别,就在于distinct是ANSI SQL标准语法,unique只在Oracle中支持,在其他的方面,两者是相同的,

SQL> select distinct id from t1;
  ID
----------
   1


   2

要是深挖下distinct和unique的用法,如下这个算是要注意的,如果表中无clob类型的字段,用distinct *和unique *都可以的,

http://sqlfiddle.com/#!4/ce01b/51

但是表中若存在clob类型的字段,此时用distinct *和unique *,就会报错,

http://sqlfiddle.com/#!4/97d3e/26

如果指定distinct和unique非clob类型的字段,就可以正常执行,

http://sqlfiddle.com/#!4/97d3e/25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • resource角色对quota表空间限额的影响

    前两天,看到论坛中有位兄弟说设置了用户对表空间的quota限额,但仍可以插入超过限额大小的数据量到表空间。

    bisal
  • 【Oracle】-【ROWNUM与索引】-索引对ROWNUM检索的影响

    http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:32812348052

    bisal
  • dbms_xplan.display_awr方式获取执行计划的实验和之前的误导

    《查看Oracle执行计划的几种常用方法-系列1》(http://blog.csdn.net/bisal/article/details/38919181)这篇...

    bisal
  • 关于修改数据库参数的测试(r3笔记第18天)

    在性能调优的时候,会发现很多类型的问题,有些问题可能通过使用隐含参数就能够解决,不过这种变更需要特别注意,因为做隐含参数的变更无形中会影响到其它的sql语句运行...

    jeanron100
  • oracle 数据库常用命令

    1、su – oracle 不是必需,适合于没有DBA密码时使用,可以不用密码来进入sqlplus界面。 2、sqlplus /nolog 或sqlplus s...

    赵腰静
  • 数据库ORA-03113排查

    Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64...

    孙杰
  • SQL | 数据分析面试必备SQL语句+语法

    前些天在网上冲浪的时候看到一个案例咨询,问说世界500强的数据分析要不要去,评论区一片爆炸:“楼主能分享一下文科生怎么转行做数据分析吗??”、“SQL、pyth...

    咸鱼学Python
  • MySQL 数字辅助表去重、排序、行转列

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.n...

    用户1148526
  • 性能优化-慢查询的优化案例

    可以看到显示的执行计划,并不是很高效,可以拖慢服务器的效率,如何优化了? 创建索引

    cwl_java
  • 星巴克也开始送外卖啦luckin coffee通过小程序占据优势

    在瑞幸咖啡的威胁下,星巴克的业绩逐渐下滑,在这个情况下星巴克与阿里巴巴达成战略合作。一直注重体验营销的品牌现在才加入外卖和电商到底会不会被5个月开525家店的咖...

    微购儿小程序

扫码关注云+社区

领取腾讯云代金券