MySql教程

MySQL_高级数据过滤 AND OR IN NOT

本文主要是介绍MySQL_高级数据过滤 AND OR IN NOT,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

  • 组合WHERE子句
    • AND操作符
    • OR操作符
    • 求值顺序
  • IN操作符
  • NOT操作符

组合WHERE子句

上一节的WHERE子句都是单一条件。
为了实现更强大的过滤功能,SQL允许给出多个WHERE子句,这些子句有2种使用方法,AND子句和OR子句

操作符
用于改变或者联结WHERE子句中的子句的关键字,也称为逻辑操作符

AND操作符

AND
检索满足所有条件

检索出供应商为DLL01,并且,价格小于等于4美元的商品ID,商品名字,商品价格

mysql> SELECT PROD_ID,PROD_NAME,PROD_PRICE FROM PRODUCTS
    -> WHERE VEND_ID = 'DLL01' AND PROD_PRICE <= 4
    -> ORDER BY PROD_NAME;
+---------+---------------------+------------+
| PROD_ID | PROD_NAME           | PROD_PRICE |
+---------+---------------------+------------+
| BNBG02  | Bird bean bag toy   |       3.49 |
| BNBG01  | Fish bean bag toy   |       3.49 |
| BNBG03  | Rabbit bean bag toy |       3.49 |
+---------+---------------------+------------+

OR操作符

OR
检索匹配任一条件即可

检索出供应商为DLL01,或者,价格小于等于4美元的商品ID,商品名字,商品价格

mysql> SELECT PROD_ID,PROD_NAME,PROD_PRICE FROM PRODUCTS
    -> WHERE VEND_ID = 'DLL01' OR PROD_PRICE <= 4;
+---------+---------------------+------------+
| 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 |
| RGAN01  | Raggedy Ann         |       4.99 |
+---------+---------------------+------------+

求值顺序

如果现在我们要求检索出价格大于10美元,且由DLL01或者BRSO1制造的商品,输出的结果中可能会包含价格小于10美元的商品。

出现上述问题,是因为我们的求值顺序不正确

AND的优先级比OR高。SQL优先处理AND语句。这就会导致操作符错误的组合我们的条件

解决的方法就是使用圆括号对操作符进行分组

mysql> SELECT PROD_NAME,PROD_PRICE FROM PRODUCTS
    -> WHERE (VEND_ID = 'DLL01' OR VEND_ID = 'BRS01')
    -> AND PROD_PRICE >= 10;
+--------------------+------------+
| PROD_NAME          | PROD_PRICE |
+--------------------+------------+
| 18 inch teddy bear |      11.99 |
+--------------------+------------+

IN操作符

IN
其用来指定条件范围,范围内的每个条件都可以进行匹配。
其取值由一组逗号分隔,括在圆括号中的合法值

检索由DLL01和BRS01制造的商品

mysql> SELECT PROD_NAME,PROD_PRICE FROM PRODUCTS
    -> WHERE (VEND_ID = 'DLL01' OR VEND_ID = 'BRS01')
    -> ORDER BY PROD_PRICE;
+---------------------+------------+
| PROD_NAME           | PROD_PRICE |
+---------------------+------------+
| Fish bean bag toy   |       3.49 |
| Bird bean bag toy   |       3.49 |
| Rabbit bean bag toy |       3.49 |
| Raggedy Ann         |       4.99 |
| 8 inch teddy bear   |       5.99 |
| 12 inch teddy bear  |       8.99 |
| 18 inch teddy bear  |      11.99 |
+---------------------+------------+

注意!
IN操作符完成了和OR操作符一致的功能

IN操作符的优点

  • 很多条件存在的情况下,IN操作符更加直观、简洁;
  • 存在多个OR操作符或者AND操作符时,使用IN操作符,求值顺序更加容易管理
  • IN操作符比一组OR操作符执行更快
  • IN操作符最大的优点是可以包含其他的SELECT语句,能动态地创建WHERE子句

NOT操作符

NOT
只用来否定其后所跟的任何条件
其从不会单独使用
其可以用在要过滤的列前或者列后

列出除DLL01之外的所有供应商制造的商品

mysql> SELECT PROD_NAME,VEND_ID FROM PRODUCTS
    -> WHERE NOT 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   |
+--------------------+---------+

NOT的优势

对于简单的WHERE子句,使用NOT操作符无法突出其优势

但是,在更复杂的子句中,NOT是非常有用的

例如,在与IN操作符联合使用时,NOT可以非常方便简单的找出与条件列表不匹配的行

这篇关于MySQL_高级数据过滤 AND OR IN NOT的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!