MySQL 查询进阶(二):行筛选与条件查询

上一篇我们以学生表为例掌握了 SQL 查询的列选择、算数运算和别名使用,本文将继续聚焦 "行选择"------ 如何通过条件筛选出符合要求的学生数据行,包括比较条件、逻辑条件、模糊匹配等核心技巧。


目录

一、行选择的核心语法

二、基础比较条件

三、高级比较条件

[1. BETWEEN AND:范围筛选](#1. BETWEEN AND:范围筛选)

[2. IN:多值匹配](#2. IN:多值匹配)

[3. LIKE:模糊匹配](#3. LIKE:模糊匹配)

[4. NULL 条件:空值判断](#4. NULL 条件:空值判断)

四、逻辑条件:多条件组合

总结


一、行选择的核心语法

行筛选依赖WHERE子句,紧跟在FROM之后,语法如下:

sql 复制代码
SELECT 投影列 FROM 表名 WHERE 筛选条件;

投影列即需要查询的列,筛选条件是行筛选的核心,支持多种条件类型(以下均以student学生表为例)。

二、基础比较条件

比较条件用于判断列值与指定值的大小 / 相等关系,常用运算符:=、>、>=、<、<=、!=(<>)。

示例 1:查询数学成绩≥90 分的学生姓名和数学成绩

sql 复制代码
SELECT st_name, math_score FROM student WHERE math_score >= 90;

示例 2:查询语文成绩≠60 分的学生姓名和语文成绩

sql 复制代码
SELECT st_name, chinese_score FROM student WHERE chinese_score != 60;
-- 等价写法
SELECT st_name, chinese_score FROM student WHERE chinese_score <> 60;

三、高级比较条件

1. BETWEEN AND:范围筛选

用于查询列值在 "最小值 - 最大值" 区间内的数据(包含边界值),比 >= + <= 更简洁。

语法:

sql 复制代码
WHERE 列名 BETWEEN 最小值 AND 最大值;
-- 反向筛选(不在区间内)
WHERE 列名 NOT BETWEEN 最小值 AND 最大值;

示例:查询数学成绩在 80-95 分之间的学生姓名和数学成绩

sql 复制代码
SELECT st_name, math_score FROM student WHERE math_score BETWEEN 80 AND 95;

2. IN:多值匹配

判断列值是否在指定的多个值中,替代多个OR条件,简化语句。

语法:

sql 复制代码
WHERE 列名 IN (值1, 值2, 值3......);
-- 反向筛选(不在指定值中)
WHERE 列名 NOT IN (值1, 值2, 值3......);

示例:查询班级 ID 为 1、3、5 的学生姓名和班级 ID

sql 复制代码
SELECT st_name, class_id FROM student WHERE class_id IN (1,3,5);

3. LIKE:模糊匹配

用于字符串的模糊查询(如按姓名筛选),搭配通配符使用:

  • %:匹配 0 个或多个任意字符;
  • _:匹配 1 个任意字符。

语法:

sql 复制代码
WHERE 列名 LIKE '匹配规则';

示例 1:查询姓名以 "张" 开头的学生姓名

sql 复制代码
SELECT st_name FROM student WHERE st_name LIKE '张%';

示例 2:查询姓名第二个字是 "小" 的学生姓名

sql 复制代码
SELECT st_name FROM student WHERE st_name LIKE '_小%';

4. NULL 条件:空值判断

判断列值是否为空(如学生的家庭地址是否填写),必须使用IS NULL/IS NOT NULL ,不能用=或!=。

示例 1:查询未填写家庭地址的学生姓名和地址

sql 复制代码
SELECT st_name, address FROM student WHERE address IS NULL;

示例 2:查询已填写家庭地址的学生姓名和地址

sql 复制代码
SELECT st_name, address FROM student WHERE address IS NOT NULL;

四、逻辑条件:多条件组合

当需要多个筛选条件同时生效时,使用逻辑运算符组合:

  • AND:多个条件同时满足;
  • OR:多个条件满足其一;
  • NOT:取反条件。

示例 1:数学成绩 = 100 分且姓名含 "李" 的学生(AND)

sql 复制代码
SELECT st_name, math_score FROM student WHERE math_score = 100 AND st_name LIKE "%李%";

示例 2:数学成绩≥90 分或语文成绩≥90 分的学生(OR)

sql 复制代码
SELECT st_name, math_score, chinese_score FROM student WHERE math_score >= 90 OR chinese_score >= 90;

示例 3:姓名不含 "王" 的学生(NOT)

sql 复制代码
SELECT st_name FROM student WHERE st_name NOT LIKE "%王%";

总结

  1. 行筛选依赖WHERE子句,核心是灵活使用各类条件;
  2. 模糊查询用LIKE+ 通配符(%/_),空值判断用IS NULL/IS NOT NULL;
  3. 多条件组合用AND/OR/NOT,注意条件的优先级(AND高于OR)。

希望这篇文章对你有帮助,如果你有任何问题或建议,欢迎在评论区留言。谢谢阅读(求攒攒 收藏 关注)!

相关推荐
2401_8914092638 分钟前
量化数据13:港股分钟K线、Level2逐笔Tick、十档盘口和港股通历史数据的批量提取
数据库
w-w0w-w7 小时前
SQL注入
网络·数据库·sql
tianyuanwo7 小时前
NetBox 数据库详解:当“关系型数据库”被装进一个网络运维的领域模型里
运维·数据库·netbox
一条泥憨鱼7 小时前
【计算机网络】短连接、长连接与连接池:从 TCP 握手到池化复用的完整链路
网络·数据库·网络协议·tcp/ip·计算机网络
IvorySQL7 小时前
深入 PostgreSQL WAL:从崩溃恢复到逻辑复制
数据库·postgresql
幽灵诶9 小时前
Mysql(基于测试的学习)
数据库·mysql
砚底藏山河9 小时前
python量化自定义周期 K 线合成
java·开发语言·数据库·python·金融
视觉小萌新9 小时前
AI Class 3 · Chapter 1:变量、字符串、list/dict、if/for(python学习-小白版-有经验可跳过)
python·学习·list
宇宙无敌暴龙战士6669 小时前
MySQL 8 库表操作学习笔记:SQL 基础、库表管理、约束与用户授权全流程
数据库·sql·mysql·学习笔记·后端开发
猿究院_夏燊9 小时前
MySQL 的四种隔离级别
java·数据库·mysql