计算机应用

导航

第10周 数据排序与WHERE条件过滤

第10周 · 数据排序与 WHERE 条件过滤

上週学了 SELECT 看数据。这周加两个"筛选+排列"的能力:WHERE 决定哪些行进来,ORDER BY 决定以什么顺序显示。两者经常一起用。


一、知识点:WHERE 的作用位置

SELECT 的执行顺序是:FROM 取表 → WHERE 筛行 → SELECT 定列 → ORDER BY 排序

WHERE 在"行"层面过滤,不符合条件的整行都不会进入结果。


二、操作教程:比较运算

SELECT * FROM student WHERE sage > 18;          -- 年龄大于18
SELECT * FROM student WHERE sdept = '计算机系';  -- 等于(文本加引号)
SELECT * FROM student WHERE sage <> 18;          -- 不等于(也可写 !=)
SELECT * FROM student WHERE sage >= 19 AND sage <= 21;

比较运算符:= > < >= >= <= <>(不等于)。文本值必须单引号,数字不用。


三、操作教程:范围查询 BETWEEN … AND

-- 年龄 18~20(含两端)
SELECT sname FROM student WHERE sage BETWEEN 18 AND 20;

等价于 sage >= 18 AND sage <= 20,但 BETWEEN 更简洁,且两端都包含


四、操作教程:集合查询 IN( )

-- 查计算机系或软件工程系的学生
SELECT * FROM student
WHERE sdept IN ('计算机系', '软件工程系');

-- 等价于
SELECT * FROM student
WHERE sdept = '计算机系' OR sdept = '软件工程系';

IN 适合"等于多个离散值"的场景,比一堆 OR 清爽。


五、操作教程:NULL 值判断(重点)

NULL 表示"未知/没填",不能用 = 判断,必须用 IS NULL

SELECT * FROM student WHERE sage IS NULL;        -- 年龄没填的
SELECT * FROM student WHERE sage IS NOT NULL;    -- 年龄填了的

易错:WHERE sage = NULL错误写法,永远查不到(NULL 不等于任何值,包括它自己)。记住:判空用 IS NULL


六、知识点:逻辑组合 AND / OR / NOT 与优先级

运算符 含义
AND 同时满足
OR 满足其一
NOT 取反

优先级NOT > AND > OR。混合用时用括号 () 明确优先级,避免歧义。


七、操作教程:ORDER BY 排序

SELECT * FROM student ORDER BY sage ASC;     -- 年龄升序(默认就是 ASC)
SELECT * FROM student ORDER BY sage DESC;    -- 年龄降序

-- 多列排序:先按年龄降序,年龄相同再按学号升序
SELECT * FROM student ORDER BY sage DESC, sid ASC;

ASC 升序可省略;DESC 降序必须写。ORDER BY 一定写在 WHERE 之后


八、综合:WHERE + ORDER BY 配合

-- 计算机系的学生,按年龄从大到小排
SELECT * FROM student
WHERE sdept = '计算机系'
ORDER BY sage DESC;

九、综合实操:作业三题

-- 题1:按年龄降序,同岁按学号升序
SELECT * FROM student ORDER BY sage DESC, sid ASC;

-- 题2:年龄 18~20 的姓名
SELECT sname FROM student WHERE sage BETWEEN 18 AND 20;

-- 题3:(计算机系且年龄>18) 或 软件工程系
SELECT sname, sdept FROM student
WHERE (sdept='计算机系' AND sage>18) OR sdept='软件工程系';

十、易混点排查表

现象 解决方法
WHERE sage = NULL 查不到 NULL 用 IS NULL,不能用 =
AND/OR 混用结果不对 用括号明确优先级,记住 NOT>AND>OR
BETWEEN 不含端点 实际包含两端;要排除用 > <
排序没生效 ORDER BY 必须写在 WHERE 之后
DESC 写成 DSEC 拼写是 DESC
文本值漏引号报错 文本必须单引号 '计算机系'

十一、小测验(自测)

  1. 查年龄 18~20 含两端,用 BETWEEN 怎么写?BETWEEN 包含端点吗?
  2. 查"计算机系且年龄>18,或软件工程系"的 SQL?为什么这里要加括号?
  3. 判断某列"为空"为什么不能写 = NULL?正确写法是什么?
  4. ORDER BY sage DESC, sid ASC 的排序规则是什么?ORDER BY 应该写在 WHERE 前还是后?

【声明】本文由 AI 辅助生成,仅供 MySQL 数据库教学参考,如有疑误以教材为准。

posted on 2026-08-29 10:26  eagle福  阅读(5)  评论(0)    收藏  举报