美文网首页
SQL 对结果进行过滤(二)

SQL 对结果进行过滤(二)

作者: 山药鱼儿 | 来源:发表于2022-03-08 20:20 被阅读0次

    本节我们学习如何用 ANDOR 操作符组合成 WHERE 子句,以及 INNOT IN 操作符。

    组合 WHERE 子句

    连载的上一篇文章中,我们在使用 WHERE 子句指定搜索条件时,都是单一的条件。为了执行更复杂的过滤操作,我们可以使用 ANDOR 操作符来组合多个条件。

    AND 操作符

    下面,在 WHERE 子句中使用 AND 操作符,在商品表中检索出由供应商 DLL01 制造且价格小于 4 美元的所有商品。其中,商品表如下:

    检索出由供应商 DLL01 制造且价格小于 4 美元的所有商品的 ID 名称和价格:

    SELECT prod_id, prod_name, prod_price 
    FROM Products
    WHERE vend_id='DLL01' AND prod_price < 4;
    

    运行结果:

    注:只有当使用 AND 关键字接连的条件都满足时,该行才会被检索出来。

    OR 操作符

    OR 操作符的作用与 AND 操作符相反,OR 操作符连接的任意一个条件得到满足,相应的行就会被检索出来。比如,下面的 SQL 检索出厂商 IDDLL01BRS01 的商品信息。

    SELECT prod_id, vend_id, prod_name, prod_price 
    FROM Products
    WHERE vend_id = 'DLL01' OR vend_id = 'BRS01';
    

    检索结果:

    注:OR 用来表示检索匹配任意给定条件的行。

    ANDOR 优先级的问题

    WHERE 子句可以包含任意数目的 ANDOR 操作符,AND 操作符要优先于 OR 被计算。比如下面的 SQL

    SELECT vend_id, prod_name, prod_price 
    FROM Products
    WHERE vend_id = 'DLL01' OR vend_id = 'BRS01' 
          AND prod_price >= 10;
    

    在进行条件判断时,将先判断 vend_id = 'DLL01' 是否成立?如不成立则继续判断是否满足 vend_id = 'BRS01' AND prod_price >= 10 ?也就是说上述检索条件变成了厂商 ID 为 DLL01 的产品或者 厂商 BRS01 提供的产品价格大于 10 的产品。

    检索结果:

    如果我们想改变优先级,可以使用 ()

    SELECT vend_id, prod_name, prod_price 
    FROM Products
    WHERE (vend_id = 'DLL01' OR vend_id = 'BRS01') 
          AND prod_price >= 10;
    

    检索结果:

    使用 () 时,括号中的语句将被优先执行。日常工作中,如果 WHERE 子句中同时包含了 ANDOR 操作符,我们都会使用圆括号明确优先级,而不是依赖默认的顺序。

    IN / NOT IN 操作符

    IN 操作符

    IN 操作符后跟一组由逗号分隔的、括在圆括号中的合法值,用来指定条件范围。还是筛选供应商 DLL01BRS01 的产品信息,我们可以使用 IN 来改写原来的 OR 条件:

    SELECT prod_id, vend_id, prod_name, prod_price 
    FROM Products
    WHERE vend_id IN ('DLL01','BRS01');
    

    运行结果:

    既然 OR 可以完成的工作,为什么还须要使用 IN 呢?

    • 在合法值比较多时,显然 IN 语法更清晰、直观;
    • IN 操作符一般比一组 OR 效率更高;
    • IN 最大的有点是可以包含其他 SELECT 语句。

    NOT 操作符

    NOT 操作符用于否定其后所跟的任何条件,其中最常见的组合便是 NOT IN 了。筛选出非供应商 DLL01BRS01 的产品信息:

    SELECT prod_id, vend_id, prod_name, prod_price 
    FROM Products
    WHERE vend_id  NOT IN ('DLL01','BRS01');
    

    筛选结果:

    案例实践

    1、筛选出美国加利福尼亚州的供应商:

    SQL 语句如下:

    SELECT vend_name
    FROM Vendors
    WHERE vend_country='USA' AND vend_state='CA';
    

    运行结果:

    2、从订单表中,检索出产品 BR01 BR02BR03 订购总数大于或等于 100 个的订单号、产品 ID 以及订购数量。

    SQL 语句如下:

    SELECT order_num, prod_id, quantity
    FROM OrderItems
    WHERE prod_id IN ('BR01','BR02','BR03') AND quantity >= 100;
    

    检索结果:

    相关文章

      网友评论

          本文标题:SQL 对结果进行过滤(二)

          本文链接:https://www.haomeiwen.com/subject/qrnarrtx.html