尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

SQL4查询前两行:LIMIT限制数量,ORDER BY才定义先后

SQL4查询前两行:LIMIT限制数量,ORDER BY才定义先后 这题的基础答案很短但我原文只说“引入 limit 进行限制”少讲了一件事限制行数并不自动定义谁排在前面。1. 先完成题目要求牛客 SQL4查询结果限制返回行数。题目要从 user_profile 取两个用户的设备 ID不是取两个字段也不是把所有字段都输出。原来的基础写法保留SELECT device_id FROM user_profile LIMIT 2;这里 LIMIT 2 表示最多返回两行不足两行就返回现有行空表返回空结果。它不是“设备 ID 最小的两个”。2. 如果“前两个”有业务顺序要把它写出来若需求明确是按 id 从小到大取前两个可以写SELECT device_id FROM user_profile ORDER BY id ASC LIMIT 2;这不是擅自给原题增加“最小设备 ID”的规则而是一个明确排序的扩展。无 ORDER BY 时不保证行的先后不能依赖某次运行恰好与插入顺序一致。若排序字段会重复想稳定选出固定两行还需要唯一的补充排序键。本题示例 id 不重复但原建表语句只写 id NOT NULL没有声明主键不要由列名就断言数据库保证唯一。MySQL 官方 LIMIT 与排序说明。3. 用独立小表验证不覆盖已有数据演示表显式用主键保证 id 唯一故按 id 的次序没有同值歧义。设备 ID 刻意不随 id 递增。CREATE TABLE sql4_demo ( id INTEGER PRIMARY KEY, device_id INTEGER NOT NULL ); INSERT INTO sql4_demo VALUES (3, 100), (1, 900), (2, 500);SELECT device_id FROM sql4_demo ORDER BY id LIMIT 2;本次结果为 900、500。若按设备 ID 排序问题已经变成另一种“前两个”SELECT device_id FROM sql4_demo ORDER BY device_id, id LIMIT 2;结果为 100、500。两条查询都取两行取到谁由排序规则决定。偏移也可以直接读成“跳过多少行再取多少行”SELECT device_id FROM sql4_demo ORDER BY id LIMIT 2 OFFSET 1;跳过 id 最小的一行返回 500、100。OFFSET 是偏移量不是从1开始的页码真实分页还需考虑排序稳定性与数据更新这个小题不展开成分页系统。本次在 SQLite 3.47.2 临时内存库验证上述共同语法以及空表、单行和偏移超出行数。没有重提牛客没有用 SQLite 声称 MySQL 的扫描顺序或执行计划也是一样。记住两句话就够SELECT 决定输出哪些列LIMIT 限制多少行如果要解释“为什么是这两行”再看 ORDER BY。
返回列表