zoukankan      html  css  js  c++  java
  • SQL 基础 :Distinct 和 order by 关系。(Distinct 自动排序)

      今天本来是测试一段代码,然后用到Distinct关键字,查看执行计划之后,突然发现过程中有对表进行sort! 上网搜索和加之验证得出如下结果:

       结论:

      1.使用distinct 关键字后会对distinct后面用到的关键字进行默认的升序排序.

      2.可以使用order by 来改变排序规则.

      3.使用distinct后,出现在order by 中的字段必须要写在 SELECT 句中,非充要条件。


      求问各大神:如何消除distinct自动排序,及为什么要进行排序,还有distinct是如何做到消除重复列的!

      另:

      

    //Wrong SQL
    SELECT DISTINCT field_1,field_2 FROM Table ORDER BY field_0
    //Reason
    ORDER BY 子句与 (OrderIndex) DISTINCT 冲突
    //Solve Method
    SELECT field_1,field_2 FROM Table GROUP BY field_1,field_2 ORDER BY Min(field_0)

      Group by 语句好像也要自动进行排序,求真相???

      


      测试数据如下:

     1 CREATE TABLE Student (id int identity(0,1), name nvarchar(20) ,course nvarchar(20) , score int)
     2 DROP TABLE Student
     3 insert into Student values
     4 ('张三','语文',81),
     5 ('张三','数学',75),
     6 ('李四','语文',76),
     7 ('李四','数学',90),
     8 ('王五','语文',81),
     9 ('王五','数学',100),
    10 ('王五','英语',90)

       执行  SQL : SELECT   distinct S.name ,S.score FROM Student S ;

       查看执行计划结果如下:

      可以看到在sort阶段,分别对name和score两个字段进行升序排序!


      执行  SQL : SELECT   distinct S.name ,S.score FROM Student S ;

      查看执行计划结果如下:

       对score 和name 分别 降序和升序排序!


      执行  SQL :SELECT   distinct S.name ,S.score FROM Student S order by S.score desc ,S.course;

      查看执行计划结果如下:

      解析成功,但执行错误!

      

  • 相关阅读:
    如何编写一个有效的缓存
    [深入Maven源代码]maven绑定命令行参数到具体插件
    java.util.ServiceLoader的用法
    非阻塞算法-栈
    非阻塞算法-简单的计数器
    Excelbatis-一个将excel文件读入成实体列表、将实体列表解析成excel文件的ORM框架,简洁易于配置、可扩展性好
    教你如何迭代地遍历二叉树
    [开源项目]Shell4Win,一个在Windows下执行shell命令的解释器
    [LeetCode]Single Number II
    CAS5.3服务环境搭建
  • 原文地址:https://www.cnblogs.com/alexlo/p/2757333.html
Copyright © 2011-2022 走看看