在数据库中很多地方都会用到,比如当你数据库查询记录有几万、几十万时使用limit和top查询效率非常快,只需要查询出你需要的数据就可以了·再也不用全表查询导致查询数据库崩溃的情况。
例如:写一个 SQL 查询语句,获取表test中score第二高的值
id | score |
---|---|
1 | 100 |
2 | 200 |
3 | 400 |
解法1:利用top,mysql无此语法不适用
思路是先降序取前两个,然后升序取一个
select top 1 score
from (select distinct top 2 score
from test order by score desc )
order by score asc
解法2:利用limit来限制数据显示,mysql可用
思路是先倒序,直接从第二个开始取,只取一个值
select distinct score
from test
order by score desc
limit 1,1
解法3:利用max即可,此方法仅适合第一和第二,多了别用
利用一个嵌套查询就解决了
select max(score)
from test
where score <
(select max(score)
from test)
注意:以上方法没有考虑重复值的情况
此时应使用distinct来唯一化数据
解法4:在考虑存在空值集和重复值的情况
此方法充分体现了SQL的执行顺序!!
SELECT distinct score as scoreone
FROM test
UNION ALL (SELECT NULL as scoreone )
ORDER BY scoreone DESC
LIMIT 1 ,1
原创内容未经作者同意,严禁转载