MySQL_过滤数据 WHERE子句 WHERE操作符


只检索需要的数据,则需要指定搜索条件,搜索条件也称为过滤条件
在SELECT语句中,WHERE子句跟在FROM子句之后使用

使用WHERE子句

下述语句,从PRODUCTS表中检索出3列,但是不返回所有的行,只返回PROD_PRICE = 3.49的行

mysql> SELECT PROD_ID,PROD_NAME,PROD_PRICE  FROM PRODUCTS;
+---------+---------------------+------------+
| PROD_ID | PROD_NAME           | PROD_PRICE |
+---------+---------------------+------------+
| BNBG01  | Fish bean bag toy   |       3.49 |
| BNBG02  | Bird bean bag toy   |       3.49 |
| BNBG03  | Rabbit bean bag toy |       3.49 |
| BR01    | 8 inch teddy bear   |       5.99 |
| BR02    | 12 inch teddy bear  |       8.99 |
| BR03    | 18 inch teddy bear  |      11.99 |
| RGAN01  | Raggedy Ann         |       4.99 |
| RYL01   | King doll           |       9.49 |
| RYL02   | Queen doll          |       9.49 |
+---------+---------------------+------------+
9 rows in set (0.00 sec)

mysql> SELECT PROD_ID,PROD_NAME,PROD_PRICE FROM PRODUCTS WHERE PROD_PRICE = 3.49;
+---------+---------------------+------------+
| PROD_ID | PROD_NAME           | PROD_PRICE |
+---------+---------------------+------------+
| BNBG01  | Fish bean bag toy   |       3.49 |
| BNBG02  | Bird bean bag toy   |       3.49 |
| BNBG03  | Rabbit bean bag toy |       3.49 |
+---------+---------------------+------------+

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

SQL过滤 VS 应用过滤

数据也可以在应用层进行过滤,为此,SQL的SELECT语句为客户端应用检索出超出实际所需的数据,然后,客户端代码对返回的数据进行循环,提取出所需的行。

但是!这种做法不妥,优化数据库之后,可以更快速,有效地对数据进行过滤。而让客户端应用处理数据库的工作将会影响应用的性能,并且使创建的应用完全不具备可伸缩性。此外,如果在客户端过滤数据,服务器不得不通过网络发送多余的数据,这将会导致网络资源的浪费。

WHERE子句操作符

在这里插入图片描述

检索单个值

列出所有价格小于10美元的产品

mysql> SELECT PROD_ID,PROD_NAME,PROD_PRICE FROM PRODUCTS WHERE PROD_PRICE < 10;
+---------+---------------------+------------+
| PROD_ID | PROD_NAME           | PROD_PRICE |
+---------+---------------------+------------+
| BNBG01  | Fish bean bag toy   |       3.49 |
| BNBG02  | Bird bean bag toy   |       3.49 |
| BNBG03  | Rabbit bean bag toy |       3.49 |
| BR01    | 8 inch teddy bear   |       5.99 |
| BR02    | 12 inch teddy bear  |       8.99 |
| RGAN01  | Raggedy Ann         |       4.99 |
| RYL01   | King doll           |       9.49 |
| RYL02   | Queen doll          |       9.49 |
+---------+---------------------+------------+

不匹配检查

列出所有不是供应商DLL01制造的产品

mysql> SELECT PROD_NAME,VEND_ID FROM PRODUCTS
    -> WHERE VEND_ID != 'DLL01';
+--------------------+---------+
| PROD_NAME          | VEND_ID |
+--------------------+---------+
| 8 inch teddy bear  | BRS01   |
| 12 inch teddy bear | BRS01   |
| 18 inch teddy bear | BRS01   |
| King doll          | FNG01   |
| Queen doll         | FNG01   |
+--------------------+---------+

注意!因为不同的DBMS,所以,!=不等于操作符会有多种表示方法
注意!单引号用来限制字符串,如果将值与字符串类型的列进行比较,就需要限定引号。用来与数值列进行比较的值不需要引号。

范围值检查

检索某个范围的值,需要用到BETWEEN操作符。
它与其他的WHERE操作符不同,它需要2个值,即范围的开始值和结束值

检索价格在5美元和10美元之间的所有产品

mysql> SELECT PROD_NAME,PROD_PRICE FROM PRODUCTS
    -> WHERE PROD_PRICE BETWEEN 5 AND 10;
+--------------------+------------+
| PROD_NAME          | PROD_PRICE |
+--------------------+------------+
| 8 inch teddy bear  |       5.99 |
| 12 inch teddy bear |       8.99 |
| King doll          |       9.49 |
| Queen doll         |       9.49 |
+--------------------+------------+

空值检查

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

检查空值,不是简单的使用= NULL
使用的子句是IS NULL

检索出用户邮箱为空的用户名列

mysql> SELECT CUST_NAME FROM CUSTOMERS
    -> WHERE CUST_EMAIL IS NULL;
+---------------+
| CUST_NAME     |
+---------------+
| Kids Place    |
| The Toy Store |
+---------------+

NULL VS 非匹配

通过过滤选择不包含指定值的所有行时,我们可能会希望返回包含NULL值的行。但是,这是做不到的。因为未知是有特殊含义的,数据库不知道它们是否匹配,所以,在进行匹配过滤或者非匹配过滤时,不会返回这些结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值