1
疑问
在Oracle数据库中,SELECT语句里的UNIQUE和DISTINCT是否存在区别?答案如下:
没有区别!
2
查阅资料
-
直奔官方文档,我查看了Oracle 12.2的《SQL Language Reference》,地址为https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sqlrf/SELECT.html#GUID-CFA006CA-6FF1-4972-821E-6996142A51C6,描述如下:
图片来自Oracle官方在线手册截图 上述信息主要捕获到DISTINCT和UNIQUE是同义词即可。
-
除了官方文档外,我查看了
-
PSOUG的资料,资料地址为http://psoug.org/snippet/SELECT-Get-UNIQUE-DISTINCT-values_666.htm,描述如下:
图片来自PSOUG截图 接下来是Stackoverflow的内容,资料地址为https://stackoverflow.com/questions/6772451/difference-between-select-distinct-and-select-unique/6772498,描述如下:
图片来自Stackoverflow截图 下面将通过查看执行计划的实验来验证。
3
实验验证
以下操作将分别验证查询语句中使用DISTINCT和UNIQUE时的执行计划,数据库版本为Oracle 12.2。
创建T1表,同时插入5条数据库,其中有2条为重复数据。
验证T1表数据,分别使用DISTINCT和UNIQUE进行查询,得到的为同样的结果。
查看使用DISTINCT时的执行计划。
查看使用UNIQUE时的执行计划,和上面DISTINCT的执行计划一致。
4
结论
综上,在Oracle中DISTINCT和UNIQUE没有区别,二者为同义词,DISTINCT遵循ANSI标准,UNIQUE是Oracle特定的用法,从移植角度考虑,使用遵循ANSI标准的DISTINCT是一个更好的选择。
参考资料
Oracle SQL Language Reference
PSOUG.ORG
Stackoverflow.COM
secooler【唯一】DISTINCT与UNIQUE的“区别”