MySQL基础之过滤数据

使用WHERE子句

通常会根据操作或报告的需要提取表中的数据的子集。只检索所需数据需要指定的搜索条件, 搜索条件也称为过滤条件

在SELECT语句中, 数据根据WHERE子句中指定的搜索条件进行过滤。WHERE子句在表名(FROM子句)之后给出。

MariaDB [crashcourse]> SELECT prod_name, prod_price FROM products WHERE prod_price=2.50;
+---------------+------------+
| prod_name     | prod_price |
+---------------+------------+
| Carrots       |       2.50 |
| TNT (1 stick) |       2.50 |
+---------------+------------+
2 rows in set (0.002 sec)

MariaDB [crashcourse]> 

这个例子采用了简单的相等测试: 它检查一个列是否具有指定的值, 据此进行过滤。

WHERE子句的位置

在同时使用ORDER BY和WHERE子句时, 应该让ORDER BY位于WHERE之后, 否则将会产生错误。

WHERE子句操作符

MySQL支持表中所有条件的操作符

操作符 说明
= 不等于
<> 不等于
!= 不等于
< 小于
<= 小于等于
> 大于
>= 大于等于
BETWEEN 在指定的两个值之间

检查单个值

测试相等的例子

MariaDB [crashcourse]> SELECT prod_name, prod_price FROM products WHERE prod_name='fuses';
+-----------+------------+
| prod_name | prod_price |
+-----------+------------+
| Fuses     |       3.42 |
+-----------+------------+
1 row in set (0.001 sec)

MariaDB [crashcourse]> 

MySQL不区分大小写, 所以fuses与Fuses相匹配

测试小于的例子

MariaDB [crashcourse]> SELECT prod_name, prod_price FROM products WHERE prod_price < 10;
+---------------+------------+
| prod_name     | prod_price |
+---------------+------------+
| .5 ton anvil  |       5.99 |
| 1 ton anvil   |       9.99 |
| Carrots       |       2.50 |
| Fuses         |       3.42 |
| Oil can       |       8.99 |
| Sling         |       4.49 |
| TNT (1 stick) |       2.50 |
+---------------+------------+
7 rows in set (0.002 sec)

MariaDB [crashcourse]> 

不匹配检索

MariaDB [crashcourse]> SELECT vend_id, prod_name FROM products WHERE vend_id <> 1003;
+---------+--------------+
| vend_id | prod_name    |
+---------+--------------+
|    1001 | .5 ton anvil |
|    1001 | 1 ton anvil  |
|    1001 | 2 ton anvil  |
|    1002 | Fuses        |
|    1005 | JetPack 1000 |
|    1005 | JetPack 2000 |
|    1002 | Oil can      |
+---------+--------------+
7 rows in set (0.001 sec)

MariaDB [crashcourse]> 

何时使用引号

单引号用来限定字符串。如果将值与串类型的列进行比较则需要使用单引号, 用来与数值列进行比较的值不用引号

范围值检查

为了检查某个范围的值, 可使用BETWEEN操作符。BETWEEN需要两个值, 即范围的开始值和结束值。

MariaDB [crashcourse]> SELECT prod_name, prod_price FROM products WHERE prod_price BETWEEN 5 AND 10;
+----------------+------------+
| prod_name      | prod_price |
+----------------+------------+
| .5 ton anvil   |       5.99 |
| 1 ton anvil    |       9.99 |
| Bird seed      |      10.00 |
| Oil can        |       8.99 |
| TNT (5 sticks) |      10.00 |
+----------------+------------+
5 rows in set (0.001 sec)

MariaDB [crashcourse]> 

在使用BETWEEN时, 必须指定两个值-所需范围的低端值和高端值。这两个值必须用AND关键字分割。BETWEEN匹配范围中的所有值, 包括指定的开始值和结束值

空值检查

在一个列不包含值时, 称其为包含空值NULL

NULL: 无值, 它与字段包含0、空字符串或仅仅包含空格不同

SELECT语句中有一个特殊的WHERE子句, 可用来检查具有NULL的值, 这个WHERE子句就是IS NULL子句。

MariaDB [crashcourse]> SELECT cust_id FROM customers WHERE cust_email IS NULL;
+---------+
| cust_id |
+---------+
|   10002 |
|   10005 |
+---------+
2 rows in set (0.001 sec)

MariaDB [crashcourse]> 

这条语句返回没有邮箱(空cust_email字段, 不是邮箱为0)的所有顾客id。

NULL与不匹配

在通过过滤选择出不具有特定值的行时, 可能希望返回具有NULL的值的行, 但是不行, 因为未知具有特殊的含义, 数据库不知道它们是否匹配, 所以在匹配过滤或不匹配过滤时不返回它们。

因此, 在过滤数据时, 一定要验证返回数据中确实给出了被过滤列具有NULL的行

原文地址:https://www.cnblogs.com/featherwit/p/13368305.html