news 2026/8/18 16:43:15

从零学SQL 07 数据过滤

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从零学SQL 07 数据过滤

在数据库查询中,你很少需要检索表中的所有行。更常见的情况是根据特定的业务逻辑提取数据子集。本文将通过 MySQL 官方提供的world示例数据库,带你掌握条件过滤子句WHERE的用法。


文章目录

    • 一、 单条件过滤
      • 1.1 WHERE 子句
      • 1.2 检查范围:BETWEEN ... AND
      • 1.3 集合筛选:IN 运算符
      • 1.4 空值的处理:IS NULL / <=>
    • 二、 多条件过滤:逻辑组合
      • 2.1 AND 与 OR
      • 2.2 优先级的陷阱
      • 2.3 NOT 运算符
        • 2.3.1 NOT IN
        • 2.3.2 NOT NULL

一、 单条件过滤

过滤条件放在WHERE子句里,紧跟在FROM子句之后,如果有ORDER BY子句,那么需要放WHERE子句之后。
完整的语法是:SELECT 查询列 FROM 表名 WHERE 过滤条件 ORDER BY 排序列;

1.1 WHERE 子句

city表中,如果我们想找人口数刚好等于 1,000,000 的城市:

SELECTName,PopulationFROMcityWHEREPopulation=1000000;

过滤条件通常是一个表达式,除了等号,SQL 还支持多种运算符:

操作符描述
=相等
<>不相等
!=不相等
<小于
<=小于或等于
>大于
>=大于或等于

1.2 检查范围:BETWEEN … AND

如果你想查找人口在 100 万到 200 万之间的城市,BETWEEN...AND...是更好的选择(包含上下边界):

SELECTName,PopulationFROMcityWHEREPopulationBETWEEN1000000AND2000000;

1.3 集合筛选:IN 运算符

当你要匹配多个特定值时,可以用IN运算符进行检测,值放在括号中,以逗号分隔。

例如,查找中国 (CHN)、美国 (USA) 的城市:

SELECTName,CountryCodeFROMcityWHERECountryCodeIN('CHN','USA');

1.4 空值的处理:IS NULL / <=>

在MySQL中,NULL代表未知或缺失,它不等于 0,也不等于空字符串。

country表中,我想查找某些国家的独立年份(IndepYear)缺失,需要使用IS NULL来过滤。同理,如果要查非空的记录则使用IS NOT NULL

SELECTNameFROMcountryWHEREIndepYearISNULL;

避坑:永远不要写WHERE IndepYear = NULL,这在 SQL 逻辑中永远返回 False。

扩展:
MySQL的<=>是一个特殊的NULL 安全相等运算符(也叫 “空值安全等号”),作用是:既能比较普通值是否相等,同时也会将 NULL 值视为相等,使用的概率较低。


二、 多条件过滤:逻辑组合

当业务逻辑变复杂时,我们需要用逻辑运算符将多个条件串联起来。

2.1 AND 与 OR

  • AND:所有条件必须同时满足。
  • OR:只要满足其中一个条件即可。
-- 查找人口超过 500 万,且位于中国的城市SELECTName,PopulationFROMcityWHEREPopulation>5000000ANDCountryCode='CHN';

2.2 优先级的陷阱

AND的优先级高于OR。如果你混合使用它们,务必使用**圆括号()

错误示例:查找中国或美国人口超 500 万的城市:

SELECT*FROMcityWHERECountryCode='CHN'ORCountryCode='USA'ANDPopulation>5000000;

正确写法:

SELECT*FROMcityWHERE(CountryCode='CHN'ORCountryCode='USA')ANDPopulation>5000000;


2.3 NOT 运算符

NOT用来否定其后的任何条件,它通常与INNULL结合。

2.3.1 NOT IN

查找除了中国和美国以外的所有国家:

SELECT*FROMcityWHERECountryCodeNOTIN('CHN','USA');

2.3.2 NOT NULL

查找独立年份不为空的国家:

SELECT*FROMcountryWHEREIndepYearISNOTNULL;


掌握过滤条件是写出高效 SQL 的第一步,下一节我们将一起学习SQL条件过滤中的:通配符过滤(模糊匹配)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 16:19:35

2026年呼和浩特靠谱瓷砖大揭秘!哪种款式数量多你知道吗?

嘿&#xff0c;家人们&#xff01;在呼和浩特准备装修的朋友们&#xff0c;是不是正在为选瓷砖而发愁呢&#xff1f;今天咱就来好好唠唠2026年呼和浩特靠谱的瓷砖&#xff0c;顺便揭秘一下哪种款式数量多。一、瓷砖市场乱象&#xff0c;你怕了吗&#xff1f;现在瓷砖市场鱼龙混…

作者头像 李华
网站建设 2026/7/14 16:19:46

出海必备跨境电商短视频群控系统怎么选?新手必看方法!

刚起步的出海卖家是不是总卡在这&#xff1f;想铺社媒矩阵做短视频营销&#xff0c;拍一条视频要租场地、找外籍模特&#xff0c;一周出不了10条&#xff1b;投到TikTok、亚马逊、Shopify不同平台&#xff0c;还要手动改格式、调风格&#xff0c;折腾半天还不符合平台规则&…

作者头像 李华
网站建设 2026/7/14 16:19:35

QT使用ui->checkBox->setChecked(true)时,注意事项

QT界面上拖入一个checkBox组件&#xff0c;定义了stateChanged槽函数&#xff0c;即checkBox勾选框状态发生变化的时候&#xff0c;触发stateChanged函数。 如果没有设置勾选框默认状态时&#xff0c;勾选框默认是未勾选的状态&#xff0c;当用代码 ui->checkBox->setChe…

作者头像 李华
网站建设 2026/7/14 16:19:36

央企工程建筑项目SpringBoot如何优化BIM模型文件的分片校验上传?

文件管理系统毕业设计 - 大文件上传方案 前言 作为一个即将毕业的山西软件工程学生&#xff0c;我深刻理解你现在面临的困境 - 既要完成高质量的毕业设计&#xff0c;又要为找工作做准备。让我用轻松幽默的方式分享我的经验&#xff0c;希望能帮到你&#xff01; 项目概述 …

作者头像 李华
网站建设 2026/7/14 16:19:48

No.44 S7-200 PLC糖果包装控制系统

No.44 S7-200 基于PLC的糖果包装控制系统最近在工厂自动化项目里折腾了一套基于西门子S7-200 PLC的糖果包装控制系统&#xff0c;这玩意儿看着简单&#xff0c;实际调试起来还真有点门道。今天就跟大伙儿唠唠这个甜滋滋的工业控制项目。系统核心用了CP 224XP扩展型控制器&#…

作者头像 李华