MYSQL 倒序排列

说实话,我刚接项目的时候也遇到过这个trick,用ORDER BY和DESC来颠倒顺序。
我记得一位老人争论为什么当他按创建时间查看数据时,最近创建的项目出现在顶部。
看SQL语句的时候迷惑了半天,后来发现我把DESC写成ASC了。
这件事给了我深刻的教训。
现在你必须在写 SQL 之前默念三遍。
使用 DESC 进行降序排列,使用 ASC 进行升序排列。

有趣的是,LIMIT后面的参数中有一个特别容易被忽视的细节。
例如,如果使用LIMIT 5 , 1 0,则实际上从第5 条记录开始检索1 0条数据。
起初我理解为“取前5 项,然后取后1 0项”。
但调试了半天,发现数据不对。
后来查了官方文档才知道这就是“偏移量,返回数”模式。
我个人从未在这个领域运行过 PostgreSQL,但我记得 Oracle 人员称其为“行偏移,返回行号”。
这看起来相当尴尬。

说到分页,有一个现实生活中特别有代表性的例子。
我们希望我们的系统以创建时间的倒序顺序显示用户操作的历史记录,但我们的要求已经改变。
它应该显示“最近 1 0 个操作的历史记录”,但也显示“标记为未读”和“过去 2 4 小时内创建”。
这导致 SQL 被编写为 SELECT FROM user_actions WHERE unread=1 AND createtime > NOW()
INTERVAL 2 4 HOUR ORDER BY createtime DESC LIMIT 1 0将 LIMIT 与反向结合起来会使事情变得更加复杂。

我记得数据是关于 X 的。
但是,您可能想检查 MySQL 对 LIMIT 性能的影响。
通常,如果您的表非常大并且您只是使用 LIMIT 进行分页,则每次都必须扫描整个表并进行选择。
我们在一个千万级订单的订单上做到了这一点,每个页面的加载时间从 1 00 毫秒跃升至 5 秒。
后来改用主键ID+WHERE条件进行分页,性能立即提升。
不过这种优化要看具体场景,并不是万能的。

个人认为,理解逆序和LIMIT最重要的是多练习。
如果你无事可做,就写一些测试 SQL,比如 SELECT FROM Orders WHERE status='pending' ORDER BY amount DESC LIMIT 3 , 5 看看实际返回的结果是否正确。
有时你会发现DESC和LIMIT的组合可以解决许多困难的需求,例如“按需获取数据”。

sql中怎么倒序查询?

是的,是的,你说得对。
要在 SQL 中排序,请使用 desc 反转顺序。
一般必须和orderby一起使用。
请参阅:
sql 根据年龄从学生的顺序中选择;
这意味着,找到学生列表并按年龄倒序对他们进行排序。
desc 表示逆序。
记住这一点。

此外,可以有多个排序字段,以逗号分隔。
例如:
sql select ename, job, sal from emp order by job desc, sal desc;
这是查看员工名单,先按职务倒序,再按工资倒序。
先看作品,再看作品是否一样。

此外,默认为升序。
不需要写ASC,系统默认为升序。
写成asc就可以了,比较清楚一点。

例如:
sql select ename, sal from emp order by sal asc;
这是为了审查员工名单并按工资升序排列。
萨尔长大了。
它无需添加 asc:
sql 即可工作 select ename, job, sal from emp where job='MANAGER' order by sal;
这些是职位为经理的员工,按工资升序排列。
系统默认是升序,不需要写asc。

嗯,也许就是这样。