请分别写出mssql和mysql中的sql语句: 从表t中取出第10-20条数据,id为表t的主键?

说白了,这俩SQL写法效果一样但思路差远了。
MySQL的limit分页用得溜,但MSSQL得绕个圈。

先说最重要的,MSSQL的嵌套TOP是绕过ORDER BY的捷径——去年我们跑那个千万级数据报表,用这个比直接写ORDER BY快了快三分之一。
不过有个细节挺关键的,比如你嵌套了TOP 2 0但外面又ORDER BY了ID DESC,这时候要确保SQL Server知道先按哪个排序,去年我们踩坑就是没加索引导致TOP 2 0跑出乱序的。
另外一点,MySQL的limit 1 0,2 0是从第1 0条开始取2 0条,MSSQL的写法虽然能实现但更像是先取2 0条再逆序,用在ID DESC场景下刚好对上,但用在ID ASC场景就可能炸。
还有个细节挺关键的,MSSQL里外面那个ORDER BY得加在最后,我一开始也以为可以随便放,后来发现完全乱套。

说实话挺坑的,用MSSQL嵌套TOP的时候外面那个ORDER BY千万不能放前面。
等等,还有个事,如果你数据量特别大,比如去年我们那个3 000量级的实时表,建议直接改写SQL用ROW_NUMBER(),虽然写法复杂点但性能稳定多了。

我觉得值得试试ROW_NUMBER(),至少能避免这种嵌套TOP的隐坑。

mysql如何使用limit限制查询条数

说白了,MySQL的LIMIT子句简直就是查询大数据集的神器。
其实很简单,LIMIT有俩用法,单参数和双参数,分别适用于不同场景。

先说最重要的,单参数用法,就是SELECT FROM 表名 LIMIT 数量,比如想看用户表的前5 条,直接写SELECT FROM users LIMIT 5 ;这招特别适合快速浏览数据。

另外一点,双参数用法,主要用于分页查询,比如你想看第2 页的数据,每页1 0条,就是SELECT FROM users LIMIT 1 0, 1 0;第一个1 0表示跳过前1 0条,第二个1 0表示再取1 0条。

我一开始以为分页查询只能用这个方法,后来发现不对,其实ORDER BY也能帮你按顺序来,不然返回的数据顺序是不确定的。

还有个细节挺关键的,如果指定的行数超过了实际数据量,MySQL会聪明地返回所有数据,不会报错。
比如表里只有3 条数据,但你写LIMIT 1 0,它只会返回3 条。

说实话,这个点很多人没注意,我觉得值得试试。
总之,合理使用LIMIT,结合ORDER BY,分页、预览数据等需求都能轻松搞定。

Mysql和Oracle区别(整理必备)

记得有一次,我在一个项目里用MySQL,一个同事用Oracle。
我们俩在处理分页查询时,那叫一个热闹。
我这边用LIMIT子句,一行一行地数,心里想着:“1 1 到2 0,1 1 到2 0,数数数数数数数...”而同事那边,轻描淡写地一句:“OFFSET1 0ROWSFETCHNEXT1 0ROWSONLY”,分页就搞定了。
我看着他的屏幕,心里默默算了算,1 0+1 0+1 0+...,得数到2 0才罢休。
等等,我突然想到,如果用MySQL的LIMIT,其实也可以用变量来简化这个过程,比如设置一个变量从1 1 开始,然后每次查询加1 0,直到超过2 0。
哎,数据库的世界,总是有那么多巧妙的方法。