MySQL WHERE 子句:AND、OR、IN、NOT IN 查询示例

什么是 WHERE 子句 MySQL?

WHERE子句 in MySQL 是用于指定受特定 SQL 语句影响的数据或行的确切条件的关键字。WHERE 子句可与 INSERT、UPDATE、SELECT 和 DELETE 等 SQL 语句一起使用,以筛选记录并对数据执行各种操作。

我们研究了如何从 数据库 使用上一教程中的 SELECT 语句。SELECT 语句返回查询数据库表的所有结果。

然而,有时我们想将查询结果限制在指定的条件下。在这种情况下,SQL 中的 WHERE 子句非常有用。

WHERE 子句 MySQL
WHERE 子句 MySQL

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 email
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 email
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 email
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 email
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

总结

  • SQL WHERE 子句用于限制 SELECT、UPDATE 或 删除查询.
  • SQL 中的 WHERE 条件可以与逻辑运算符(例如 AND 和 OR)、比较运算符(例如 ,= 等)结合使用。
  • 与 AND 一起使用时 逻辑运算符,必须满足所有条件。
  • 与 OR 逻辑运算符一起使用时,必须满足任意一个条件。
  • 关键字 IN 用于选择与值列表匹配的行。

脑筋急转弯

假设我们想要获取截至 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