五、高级数据过滤

2023-02-17  本文已影响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
WHERE子句中用来指定要匹配值的清单的关键字,功能与OR相当。

3、NOT操作符

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

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

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

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

上一篇下一篇

猜你喜欢

热点阅读