五、高级数据过滤
组合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:
①圆括号()
比AND
、OR
具有更高的优先级,所以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可以非常简单地找出与条件列表不匹配的行。