————讲解如何组合WHERE子句以建立功能更强、更高级的搜索条件

1. 操作符

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

1.1 AND 操作符

  1. SELECT prod_name, prod_price, prod_name FROM Products WHERE vend_id = 'DLL01' AND prod_price BETWEEN 5 AND 10; -- 列出所有价格在510美元之间以及供应商为DLL01的产品

1.2 OR 操作符

许多DBMS在第一个条件满足后,便不再计算第二个条件了

SELECT prod_name, prod_price FROM Products WHERE vend_id = 'DLL01' OR prod_price BETWEEN 5 AND 10;        -- 列出所有价格在5到10美元之间或供应商为DLL01的产品

1.3 求值顺序

  • 注意:AND 操作符比 OR 操作符优先级更高

    SELECT prod_name, prod_price, vend_id FROM Products WHERE (vend_id = 'DLL01' OR vend_id = 'BRS01') AND prod_price BETWEEN 5 AND 10;        -- 列出所有供应商为DLL01或BRS01以及价格在5到10美元之间的产品
    

    1.4 IN操作符

    优点:

  • 语法更清晰、直观

  • 求值顺序更容易管理
  • IN操作符一般比OR执行的更快
  • IN操作符最大的优点是可以包含其他的SELECT语句,能够更动态地建立WHERE子句
    SELECT prod_name, prod_price, vend_id FROM Products WHERE vend_id IN('DLL01','BRS01') AND prod_price BETWEEN 5 AND 10;        -- 列出所有供应商为DLL01或BRS01以及价格在5到10美元之间的产品
    

    1.5 NOT操作符

    用来否定其后子句的关键字
    SELECT prod_name, prod_price, vend_id FROM Products WHERE NOT vend_id = 'DLL01' ORDER BY prod_name;        -- 列出所有供应商不为DLL01产品,按照prod_name升序排序
    
    等同于<>
    SELECT prod_name, prod_price, vend_id FROM Products WHERE vend_id <> 'DLL01' ORDER BY prod_name;        -- 列出所有供应商不为DLL01产品,按照prod_name升序排序
    
    说明:MariaDB中的NOT
    MariaDB支持使用NOT否定IN、BETWEEN和EXISTS子句。大多数DBMS允许使用NOT否定任何条件