几种去重的SQL写法

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

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

几种去重的SQL写法_第1张图片

创建测试表,插入测试数据,一共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

几种去重的SQL写法_第2张图片

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

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

几种去重的SQL写法_第3张图片

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

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

几种去重的SQL写法_第4张图片

近期的热文:

《六一儿童节带给我们的思考》

《SQL查询总是先执行SELECT语句么?》

《Oracle删除字段的方式和风险,你都了解么?》

《最烧脑的珠峰高程测算过程》

《了解阿克曼转向原理的作用》

《《你就是孩子最好的玩具》学习笔记 - 第一章》

《登录缓慢的诡异问题》

《不可不知的7个JDK命令》

《一个Full GC次数过多导致系统CPU 100%的案例排查》

《ASCII码作用简介》

《Java GC的基础知识》

《Linux下的^M困惑》

《Oracle相关提问的智慧技巧》

《很久以前的一篇对初学Oracle建议的文章》

《PLSQL Developer几个可能的隐患》

《从70万字SRE神作提炼出的7千字精华文章》

《从数据误删到全量恢复的惊险记录》
《公众号600篇文章分类和索引》

你可能感兴趣的:(几种去重的SQL写法)