精华内容
下载资源
问答
  • Order by 默认排序方式

    千次阅读 2019-10-07 08:24:09
    --ORDER BY 默认排序方式为升序ASC:SELECT * FROM [TABLE_NAME] ORDER BY [COLUMN_NAME] ESC;--升序DESC:SELECT * FROM [TABLE_NAME] ORDER BY [COLUMN_NAME] DESC; 转载于:...
    --ORDER BY 默认排序方式为升序ASC:SELECT * FROM [TABLE_NAME] ORDER BY [COLUMN_NAME] ESC;
    --升序DESC:SELECT * FROM [TABLE_NAME] ORDER BY [COLUMN_NAME] DESC;

     

    转载于:https://www.cnblogs.com/tanjiyuan/p/11261289.html

    展开全文
  • 问题原因: user表默认: 表结构信息: 第一个sql:select UID,USER_NAME from user;...查找的都说,与数据库表引擎有关:但在我这个问题状态下...myisam 默认按照物理存储顺序排序 2、建议: 必须养成追加写o...

    问题原因:

    user表默认:

    表结构信息:

    第一个sql:select UID,USER_NAME from user;

    查询结果:


    第二个sql:select * from user;

    查询结果:

    查找的都说,与数据库表引擎有关:但在我这个问题状态下未能验证

    innodb 默认按照主键自增排序

    myisam 默认按照物理存储顺序排序

    2、建议:

    必须养成追加写order by  的习惯,因为有些情况下,即使加了order by 也可能出现排序不稳定的情况。

    展开全文
  • MySQL查询默认排序order by排序

    千次阅读 2018-08-05 18:41:46
    之前一直认为,如果在sql语句中没有加特定的order by条件,那么查询出来的数据就应该是按照主键(即插入顺序)排序的。但是,今天在项目中拿数据时发现并没有按照“我以为”的方式排序,就研究了下,发现按照什么...

    最近发现一个平时经常忽略的问题,就是MySQL查询出来的结果的排序问题。

    之前一直认为,如果在sql语句中没有加特定的order by条件,那么查询出来的数据就应该是按照主键(即插入顺序)排序的。但是,今天在项目中拿数据时发现并没有按照“我以为”的方式排序,就研究了下,发现按照什么方式排序与所查询的字段、索引等都有关系的。

    因为项目中基本都使用InnoDB引擎,所以就不考虑其他引擎了,自己测试了下:

    首先创建测试表(随便写了下sql语句,不要细究什么没有判断表是否存在的问题,哈哈)

    小心机一下,字段尽量不要允许为NULL

    CREATE TABLE `test` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `name` varchar(100) DEFAULT '' NOT NULL,
      `age` int(5) DEFAULT 0 NOT NULL,
      PRIMARY KEY (`id`),
      KEY `age` (`age`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

    插入一些测试数据

    INSERT INTO test(name, age) VALUES('张三',2);
    INSERT INTO test(name, age) VALUES('李四',20);
    INSERT INTO test(name, age) VALUES('王五',50);
    INSERT INTO test(name, age) VALUES('赵刘',33);
    INSERT INTO test(name, age) VALUES('奔驰',19);
    INSERT INTO test(name, age) VALUES('宝马',7);
    INSERT INTO test(name, age) VALUES('奥迪',21);
    INSERT INTO test(name, age) VALUES('雷车',22);
    INSERT INTO test(name, age) VALUES('兰博',18);
    INSERT INTO test(name, age) VALUES('宾利',99);
    INSERT INTO test(name, age) VALUES('夏利',67);

    测试1:无条件查询前5条记录

    SELECT * FROM test LIMIT 5

    结果如下

    测试2:无条件查询前5条age

    select age from test limit 5;

    测试3:无条件查询前5条记录,结果集根据age排序

    select * from test order by age;

    分别使用explain命令对这三条sql语句进行分析:

    可以看到:

    第1、3两条select * 语句的type都是ALL,说明进行的是全表扫描,没有用到索引。(Using filesort情况该如何优化?)

    第2条select age 语句的type是index,说明使用的索引进行的扫描;且key是age,说明使用的索引列是age。

     

    总结:

    如果在sql语句中不指定order by排序条件,那么得到的结果集的排序顺序是与查询列有关的。因为不同的查询列可能会用到不同的索引,从而导致顺序不同。根据上面的情况:查询所有列时是根据id排序的;只查询age列时是根据age列(age列是索引)排序的;而加上order by age后,因为待排序内容不能由所使用的索引直接完成排序,所以要进行文件排序,具体原因就不深究了。

    看网上大神的说法是:没有条件的情况下,数据库默认排序顺序是不好确定的,也不应该决定于什么因素,不同的数据库实现不同.只能用order by 来限定。

    反正,不要迷信mysql默认会按照你以为的顺序排序,想要排序就先给你想要排序的字段创建索引(提高效率),然后再order by这个字段进行排序。

     

     

    展开全文
  • oracle中如何更改order by默认排序

    千次阅读 2016-03-17 15:21:58
    oracle中如何更改order by默认排序? 直接看问题: select * from scott.emp p order by p.job; 运行结果为: 通过order by 出来的排序结果以此为:ANALYST、CLERK、MANAGER、PRESIDENT、SALESMAN... 需求:...

    oracle中如何更改order by的默认排序?

    直接看问题:

    select * from scott.emp p order by p.job;

    运行结果为:



    通过order by 出来的排序结果以此为:ANALYST、CLERK、MANAGER、PRESIDENT、SALESMAN...


    需求:

    现要求排序结果为MANAGER为第一个显示、CLERK为第二个显示,其他默认排序


    方法一:

    通过union all  分别查询后合并实现。

    select *
      from (select * from scott.emp where job in 'MANAGER' order by job)
    union all
    select *
      from (select * from scott.emp where job = 'CLERK' order by job)
    union all
    select *
      from (select * from scott.emp  where job not in ('MANAGER', 'CLERK') order by job)
             
             


    运行结果为:



    备注:

    1、这里应该采用union all 进行并集,不应该使用union。因为union,会对结果集进行排序,而union all 不排序。

    2、这里的子查询中如果有order by 语句,不能直接使用union all 进行并集,会报语法错误。解决方案是将结果集作为一个新的表,查询后再并集,即可。


    方法二:

    虚拟出来一个字段,规定排序规则,依据新的排序规则进行排序即可。

    select 
      p.*,
      case  to_char(p.job)
        when 'CLERK' then '2'
        when 'MANAGER' then '1'
        else '999'
       end  neworder 
    from scott.emp p 
    order by neworder,p.job


    运行结果:






    展开全文
  • oracle 无order by , 默认排序问题

    千次阅读 2013-03-27 11:18:37
    要排序必须加上order by  因为oracle是按块进行读取数据的  如果数据按顺序存储,则可能使读取出来的数据是按顺序的,给用户误解为默认排序 oracle没有进行任何排序操作,rowid表示的是数据存放的数据块内部...
  • 群友问:请教一个问题,mysql 默认排序问题,当sql 语句 的排序没有指定 主键(id)的时候是按着什么规则排序的呢? 这个 sql 语句 当 hit_count = 0 和 uptime = 0 时 的数据和 跟 limit_count...
  • 参考网上资料, 感谢前辈铺路。 先说结论:  1....  2.... 2.1 innoDB引擎: 默认查询按照id正序排序 ... 2.2 myISAM引擎: ...mysql: 已明确查询的默认排序方式为id或者插入顺序的一种 1. innoDB引擎  1.1 创建...
  • 在使用order by语句进行查询结果排序时,不同的数据库对于被排序字段数据行为null的情况,处理方式有所不同,这里我们主要考虑oracle和MySQL数据库。 首先我们直接给出结论: leeyee 写道 【Oracle 结论】 ...
  • 各个数据库的无order by时的默认排序

    千次阅读 2018-10-08 15:41:50
    oracle对无order by的语句返回的结果不进行排序,oracle此时的处理方式是按照数据的物理存储顺序来读取数据。因为rowid是每行数据的地址,所以有时候看起来会像是使用rowid排序的。但这个顺序是可能被打乱的,在表的...
  • oracle 默认排序问题 和 order by ,rowid

    千次阅读 2014-11-12 13:57:48
    oracle数据库是没有默认排序的,要排序必须加上order by  因为oracle是按块进行读取数据的,如果数据按顺序存储,则可能使读取出来的数据是按顺序的,给用户误解为默认排序 oracle没有进行任何排序操作,rowid...
  • SQL ORDER BY自定义排序规则

    千次阅读 2018-12-09 22:51:21
    默认SQL语句中的order by会根据指定字段的内容按照默认规则排序,比如说我现在有这样一个表: id level name 2 中 刘德华 3 低 张惠妹 1 高 陈冠希 可以使用下面的语句来自定义排序...
  • 数据库排序order by

    千次阅读 2019-06-10 23:01:51
    order by 默认采用升序(asc),排序,可以手动设置为降序(desc) 如果存在where子句,那么order by必须放到where语句后面 单个字段排序 在emp表中查询ename和sal字段,并将sal按照升序排列 select ename,sal from...
  • 之所以要在单表头的时候,自己写一个过滤器,是因为angularjs内置的orderBy在单表头的时候默认给我升序排序了,而他的排序又只是在视图层面更新,不会更新我的scope域中的数据,可是我需要获取第一行的值,使那一行...
  • order by排序的用法

    万次阅读 多人点赞 2018-09-21 05:43:40
    一、order by 1 其实1表示第一个栏位,2表示第二栏位; 依此类推,当表中只有2个栏位时,oder by 3就会出错,这个跟order by 列名没有什么区别,不过在特殊情况下还是很有用的. select owner,table_name,tablespace_...
  • SQL排序子句 ORDER BY

    千次阅读 2018-05-10 10:57:18
    SQL排序子句 ORDER BYORDER BY : 排序语句,默认升序,DESC降序!
  • SQL 检索排序数据(ORDER BY子句)

    千次阅读 2018-09-25 09:18:52
    ORDER BY 子句用于对结果集按照一个列或者多个列进行排序。 ORDER BY 子句默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 ...升序排序(从小到大)为ORDER BY 默认排序方式,也可以在SQL...
  • mysql order by 中文排序

    千次阅读 2018-11-10 11:49:54
    【中文排序】mysql order by 中文排序 1. 在MySQL中,我们经常会对一个字段进行排序查询,但进行中文排序和查找的时候,对汉字的排序和查找结果往往都是错误的。 这种情况在MySQL的很多版本中都存在。 如果这个...
  • order by 排序原则

    千次阅读 2018-09-09 23:35:16
    order by 默认不是根据拼音排序的 ,是根据ascii码排序的 如果按照拼音排序的话这边“大”应该是num=4中最大的,由此可以看到order by 是靠ascii码排序的。 所以一般是数字->字母->中文 按拼音...
  • 数据库:order by排序语句的用法

    万次阅读 多人点赞 2019-03-23 17:45:31
    数据库中常用order by关键字对结果集进行排序,又可使用desc和asc来进行指定规则的排序,那么desc和asc有什么作用和差异呢,通常又如何使用,可以看看这篇文章。 语法 selectcolumn_name,column_namefromtable_...
  • 详细介绍了MySQL的Order By排序的底层原理与filesort排序,以及排序优化手段。
  • 问题:laravel框架开发中遇到添加文章后列表中需要排序(sort字段,可以为空,都是数字),从小到大asc排序?...orderBy(DB::Raw('case when sort is null then 99999999999 else sort end'),'asc') ...
  • mysql默认排序规则

    万次阅读 2016-08-07 21:13:49
    今天遇到一个问题,有一个 Select 语句没有加 “Order By”,返回的数据是不...* 不能依赖 MySQL 的默认排序 * 如果你想排序,总是加上 Order By * GROUP BY 强加了 Order By (这与标准语法冲突,如果要避免,请使
  • ORACLE中排序ORDER BY

    千次阅读 2016-10-21 21:08:02
    排序,有时候需要对查询的结果集进行排序,这个时候就需要使用ORDER BY关键字,按照什么来排序,根据要求排序就可以 ...(4)ORDER BY默认是升序(正序)排序,从小到大排序(关键字是ASC),其实也可以指定按照

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 153,700
精华内容 61,480
关键字:

orderby默认排序