美文网首页
五、高级数据过滤

五、高级数据过滤

作者: 曾经像素有点低 | 来源:发表于2023-02-17 22:05 被阅读0次
    工程师加油💪🏻.png
    组合WHERE子句,使用NOT 和 IN 操作符

    1.组合WHERE子句

    SQL允许给出多个WHERE子句,实现多条件过滤。
    这些子句有两种使用方式:
    ①AND
    ②OR

    1.1、ADN操作符

    要通过不止一个列进行过滤,可以使用AND操作符给WHERE子句附加条件。

    例如:检索数量大于50,价格不高于4元的商品

    SELECT  g_number,  g_price,  g_name
    FROM Goods
    WHERE  g_number > 50  AND  g_price <= 4;
    

    AND 用在WHERE子句中的关键词,用来指示检索满足所有给定条件。

    tips:WHERE子句中可以增加多个条件,每个条件之间都要使用AND关键字。

    1.2、OR操作符

    顾名思义,OR操作符指:DBMS检索匹配其中的任一条件的行。(许多DBMS在OR WHERE子句的第一个条件得到满足的情况下,就不在检索第二个条件是否满足,相应的行都会被检索出来)。

    例如:从商品表中检索出商品数量大于50或者商品数量等于10的商品名字和价格。

    SELECT  g_name,  g_price
    FROM  Goods
    WHERE  g_number > 50 OR g_number = 10;
    

    OR
    WHERE子句中的关键字,用来表示检索匹配任一给定条件的行。

    1.3、求值顺序

    WHERE子句可以包含任意数目的AND和OR操作符,允许两者结合以进行高级、复杂的过滤。
    在复杂的过滤需求下,为了达到想要效果,需要考虑到检索的顺序。

    例如:检索出所有 数量大于10的蒙牛牌商品价格小于8的旺旺牌商品 的名称和价格。
    使用圆括号对操作符进行正确分组。

    SELECT g_name,  g_price
    FROM Goods
    WHERE  (g_brand = 'MengNiu' AND g_number > 10) OR (g_brand = 'WangWang' AND g_price < 8);
    
    

    tips:
    ①圆括号()ANDOR具有更高的优先级,所以DBMS优选过滤()中的条件;
    ②任何时候使用具有AND和OR操作符的WHERE子句,都应使用圆括号明确地分组操作符。不要过分依赖默认求职顺序,及时它确实如你希望的那样。使用圆括号没有什么坏处,它能消除歧义。

    2、IN操作符

    IN操作符用来制定条件范围,范围中的每个条件都可以进行匹配。IN取一组由逗号分割 括在圆括号中的合法值。

    SELECT g_name, g_price
    FROM  Goods
    WHERE  g_brand IN ('MengNiu', 'WangWang')
    ORDER BY g_name;
    

    以上语句检索品牌是MengNiu和WangWang的商品。
    在这条语句中,IN操作符后跟由逗号分隔开的合法值,并且合法值是由圆括号括起来的‘蒙牛’和‘旺旺’。

    可以看出IN完成了与OR相同的功能。

    效果等同于:

    SELECT g_name, g_price
    FROM  Goods
    WHERE  brand = 'MengNiu' OR  brand ='WangWang'
    ORDER BY g_name;
    

    使用IN操作符的有点有哪些:

    • ①在有很多合法选项时,IN操作符的语法更清楚,更直观。
    • ②在与其他AND和OR操作符组合使用IN时,求值顺序更容易管理。
    • ③IN操作符一把比一组OR操作符执行得更快(尤其是在很多个合法选项的时候,更明显)。
    • ④IN的最大优点是可以包含其他SELECT语句,能够更动态地建立WHERE语句。

    IN
    WHERE子句中用来指定要匹配值的清单的关键字,功能与OR相当。

    3、NOT操作符

    NOT操作符
    WHERE子句中用来否定其后条件的关键字。

    例如:列出所有厂家 不是 蒙牛的商品

    SELECT  g_name
    FROM  Goods
    WHERE NOT brand = 'MengNiu'
    ORDER BY g_name;
    

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

    相关文章

      网友评论

          本文标题:五、高级数据过滤

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