SQL 之 limit 基础用法

用法:limit a, b

含义:限制查询结果返回的数量

参数:

        a:查询结果的索引值(从0开始)

        b:查询结果返回的数量

举例:

limit 1:返回第1条数据

limit 10:返回前10条数据

limit 2,1:返回第3条数据

limit 3,4:返回第4,5,6,7四条数据

例1:查询成绩第二好的学生姓名和成绩

select sname, score
from stuinfo
where score = (
    select score
    from stuinfo
    order by score
    limit 1,1
)

错误答案:

select sname, score
from stuinfo
order by score
limit 1,1;

错误原因:成绩第二的同学可能不止一个,因此不能直接取表的第二行值。

扩展:不用order by 解此题

方法一:嵌套求最大

select sname, score
from stuinfo
where score = (
    select max(score)
    from stuinfo
    where score < (
        select max(score)
        from stuinfo
    )
)

 方法二:非等值连接

select s1.sname, s1.score
from stuinfo s1
join stuinfo s2
on s1.score <= s2.score
group by s1.id
having count(s1.id) = 2;

例2:查询每个年级成绩最好的学生姓名和成绩,按照年级升序排列(较难)

stu_score表

sid sname score
01 dog 90
02 cat 95
03 rabbit 85

stu_grade表

sid grade class
01 2 1
02 1 3
03 1 2
select grade, sname, score
from stu_score ss
join stu_grade sg
on ss.sid = sg.sid
where (grade, score) in (
    select grade, max(score)
    from stu_score ss
    join stu_grade sg
    on ss.sid = sg.sid
    group by grade
)
order by grade asc;

------------------------
 grade  sname    score  
------  ------  --------
   1     cat       95
   2     dog       90
------------------------

扩展:查询每个年级成绩第2好的学生姓名和成绩,要求不用order by

你可能感兴趣的:(MySQL,sql,数据库,database)