SQL - WHERE子句
欢迎,未来的数据库巫师们!今天,我们将深入了解你SQL工具箱中最强大的工具之一:WHERE子句。作为你亲切的计算机科学老师,我将引导你进行这次激动人心的旅程。所以,拿起你的虚拟魔杖(键盘),让我们一起施展SQL魔法!
SQL WHERE子句
想象你在一个拥有数百万册书籍的巨大图书馆里。你在寻找一本关于龙的具体书籍。你会逐本查看吗?当然不会!你会请图书管理员帮你找到关于龙的书。在SQL中,WHERE子句就是你的助手图书管理员。
WHERE子句允许我们根据特定条件过滤数据。就像告诉数据库:“嘿,我只想要符合这些条件的信息。”
这是基本语法:
SELECT column1, column2, ...
FROM table_name
WHERE condition;
别担心,这看起来可能有点吓人。我们会一步步分解,很快你就能像专业人士一样过滤数据!
WHERE子句与SELECT语句
让我们从一个简单的例子开始。假设我们有一个名为students
的表,包含id
、name
和age
列。我们想要找到所有18岁的学生。
SELECT *
FROM students
WHERE age = 18;
在这个查询中:
-
SELECT *
意味着我们想要查看所有列。 -
FROM students
指定了我们正在查询的表。 -
WHERE age = 18
是我们的条件。就像说:“只显示年龄正好是18岁的行。”
假设我们只想看到这些18岁学生的名字:
SELECT name
FROM students
WHERE age = 18;
看到我们是如何将*
改为name
的吗?现在我们只会看到名字,而不是所有列。
WHERE子句与UPDATE语句
WHERE子句不仅用于SELECT语句。在更新数据时也非常有用。假设我们想要将所有名为“Alice”的学生的年龄更新为19岁。
UPDATE students
SET age = 19
WHERE name = 'Alice';
这个查询会将年龄更改为19岁,但仅限于名为Alice的学生。如果没有WHERE子句,我们会不小心更改所有人的年龄!
WHERE子句与IN操作符
如果我们想要找到年龄为18、19或20岁的学生呢?我们可以使用多个OR条件,但有一个更整洁的方法:IN操作符。
SELECT *
FROM students
WHERE age IN (18, 19, 20);
这个查询将返回年龄为18、19或20岁的所有学生。就像说:“这个年龄是否在列表中?如果是,就包括它!”
WHERE子句与NOT IN操作符
现在,如果我们想要找到所有年龄不是18、19或20岁的学生呢?非常简单!我们只需在IN前加上NOT:
SELECT *
FROM students
WHERE age NOT IN (18, 19, 20);
这将给我们所有年龄不是18、19或20岁的学生。
WHERE子句与LIKE操作符
有时,我们需要在文本数据中搜索模式。这时LIKE操作符就派上用场了。假设我们想要找到所有名字以'A'开头的学生:
SELECT *
FROM students
WHERE name LIKE 'A%';
在这个查询中,'%'是一个通配符,匹配任何字符序列。所以'A%'意味着“以A开头,后面跟着任何字符。”
我们也可以搜索以'n'结尾的名字:
SELECT *
FROM students
WHERE name LIKE '%n';
或者搜索任何包含'li'的名字:
SELECT *
FROM students
WHERE name LIKE '%li%';
WHERE子句与AND、OR操作符
通常,我们需要组合多个条件。这时AND和OR就派上用场了。
让我们找到所有年龄为18岁并且名字以'A'开头的学生:
SELECT *
FROM students
WHERE age = 18 AND name LIKE 'A%';
或者我们可能想要找到所有年龄为18岁或者名字以'A'开头的学生的信息:
SELECT *
FROM students
WHERE age = 18 OR name LIKE 'A%';
你可以组合这些操作符来创建复杂条件:
SELECT *
FROM students
WHERE (age = 18 OR age = 19) AND (name LIKE 'A%' OR name LIKE 'B%');
这个查询将找到所有年龄为18或19岁,并且名字以'A'或'B'开头的学生的信息。
下面是一个总结我们学过的操作符的表格:
操作符 | 描述 | 示例 |
---|---|---|
= | 等于 | WHERE age = 18 |
<> 或 != | 不等于 | WHERE age <> 18 |
> | 大于 | WHERE age > 18 |
< | 小于 | WHERE age < 18 |
>= | 大于或等于 | WHERE age >= 18 |
<= | 小于或等于 | WHERE age <= 18 |
IN | 匹配列表中的任何值 | WHERE age IN (18, 19, 20) |
NOT IN | 不匹配列表中的任何值 | WHERE age NOT IN (18, 19, 20) |
LIKE | 模式匹配 | WHERE name LIKE 'A%' |
AND | 两个条件都必须为真 | WHERE age = 18 AND name LIKE 'A%' |
OR | 任何一个条件为真 | WHERE age = 18 OR name LIKE 'A%' |
就是这样,伙计们!你已经学会了WHERE子句的里里外外。记住,熟能生巧。尝试编写你自己的查询,用不同的条件进行实验,很快你就能像一个经验丰富的数据库管理员一样过滤数据。
快乐查询,愿你的WHERE子句总能找到你想要的东西!
Credits: Image by storyset