distinct sql用法_几种去重的SQL写法

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

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

1065c2c0c9f8ec3074666239b930e491.png

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

f1ddca3d167f85db001cba08211add7d.png

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

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

6051647eb4bfb329daf185f079ab5068.png

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

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

3da7b846cc7b181313f2c80cd1354410.png

近期的热文:

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

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

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

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

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

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

《登录缓慢的诡异问题》

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

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

《ASCII码作用简介》

《Java GC的基础知识》

《Linux下的^M困惑》

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

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

《PLSQL Developer几个可能的隐患》

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值