SQL - WHERE子句

欢迎,未来的数据库巫师们!今天,我们将深入了解你SQL工具箱中最强大的工具之一:WHERE子句。作为你亲切的计算机科学老师,我将引导你进行这次激动人心的旅程。所以,拿起你的虚拟魔杖(键盘),让我们一起施展SQL魔法!

SQL - Where Clause

SQL WHERE子句

想象你在一个拥有数百万册书籍的巨大图书馆里。你在寻找一本关于龙的具体书籍。你会逐本查看吗?当然不会!你会请图书管理员帮你找到关于龙的书。在SQL中,WHERE子句就是你的助手图书管理员。

WHERE子句允许我们根据特定条件过滤数据。就像告诉数据库:“嘿,我只想要符合这些条件的信息。”

这是基本语法:

SELECT column1, column2, ...
FROM table_name
WHERE condition;

别担心,这看起来可能有点吓人。我们会一步步分解,很快你就能像专业人士一样过滤数据!

WHERE子句与SELECT语句

让我们从一个简单的例子开始。假设我们有一个名为students的表,包含idnameage列。我们想要找到所有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