根据条件选取记录
在前一章中,我们学习了如何从表中获取所有记录。但是,在现实场景中,我们通常只需要选取、更新或删除那些满足特定条件的记录,比如属于特定的年龄组或国家的用户。
WHERE
子句用于SELECT、UPDATE和DELETE。
语法
WHERE
子句与SELECT
语句一起使用可以只选取满足指定条件的记录。基本语法如下:
SELECT column_list FROM table_name WHERE condition;
在这里,column_list
是要获取的字段,如名称、年龄、国家等。但是,如果想获取表中所有字段,可以使用以下语法:
SELECT * FROM table_name WHERE condition;
现在,让我们来看一些例子。
前面章节里,在demo数据库中,我们创建了名为persons
的表,其中包含以下记录:
+----+-------------------+------------+-------------+
| id | name | birth_date | phone |
+----+-------------------+------------+-------------+
| 1 | Peter Wilson | 1990-07-15 | 0711-020361 |
| 2 | Carrie Simpson | 1995-05-01 | 0251-031259 |
| 3 | Victoria Ashworth | 1996-10-17 | 0695-346721 |
+----+-------------------+------------+-------------+
使用WHERE子句过滤记录
下面的SQL语句将从persons表中返回所有id >= 2的记录。WHERE子句过滤掉了不需要的数据。
示例
SELECT * FROM persons
WHERE id >= 2;
执行之后,输出将如下所示:
+----+-------------------+------------+-------------+
| id | name | birth_date | phone |
+----+-------------------+------------+-------------+
| 2 | Carrie Simpson | 1995-05-01 | 0251-031259 |
| 3 | Victoria Ashworth | 1996-10-17 | 0695-346721 |
+----+-------------------+------------+-------------+
类似地,选取记录时可以指定字段,如下所示:
示例
SELECT id, name FROM persons
WHERE id >= 2;
执行上述语句后,将得到如下输出:
+----+-------------------+
| id | name |
+----+-------------------+
| 2 | Carrie Simpson |
| 3 | Victoria Ashworth |
+----+-------------------+
下面的语句将获取名字包含“Simpson”的记录。
示例
SELECT * FROM persons
WHERE name like '%Simpson%';
该语句将产生以下输出:
+----+----------------+------------+-------------+
| id | name | birth_date | phone |
+----+----------------+------------+-------------+
| 2 | Carrie Simpson | 1995-05-01 | 0251-031259 |
+----+----------------+------------+-------------+
WHERE子句中允许的运算符
SQL支持许多运算符,可以在WHERE子句中使用,常用的运算符总结如下。
运算符 | 描述 | 例子 |
---|---|---|
= |
等于 | WHERE id = 2 |
> |
大于 | WHERE age > 30 |
< |
小于 | WHERE age < 18 |
>= |
大于等于 | WHERE rating >= 4 |
<= |
小于等于 | WHERE price <= 100 |
LIKE |
简单的模式匹配 | WHERE name LIKE 'Dav' |
IN |
检查指定值是否匹配列表或子查询中的任何值 | WHERE country IN ('USA', 'UK') |
BETWEEN |
检查指定值是否在值的范围内 | WHERE rating BETWEEN 3 AND 5 |