WHERE 子句
如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中。
语法
以下是 SQL SELECT 语句使用 WHERE 子句从数据表中读取数据的通用语法:
SELECT field1, field2,...fieldN FROM table_name1, table_name2...[WHERE condition1 [AND [OR]] condition2.....
- 查询语句中你可以使用一个或者多个表,表之间使用逗号, 分割,并使用WHERE语句来设定查询条件。
- 你可以在 WHERE 子句中指定任何条件。
- 你可以使用 AND 或者 OR 指定一个或多个条件。
- WHERE 子句也可以运用于 SQL 的 DELETE 或者 UPDATE 命令。
- WHERE 子句类似于程序语言中的 if 条件,根据 MySQL 表中的字段值来读取指定的数据。
以下为操作符列表,可用于 WHERE 子句中。
下表中实例假定 A 为 10, B 为 20
| 操作符 | 描述 | 实例 |
|---|---|---|
| = | 等号,检测两个值是否相等,如果相等返回true | (A = B) 返回false。 |
| <>, != | 不等于,检测两个值是否相等,如果不相等返回true | (A != B) 返回 true。 |
| > | 大于号,检测左边的值是否大于右边的值, 如果左边的值大于右边的值返回true | (A > B) 返回false。 |
| < | 小于号,检测左边的值是否小于右边的值, 如果左边的值小于右边的值返回true | (A < B) 返回 true。 |
| >= | 大于等于号,检测左边的值是否大于或等于右边的值, 如果左边的值大于或等于右边的值返回true | (A >= B) 返回false。 |
| <= | 小于等于号,检测左边的值是否小于或等于右边的值, 如果左边的值小于或等于右边的值返回true | (A <= B) 返回 true。 |
如果我们想在 MySQL 数据表中读取指定的数据,WHERE 子句是非常有用的。
使用主键来作为 WHERE 子句的条件查询是非常快速的。
如果给定的条件在表中没有任何匹配的记录,那么查询不会返回任何数据。
从命令提示符中读取数据
我们将在SQL SELECT语句使用WHERE子句来读取MySQL数据表 runoob_tbl 中的数据:
实例
以下实例将读取 runoob_tbl 表中 runoob_author 字段值为 Sanjay 的所有记录:
SQL SELECT WHERE 子句
SELECT * from runoob_tbl WHERE runoob_author='菜鸟教程';
输出结果:
MySQL 的 WHERE 子句的字符串比较是不区分大小写的。 你可以使用 BINARY 关键字来设定 WHERE 子句的字符串比较是区分大小写的。
如下实例:
BINARY 关键字
mysql> SELECT * from runoob_tbl WHERE BINARY runoob_author='runoob.com';
Empty set (0.01 sec)
mysql> SELECT * from runoob_tbl WHERE BINARY runoob_author='RUNOOB.COM';
+-----------+---------------+---------------+-----------------+
| runoob_id | runoob_title | runoob_author | submission_date |
+-----------+---------------+---------------+-----------------+
| 3 | JAVA 教程 | RUNOOB.COM | 2016-05-06 |
| 4 | 学习 Python | RUNOOB.COM | 2016-03-06 |
+-----------+---------------+---------------+-----------------+
2 rows in set (0.01 sec)
实例中使用了 BINARY 关键字,是区分大小写的,所以 runoob_author=’runoob.com’ 的查询条件是没有数据的。
在Mysql中,WHERE子句与SELECT,INSERT,UPDATE和DELETE语句一起使用来选择或更改想要更改的满足指定特定行记录。
它是一个在表名后面出现的语句。
语法
[COMMAND] field,field2,... FROM table_name,table_name2,... WHERE [CONDITION]
注意:WHERE子句是一个可选的子句。它可以和AND,OR,AND & OR,LIKE运算符一起使用。
WHERE子句与单一条件
我们有一个表students,里边有一些数据。假设要查询students表中的student_id小于6的所有记录。
SELECT *
FROM Students
WHERE student_id < 6;
执行上面查询语句,得到以下结果 -
MariaDB [testdb]> SELECT *
-> FROM Students
-> WHERE student_id < 6;
+------------+--------------+-----------------+----------------+
| student_id | student_name | student_address | admission_date |
+------------+--------------+-----------------+----------------+
| 1 | Maxsu | Haikou | 2017-01-07 |
| 3 | JMaster | Beijing | 2016-05-07 |
| 4 | Mahesh | Guangzhou | 2016-06-07 |
| 5 | Kobe | Shanghai | 2016-02-07 |
+------------+--------------+-----------------+----------------+
4 rows in set (0.00 sec)
WHERE子句与AND条件
当前students表中的全部数据是
MariaDB [testdb]> select * from students;
+------------+--------------+-----------------+----------------+
| student_id | student_name | student_address | admission_date |
+------------+--------------+-----------------+----------------+
| 1 | Maxsu | Haikou | 2017-01-07 |
| 3 | JMaster | Beijing | 2016-05-07 |
| 4 | Mahesh | Guangzhou | 2016-06-07 |
| 5 | Kobe | Shanghai | 2016-02-07 |
| 6 | Blaba | Shengzhen | 2016-08-07 |
| 7 | Maxsu | Sanya | 2017-08-08 |
+------------+--------------+-----------------+----------------+
6 rows in set (0.00 sec)
现在要查询students表中的所有列,其中student_name是Maxsu,并且student_id大于1的行记录。这两个条件都必须满足。参考以下查询语句 -
SELECT *
FROM Students
WHERE student_name = 'Maxsu'
AND student_id >1 ;
执行上面查询语句,得到以下结果 -
MariaDB [testdb]> SELECT *
-> FROM Students
-> WHERE student_name = 'Maxsu'
-> AND student_id >1 ;
+------------+--------------+-----------------+----------------+
| student_id | student_name | student_address | admission_date |
+------------+--------------+-----------------+----------------+
| 7 | Maxsu | Sanya | 2017-08-08 |
+------------+--------------+-----------------+----------------+
1 row in set (0.03 sec)
WHERE子句与OR条件
现在要查询students表中的所有列,其中student_name是Maxsu,或者student_id大于5的行记录。这两个条件满足其中一个即可。参考以下查询语句 -
SELECT *
FROM Students
WHERE student_name = 'Maxsu'
OR student_id >5 ;
执行上面查询语句,得到以下结果 -
MariaDB [testdb]> SELECT *
-> FROM Students
-> WHERE student_name = 'Maxsu'
-> OR student_id >5 ;
+------------+--------------+-----------------+----------------+
| student_id | student_name | student_address | admission_date |
+------------+--------------+-----------------+----------------+
| 1 | Maxsu | Haikou | 2017-01-07 |
| 6 | Blaba | Shengzhen | 2016-08-07 |
| 7 | Maxsu | Sanya | 2017-08-08 |
+------------+--------------+-----------------+----------------+
3 rows in set (0.00 sec)
WHERE子句与OR/AND条件
假设要查询students表中的所有列,那些符合student_name是Ajeet,student_id大于或等于1,或者student_address是Shanghai的行记录。
SELECT *
FROM Students
WHERE student_name = 'Maxsu'
AND student_id >=1
OR (student_address = 'Shanghai');
执行上面查询语句,得到以下结果 -
MariaDB [testdb]> SELECT *
-> FROM Students
-> WHERE student_name = 'Maxsu'
-> AND student_id >=1
-> OR (student_address = 'Shanghai');
+------------+--------------+-----------------+----------------+
| student_id | student_name | student_address | admission_date |
+------------+--------------+-----------------+----------------+
| 1 | Maxsu | Haikou | 2017-01-07 |
| 5 | Kobe | Shanghai | 2016-02-07 |
| 7 | Maxsu | Sanya | 2017-08-08 |
+------------+--------------+-----------------+----------------+
3 rows in set (0.00 sec)
