本章讲授如何组合WHERE子句以建立功能更强的更高级的搜索条件。
以及NOT和IN操作符的使用。
第6章中介绍的所有WHERE子句在过滤数据时使用的都是单一的条 件。
为了进行更强的过滤控制,MySQL允许给出多个WHERE子句。
这些子句可以两种方式使用:以AND子句的方式或OR子句的方式使用。
操作符(operator):用来联结或改变WHERE子句中的子句的关键字,又称逻辑操作符
SELECT prod_id,prod_price,prod_name FROM products WHERE vend_id = 1003 AND prod_price <= 10;
SELECT prod_name,prod_price FROM products WHERE vend_id = 1002 OR vend_id = 1003;
WHERE可包含任意数目的AND和OR操作符。
允许两者结合以进行复杂 和高级的过滤
SQL(像多数语言一样)在处理OR操作符前,优先处理AND操 作符。
SELECT prod_name,prod_price FROM products WHERE vend_id = 1002 OR vend_id = 1003 AND prod_price >= 10;
应该使用圆括号明确地分组相应的操作符
SELECT prod_name,prod_price FROM products WHERE (vend_id = 1002 OR vend_id = 1003) AND prod_price >= 10;

这条SELECT语句与前一条的唯一差别是,这条语句中,前两个 条件用圆括号括了起来。
圆括号具有较AND或OR操作符高 的计算次序,DBMS首先过滤圆括号内的OR条件。
圆括号在WHERE子句中还有另外一种用法。
IN操作符用来指定条件范 围,范围中的每个条件都可以进行匹配。
IN取合法值的由逗号分隔的清 单,全都括在圆括号中。
SELECT prod_name,prod_price FROM products WHERE vend_id IN (1002,1003) ORDER BY prod_name;

此SELECT语句检索供应商1002和1003制造的所有产品。
IN操作符后跟由逗号分隔的合法值清单,整个清单必须括在圆括号 中。
IN操作符类似于OR操作符
在使用长的合法选项清单时,IN操作符的语法更清楚且更直观。
在使用IN时,计算的次序更容易管理(因为使用的操作符更少)。
IN操作符一般比OR操作符清单执行更快。
IN的最大优点是可以包含其他SELECT语句,使得能够更动态地建 立WHERE子句。
WHERE子句中的NOT操作符有且只有一个功能,那就是否定它之后所 跟的任何条件
SELECT prod_name,prod_price,vend_id FROM products WHERE vend_id NOT IN (1002,1003) ORDER BY prod_name;
什么是通配符、如何使用通配符以及怎样使用LIKE操作符进行通配搜索,以便对数据进行复杂过滤。
前面介绍的所有操作符都是针对已知值进行过滤的。
不管是匹配一 个还是多个值,测试大于还是小于已知值,或者检查某个范围的值,共 同点是过滤中使用的值都是已知的。
例如,怎样搜索产品名中包含文本anvil的所有产品?用简单 的比较操作符肯定不行,必须使用通配符。
利用通配符可创建比较特定 数据的搜索模式。
通配符(wildcard):用来匹配值的一部分的特殊字符
搜索模式(search pattern):由字面值、通配符或两者组合构成的搜索跳进
通配符本身实际是SQL的WHERE子句中有特殊含义的字符,SQL支持几 种通配符
为在搜索子句中使用通配符,必须使用LIKE操作符。
LIKE指示MySQL, 后跟的搜索模式利用通配符匹配而不是直接相等匹配进行比较
SELECT prod_id,prod_name FROM products WHERE prod_name LIKE 'jet%';
以jet起头的词。根据MySQL的配置方式,搜索可以是区分大小 写的。如果区分大小写,'jet%'与JetPack 1000将不匹配
通配符可在搜索模式中任意位置使用,并且可以使用多个通配符
SELECT prod_id,prod_name FROM products WHERE prod_name LIKE '%anvil%'; 
SELECT prod_name FROM products WHERE prod_name LIKE 's%e';
另一个有用的通配符是下划线(_)。下划线的用途与%一样,但下划 线只匹配单个字符而不是多个字符。
SELECT prod_id,prod_name FROM products WHERE prod_name LIKE '_ ton anvil';
SELECT prod_id,prod_name FROM products WHERE prod_name LIKE '% ton anvil';
正如所见,MySQL的通配符很有用。
但这种功能是有代价的:通配 符搜索的处理一般要比前面讨论的其他搜索所花时间更长。
这里给出一 些使用通配符要记住的技巧
这里给出一 些使用通配符要记住的技巧