好了,我们已经知道怎么用 SELECT 命令了。至少我们已经学会了从数据库里提取数据,选出需要的列,还能写点把原始数据变成有用信息的查询。现在,是时候给我们的魔法调色板加点“过滤器”了。没错,今天我们聊聊怎么用 数据过滤,用到的就是 =、>、< 和 <> 这些比较运算符。
当你面对一张超大的表时,大概率你不会想看所有数据(除非你想体验一下混乱)。为了只挑出你想要的行,SQL 里有个关键词 WHERE。它能让你设置条件,只有满足这些条件的行,才会出现在查询结果里。而这些条件里就会用到 比较运算符。
用 WHERE 过滤的语法
SELECT 列1, 列2
FROM 表名
WHERE 条件;
结构很简单:在 FROM 后面加上 WHERE,然后写上具体的 条件,只有符合条件的行才会被选出来。
举个例子,从 students 表里查数据:
SELECT name, age
FROM students
WHERE age > 18;
这个查询只会选出那些年龄大于 18 岁的学生(名字和年龄)。很简单吧?现在我们来深入了解一下比较运算符的世界。
常用的比较运算符
SQL 里有几个比较运算符,能帮你按自己的需求过滤数据。其实你在数学里早见过它们,不过这里还是要说清楚点。下面是最常用的几个:
=— 等于。<>— 不等于(有些数据库也支持!=,不过最好用<>,因为它是 SQL 标准)。>— 大于。<— 小于。>=— 大于等于。<=— 小于等于。
比较运算符表格
| 运算符 | 含义 | 例子 | 结果 |
|---|---|---|---|
= |
等于 | age = 20 |
返回年龄 等于 20 的行 |
<> |
不等于 | age <> 20 |
返回年龄 不等于 20 的行 |
> |
大于 | age > 18 |
返回年龄 大于 18 的行 |
< |
小于 | age < 18 |
返回年龄 小于 18 的行 |
>= |
大于等于 | age >= 18 |
返回年龄 18 或更大 的行 |
<= |
小于等于 | age <= 18 |
返回年龄 18 或更小 的行 |
比较运算符的用法例子
例子 1:查找大于 20 岁的学生
这是我们的表:
| id | name | age |
|---|---|---|
| 1 | Alex Lin | 22 |
| 2 | Anna Song | 19 |
| 3 | Otto Art | 21 |
SELECT name, age
FROM students
WHERE age > 20;
这里我们设置了 age > 20 这个条件,只选出年龄大于 20 的学生。如果表里有个学生 19 岁,那他就不会被选出来。
在我们的例子里,结果是:
| name | age |
|---|---|
| Alex Lin | 22 |
| Otto Art | 21 |
学生 Anna Song 没被选中,因为她只有 19 岁。
例子 2:查找工资不少于 50 000 的员工
这是我们的 employees 表:
| first_name | last_name | salary |
|---|---|---|
| Julia | Kim | 48000 |
| Marcus | Lee | 52000 |
| Anya | Patel | 50000 |
| Ethan | Zhou | 61000 |
我们的 SQL 查询:
SELECT first_name, last_name, salary
FROM employees
WHERE salary >= 50000;
这个查询会返回所有工资 等于 50 000 或 高于 50 000 的员工。等于也算!
| first_name | last_name | salary |
|---|---|---|
| Marcus | Lee | 52000 |
| Anya | Patel | 50000 |
| Ethan | Zhou | 61000 |
例子 3:查找价格低于 100 的商品
| product_name | price |
|---|---|
| USB Cable | 85 |
| Wireless Mouse | 150 |
| Notebook | 60 |
| Mechanical Pencil | 45 |
SELECT product_name, price
FROM products
WHERE price < 100;
如果你有个网店,这个查询能帮你选出所有价格低于 100 的商品(比如做个“全场 99 元”促销)。
| product_name | price |
|---|---|
| USB Cable | 85 |
| Notebook | 60 |
| Mechanical Pencil | 45 |
例子 4:排除某个 id 的用户
SELECT id, username
FROM users
WHERE id <> 1;
这个查询会选出所有 除了 id 等于 1 的用户。<> 运算符的意思就是“给我所有不等于这个值的”。
users 表:
| id | username |
|---|---|
| 1 | admin |
| 2 | elena.gray |
| 3 | tom.bishop |
| 4 | aria.noble |
查询结果:
| id | username |
|---|---|
| 2 | elena.gray |
| 3 | tom.bishop |
| 4 | aria.noble |
用比较运算符过滤时的常见错误
刚开始写带过滤的查询时,常常会出错。下面是几个常见的坑,记得注意:
问题 1:列名写错
如果你在查询里把列名写错了,PostgreSQL 会报错。比如:
SELECT name, age
FROM students
WHERE ages > 18; -- 错误:没有 "ages" 这个列
写查询前一定要确认列名拼写没错。
问题 2:比较运算符用错
有时候新手会把运算符写反。比如:
SELECT name, age
FROM students
WHERE age => 18; -- 错误:运算符写错了
正确的写法是 >=,不是 =>。
问题 3:过滤的值表里根本没有
如果你用不存在的值去过滤,查询会执行,但结果是空的。比如:
SELECT name
FROM students
WHERE age = 999; -- 结果:0 行
这不是语法错,但如果你本来想看到数据,可能会被搞糊涂。
实际应用
用比较运算符过滤数据,在各种场景下都很有用:
- 数据分析: 比如选出所有消费超过 10 000 卢比的客户。
- 报表: 选出工资高于平均值的员工。
- 监控: 跟踪最近一个月没活跃的用户。
SQL 能让你从超大表里快速提取需要的数据,而比较运算符就是你走上这条路的第一步。
GO TO FULL VERSION