第五课 高级数据过滤
使用AND、OR、IN、NOT
关键字组合WHERE子句
#使用AND和OR操作符组合WHERE子句
#SQL允许给出多个WHERE子句,这些子句有俩种使用方式:AND子句和OR子句
#AND用在WHERE子句中的关键字,用来指示检索满足所有给定条件的行
#ORDER BY子句应该放在WHERE子句之后
#**OR关键字
**WHERE子句中使用的关键字,用来检索匹配任一给定条件的行
#任何时候使用具有AND和OR操作符的WHERE子句都应该使用圆括号明确分组操作符
#IN操作符:在WHERE子句中用来指定要匹配值的清单的关键字,功能与OR相当
#NOT关键字:WHERE子句用来否定其后条件的关键字
#大多数DBMS允许使用NOT否定任何条件
操作符:
用来联结或改变WHRER子句中的子句的关键字,也称为逻辑操作符
#通过不止一个条件(列)进行过滤,可以使用AND操作符给WHRER子句添加附加条件
所有代码示例products表:
【1】SELECT prod_id,prod_price,prod_name FROM products WHERE vend_id = 'DLL01' AND prod_price<=4;
#AND用在WHERE子句中的关键字,用来指示检索满足所有给定条件的行
#检索由供应商’DLL01’制造并且价格小于等于4美元的所有产品的prod_id,prod_price,prod_name
#AND指示DBMS只返回满足所有给定条件的行
【2】SELECT prod_price,prod_name FROM products WHERE vend_id = 'DLL01' OR vend_id = 'BRS01';
#检索由任一指定供应商 vend_id = ‘DLL01’ OR vend_id = 'BRS01制造的所有产品的prod_price,prod_name
#OR操作符告诉DBMS匹配任一条件而不是同时匹配俩个条件
#OR关键字
WHERE子句中使用的关键字,用来检索匹配任意给定条件的行
#OR操作符指定DBMS检索匹配任一条件的行
#许多DBMS在OR WHERE子句的第一个条件得到满足的情况下,就不再计算第二个条件
【3】SELECT prod_name,prod_price FROM products WHERE vend_id = 'DLL01' OR vend_id = 'BRS01' AND prod_price>10;
#检索供应商 vend_id = 'BRS01’制造的价格 prod_price>10的所有产品,以及 vend_id = ‘DLL01’ 制造的所有产品
#WHERE子句可以包含任意数目的AND个和OR操作符
#求值顺序:SQL在处理OR操作符前优先处理AND操作符,AND再求值过程中优先级更高
【4】SELECT prod_name,prod_price FROM products WHERE (vend_id = 'DLL01' OR vend_id = 'BRS01') AND prod_price>10;
#使用圆括号对操作符进行明确分组
#圆括号具有比AND或OR操作符更高的求值顺序
#DBMS首先过滤圆括号内的OR条件
#检索由供应商vend_id = 'DLL01’或 vend_id = 'BRS01’制造的并且价格 prod_price>10的所有产品
#任何时候使用具有AND和OR操作符的WHERE子句都应该使用圆括号明确分组操作符
【5】SELECT prod_name,prod_price FROM products WHERE vend_id IN('DLL01','BRS01') ORDER BY prod_name;
#IN操作符用来指定条件范围,范围中每个条件都可以进行匹配
#IN取一组由逗号分隔、括在圆括号中的合法值
#检索由制造商 vend_id ='DLL01’和’BRS01’制造的所有商品
#IN操作符后跟由逗号分隔的合法值,这些值必须括在圆括号中
#IN操作符完成与OR相同的功能
【6】SELECT prod_name,prod_price FROM products WHERE vend_id ='DLL01' OR vend_id ='BRS01' ORDER BY prod_name;
#使用IN操作符的原因:
(1)语法简单清楚,更直观
(2)求值顺序更易管理
(3)比OR操作符执行更快
(4)可以包含其他SELECT语句,能够更动态地建立WHERE子句
【7】SELECT prod_name FROM products WHERE NOT vend_id ='DLL01' ORDER BY prod_name;
#检索除vend_id =‘DLL01’ 之外的所有供应商制造的产品
#NOT关键字:WHERE子句用来否定其后条件的关键字
#WHERE子句中的NOT操作符有且只有一个功能,即否定其后所跟的任何条件
#NOT从不单独使用,总是与其他操作符一起使用
#NOT关键字可以用在要过滤的列前,而不是在其后。
#DBMS匹配非’DLL01’ 之外的所有东西
【8】SELECT prod_name FROM products WHERE vend_id <> 'DLL01' ORDER BY prod_name;
#上例也可以用<>操作符来完成
#在与IN操作符联合使用时,NOT可以非常简单的找出与条件列表不匹配的行
#大多数DBMS允许使用NOT否定任何条件
需要完整代码或书籍PDF版的小伙伴可关注微信公众号:菜田里守望者
打开微信扫一扫关注吧,你们的支持就是我的动力
参考文献:
【1】《SQL必知必会》第四版 人民邮电出版社 [美] Ben Forta 著 钟鸣 刘晓霞 译