zoukankan      html  css  js  c++  java
  • 高级过滤数据

    -- 高级数据过滤 关键词:WHERE子句 | NOT 和IN 操作符

    -- 组合WHERE子句 (给出多个WHERE子句。有两种使用方式:以AND子句或OR子句的方式使用)

    -- AND操作符(相当于给WHERE子句添加了附加条件)
    SELECT prod_id,prod_price,prod_name
    FROM Products
    WHERE vend_id = 'DLL01' AND prod_price <=4;

    -- 因为只有一个AND子句,最多有两个过滤条件,可以增加多个过滤条件,每个条件间都要使用AND关键字

    -- OR操作符(检索匹配任一条件的行,在DBMS中,在第一个条件满足时,不管第二个条件是否满足,相应的行都被检索出来)
    SELECT prod_name,prod_price
    FROM Products
    WHERE vend_id = 'DLL01' OR vend_id = 'BRS01';

    -- 求值顺序(AND和OR两者结合可以进行复杂高级的过滤)(WHERE子句中可以包含任意数目的AND和OR操作符)
    SELECT prod_name,prod_price
    FROM Products
    WHERE vend_id = 'DLL01' OR vend_id = 'BRS01'
    AND prod_price >= 10;

    我们会发现输出的结果并非达到我们的预期,原因就是SQL在处理OR操作符的时候,优先处理AND操作符,导致操作符被错误的组合成价格在10美元以上的BRS01以及任意价格的DLL01,导致输出错误的结果。

    解决方法是使用圆括号对操作符进行明确分组。

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

    -- IN操作符(用来指定条件范围,范围中的每个条件都可以进行匹配)(由一组逗号分隔、括在圆括号中的合法值)
    SELECT prod_name,prod_price
    FROM Products
    WHERE vend_id IN ('DLL01','BRES01')
    ORDER BY prod_name;

    -----------------------
    SELECT prod_name,prod_price
    FROM Products
    WHERE vend_id = 'DLL01' OR vend_id = 'BRS01'
    ORDER BY prod_name;

    在这里发现使用IN操作符和OR操作符输出的结果大致相当(书中两个表结果完全相同,可能是DBMS的不同导致的差异,也可能是表的外部连接的影响)。但是可以发现IN操作符的优点大概如下:

    1.IN操作符的语法更清楚,更直观。

    2.IN在与(AND/OR)操作符混合使用的时候,求值顺序更容易管理。

    3.IN操作符一般比一组OR操作符执行得更快。

    4.IN操作符最大的优点是可以包含其他SELECT语句,能够更动态地简历WHERE字句。

    -- NOT操作符(特点:从不单独使用;用在过滤的条件前后都可以)(功能:WHERE子句中用来否定其后条件的关键字)
    SELECT prod_name
    FROM Products
    WHERE NOT vend_id = 'DLL01'
    ORDER BY prod_name;

    等同于

    SELECT prod_name
    FROM Products
    WHERE vend_id <> 'DLL01'
    ORDER BY prod_name;

    在简单的WHERE子句中NOT优势并不明显,但是在更加复杂的子句中,NOT非常有用。比如和IN操作符联合使用,可以非常简单地找出与条件列表不匹配的行。

  • 相关阅读:
    触发器
    数据库一键退出脚本
    集合
    Android 自定义控件之继承ViewGroup创建新容器
    web学习测试环境
    ref:ubuntu下如何批量修改文件后缀名
    ref:Adding AFL Bloom Filter to Domato for Fun
    ref:phpstorm配置远程调试(xdebug)(docker中)
    ref:PHP反序列化漏洞成因及漏洞挖掘技巧与案例
    ref:【干货分享】PHP漏洞挖掘——进阶篇
  • 原文地址:https://www.cnblogs.com/ao-yu-a/p/11070333.html
Copyright © 2011-2022 走看看