MySQL WHERE 子句:AND、OR、IN、NOT IN 查询示例
什么是 WHERE 子句 MySQL?
WHERE子句 in MySQL 是用于指定受特定 SQL 语句影响的数据或行的确切条件的关键字。WHERE 子句可与 INSERT、UPDATE、SELECT 和 DELETE 等 SQL 语句一起使用,以筛选记录并对数据执行各种操作。
我们研究了如何从 数据库 使用上一教程中的 SELECT 语句。SELECT 语句返回查询数据库表的所有结果。
然而,有时我们想将查询结果限制在指定的条件下。在这种情况下,SQL 中的 WHERE 子句非常有用。

WHERE 子句语法
WHERE 子句在以下语句中使用时的基本语法: MySQL SELECT WHERE 语句如下。
SELECT * FROM tableName WHERE condition;
点击这里
- “从表名中选择 *” 是标准 选择语句
- “在哪里” 是限制我们选择查询结果集的关键字, “健康)状况” 是要应用于结果的过滤器。过滤器可以是范围、单个值或子查询。
现在让我们来看一个 实际例子.
假设我们想从会员表中获取会员编号为 1 的会员的个人详细信息,我们将使用以下脚本来实现。
SELECT * FROM `members` WHERE `membership_number` = 1;
在以下位置执行上述脚本 MySQL 工作台 在“myflixdb”上会产生以下结果。
membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
---|---|---|---|---|---|---|---|
1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
WHERE 子句与 – 相结合 AND 逻辑上 Opera器
WHERE 条件 MySQL 与 AND 逻辑运算符一起使用时,仅当满足指定的所有过滤条件时才执行。
现在让我们看一个实际的例子——假设我们想要获取 2 年上映的第 2008 类所有电影的列表,我们将使用下面显示的脚本来实现。
SELECT * FROM `movies` WHERE `category_id` = 2 AND `year_released` = 2008;
在以下位置执行上述脚本 MySQL 针对“myflixdb”的工作台产生以下结果。
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
WHERE 子句与 – 相结合 OR 逻辑上 Opera器
WHERE 子句与 OR 运算符一起使用时,仅当满足任何或所有指定的过滤条件时才会执行。
以下脚本获取类别 1 或类别 2 中的所有电影
SELECT * FROM `movies` WHERE `category_id` = 1 OR `category_id` = 2;
在以下位置执行上述脚本 MySQL 针对“myflixdb”的工作台产生以下结果。
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
1 | Pirates of the Caribean 4 | Rob Marshall | 2011 | 1 |
2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
WHERE 子句与 – 相结合 IN 关键字
在哪里 MySQL 子句与 IN 关键字一起使用时,仅影响其值与 IN 关键字中提供的值列表匹配的行。 MySQL IN 语句有助于减少您可能必须使用的 OR 子句的数量。
下列 MySQL WHERE IN 查询给出 membership_number 为 1、2 或 3 的行
SELECT * FROM `members` WHERE `membership_number` IN (1,2,3);
在以下位置执行上述脚本 MySQL 针对“myflixdb”的工作台产生以下结果。
membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
---|---|---|---|---|---|---|---|
1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
3 | Robert Phil | Male | 12-07-1989 | 3rd Street 34 | NULL | 12345 | rm@tstreet.com |
WHERE 子句与 – 相结合 不在 关键字
当 WHERE 子句与 NOT IN 关键字一起使用时,不会影响其值与 NOT IN 关键字中提供的值列表匹配的行。
以下查询给出 membership_number 不为 1、2 或 3 的行
SELECT * FROM `members` WHERE `membership_number` NOT IN (1,2,3);
在以下位置执行上述脚本 MySQL 针对“myflixdb”的工作台产生以下结果。
membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
---|---|---|---|---|---|---|---|
4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
WHERE 子句与 – 相结合 对比 Opera职权范围
小于 ()、等于 (=)、不等于 () 比较运算符可与 WHERE 子句一起使用
= 等于
以下脚本使用等于比较运算符从成员表中获取所有女性成员。
SELECT * FROM `members` WHERE `gender` = 'Female';
在以下位置执行上述脚本 MySQL 针对“myflixdb”的工作台产生以下结果。
membership_number | full_names | gender | date_of_birth | physical_address | postal_address | contct_number | |
---|---|---|---|---|---|---|---|
1 | Janet Jones | Female | 21-07-1980 | First Street Plot No 4 | Private Bag | 0759 253 542 | janetjones@yagoo.cm |
2 | Janet Smith Jones | Female | 23-06-1980 | Melrose 123 | NULL | NULL | jj@fstreet.com |
4 | Gloria Williams | Female | 14-02-1984 | 2nd Street 23 | NULL | NULL | NULL |
> 比...更棒
以下脚本从付款表中获取所有大于 2,000 的付款。
从 `付款` 中选择 * 其中 `付款金额` > 2000;
在以下位置执行上述脚本 MySQL 针对“myflixdb”的工作台产生以下结果。
payment_id | membership_number | payment_date | description | amount_paid | external_reference_number |
---|---|---|---|---|---|
1 | 1 | 23-07-2012 | Movie rental payment | 2500 | 11 |
3 | 3 | 30-07-2012 | Movie rental payment | 6000 | NULL |
< > 不等于
以下脚本获取所有类别 ID 不为 1 的电影。
SELECT * FROM `movies` WHERE `category_id`<> 1;
在以下位置执行上述脚本 MySQL 针对“myflixdb”的工作台产生以下结果。
movie_id | title | director | year_released | category_id |
---|---|---|---|---|
2 | Forgetting Sarah Marshal | Nicholas Stoller | 2008 | 2 |
5 | Daddy's Little Girls | NULL | 2007 | 8 |
6 | Angels and Demons | NULL | 2007 | 6 |
7 | Davinci Code | NULL | 2007 | 6 |
9 | Honey mooners | John Schultz | 2005 | 8 |
总结
脑筋急转弯
假设我们想要获取截至 25 年 06 月 2012 日尚未归还的租借电影列表。我们可以使用 SQL WHERE 语句子句以及小于比较运算符和 AND 逻辑运算符来实现此目的。
SELECT * FROM `movierentals` WHERE `return_date` < '2012-06-25' AND movie_returned = 0;
在以下位置执行上述脚本 MySQL 工作台给出以下结果。
reference_number | transaction_date | return_date | membership_number | movie_id | movie_returned |
---|---|---|---|---|---|
14 | 21-06-2012 | 24-06-2012 | 2 | 2 | 0 |