本章讲授如何组合WHERE子句以建立功能更强的更高级的搜索条件。

组合WHERE子句

为了进行更强的过滤控制,MySQL允许给出多个WHERE子句。这些子句可以两种方式使用:以AND子句的方式或OR子句的方式使用。

AND操作符

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

举个栗子:

表是这样的:

mysql like条件命中并显示 mysql like 多个条件 or_操作符


我们想搜索出即是厨房用具,又卖3000块的物品的名称:

SELECT product_name FROM Product WHERE product_type='厨房用具' AND sale_price=3000;

mysql like条件命中并显示 mysql like 多个条件 or_mysql like条件命中并显示_02


上述例子中使用了只包含一个关键字AND的语句,把两个过滤条件组合在一起。还可以添加多个过滤条件,每添加一条就要使用一个AND。

OR操作符

OR操作符与AND操作符不同,它指示MySQL检索匹配任一条件的行。
AND运算符是满足所有条件才行,OR是满足任一条件即可。
举个栗子:
我们想筛选出所有的衣服,和售价大于6000的商品名称。

SELECT product_name FROM Product WHERE product_type='衣服' OR sale_price>6000;

mysql like条件命中并显示 mysql like 多个条件 or_mysql like条件命中并显示_03

计算次序

SQL(像多数语言一样)在处理OR操作符前,优先处理AND操作符。而解决方案也是一样的:把想一起执行的条件组合弄在一个括号里即可。
示例:

SELECT product_name FROM Product WHERE product_type='衣服' AND (product_type='厨房用具' OR sale_price>2000);

能用圆括号就用圆括号,它能消除歧义。

IN操作符

圆括号在WHERE子句中还有另外一种用法。IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。IN取合法值的由逗号分隔的清单,全都括在圆括号中。 注意哦,不是范围,是把待选项都弄在了括号中。

举个栗子:

SELECT * FROM Product WHERE sale_price IN (500,6800);

上面的SQL语句会筛选出所有售价为500或者是6800的商品。
如果你认为IN操作符完成与OR相同的功能,那么你的这种猜测是对的。

IN操作符的优点:

  • 在使用长的合法选项清单时,IN操作符的语法更清楚且更直观。
  • 在使用IN时,计算的次序更容易管理(因为使用的操作符更少)。
  • IN操作符一般比OR操作符清单执行更快。
  • IN的最大优点是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句。(不懂不要紧,日后再说)

NOT操作符

WHERE子句中的NOT操作符有且只有一个功能,那就是否定它之后所跟的任何条件。

SELECT * FROM Product WHERE sale_price NOT IN (500,6800);

mysql like条件命中并显示 mysql like 多个条件 or_搜索_04


为什么使用NOT?对于简单的WHERE子句,使用NOT确实没有什么优势。但在更复杂的子句中,NOT是非常有用的。例如,在与IN操作符联合使用时,NOT使找出与条件列表不匹配的行非常简单。