WHERE子句必须紧跟在FROM子句之后,在WHERE子句中,使用一个条件从FROM子句的中间结果中选取行。语法格式:WHERE <判定运算>

判定运算:结果为true、false或unknown

        WHERE子句会根据条件对FROM子句的中间结果中的行一行一行地进行判断,当条件为ture时,一行就被包含到WHERE子句的中间结果集中。

        在SQL中,返回逻辑值(true或false)的运算符或关键字都可称为谓词,判定运算包括比较运算、模式匹配、范围比较、空值比较和子查询。

 1、比较运算

        比较运算符用于比较两个表达式值,MySQL支持的比较运算符有:=(等于),<(小于),<=(小于等于),>(大于),>=(大于等于),<=>(相等或都等于空),<>(不等于),!=(不等于)。

        表达式是除TEXT和BLOB类型外的表达式。

        当两个表达式值均不为空值(NULL)时,除了“<=>”运算符,其他比较运算返回逻辑值true(真)或false(假)。而当两个表达式值中有一个为空值或都为空值时,将返回unknown。

 例:查询Bookstore数据库book表中书名为“网页程序设计”的记录

SELECT *
FROM book
WHERE 书名='网页程序设计';

 例:查询Book表中单价大于30的图书情况

SELECT *
FROM Book
WHERE 单价>30;

特殊的等于运算符“<=>”,当两个表达式彼此相等或都等于空值时,其运算的值为true,其中有一个空值或都是非空值但不相等时该条件结果就是false,而没有unknown的情况。

 2、逻辑运算

        逻辑运算可以将多个判定运算的结果通过逻辑运算符(AND、OR、XOR和NOT)组成更为复杂的查询条件。

        逻辑运算符用于对某个条件进行测试,运算结果为true(1)或false(0)。MySQL提供的逻辑运算符有:

not或!:逻辑非

or或||:逻辑或

and或&&:逻辑与

xor:逻辑异或

        逻辑运算操作的结果是1或0,分别表示true和false。

3、模式匹配 

        LIKE运算符用于指出一个字符串是否与指定的字符串相匹配,其运算对象可以是char、varchar、text、datetime等类型的数据,返回逻辑值true或false。

语法格式:表达式 [not] LIKE 表达式

        使用LIKE进行模式匹配时,常使用特殊符号_和%进行模糊查询,%代表0个或多个字符,_代表单个字符。

        由于MySQL默认不区分大小写,要区分大小写时需要更换字符集的校对规则。

 例:查询Members表中姓“张”的会员的身份证号、姓名、注册时间

SELECT 身份证号,会员姓名,注册时间
FROM Members
WHERE 会员姓名 LIKE'张%';

 例:查询book表中图书编号倒数第2位为D的图书编号和书名

SELECT 图书编号,书名
FROM book
WHERE 图书编号 LIKE'%D_';

 若要查找特殊符号中的一个或全部(_和%),须使用一个转义字符。如当要查找下划线_时,可以使用ESCAPE'#'来定义#为转义字符,这样,语句中在#后面的_就失去了其原来的特殊意义,被视为正常的下划线_。

例:查询book表中书名中包含下划线的图书。

SELECT 图书编号,书名
FROM book
WHERE 书名 LIKE'%#_%'ESCAPE'#';

 4、范围比较

        用于范围比较的关键字有两个,分别是BETWEEM和IN

        当要查询的条件是某个值的范围时,可以使用BETWEEN关键字。BETWEEN关键字指出查询范围,格式为:表达式 [NOT] BETWEEN 表达式1 AND 表达式2

例:查询Book表中2003年出版的图书的情况 

SELECT *
FROM Book
WHERE 出版时间 BETWEEN'2003-1-1' AND '2003-12-31';

#或
SELECT *
FROM Book
WHERE 出版时间>='2003-1-1' AND 出版时间<='2003-12-31';

 例:若要查询Book表中不在2003年出版的所有图书的情况,则要使用NOT

SELECT *
FROM Book
WHERE 出版时间 NOT BETWEEN '2003-1-1' AND '2003-12-31';

#或
SELECT *
FROM Book
WHERE 出版时间<='2003-1-1' OR 出版时间>='2003-12-31';

        使用IN关键字可以指定一个值表,值表中列出所有可能的值,当与值表中的任一个匹配时,即返回true,否则返回false。

语法格式:表达式 [NOT] IN(子查询 | 表达式1[,...表达式n])

        IN关键字应用最多的是表达子查询,也可以用于OR运算。

 例:查询Book表中“高等教育出版社”,“北京大学出版社”和“人民大学出版社”出版的图书情况

SELECT * FROM Book
WHERE 出版社 IN('高等教育出版社','北京大学出版社','人民大学出版社');

#或
SELECT * FROM Book
WHERE 出版社='高等教育出版社'
OR 出版社='北京大学出版社'
OR 出版社='人民大学出版社';

5、空值比较

        当需要判定一个表达式的值是否为空值时,使用IS NULL关键字。

语法格式:表达式 IS [NOT] NULL

若表达式的值为空值,返回true,否则返回false,当使用not时,结果刚好相反。

例:查询Sell 表中还未发货的订单记录

SELECT *
FROM Sell
WHERE 是否发货 IS NULL;