WHERE 子句允许根据指定的过滤表达式或条件来指定要选择的行。
注:即是WHERE 子句出现在语句的末尾,但MySQL会首先使用 WHERE 子句中的表达式来选择匹配的行。
1) 与逻辑运算符(AND,OR 等)组合使用;
2) 与比较运算符组合使用形成过滤表达式:等于(=)、不等于(<> 或 !=)、小于(<)、大于(>)、小于或等于(<=)、大于或等于(>=);
3) 与 BETWEEN 组合使用,选择在给定范围之内的值;
4) 与 LIKE 组合使用,匹配基于模式匹配的值;
5) 与 IN 组合使用,指定值是否匹配表中的任何值;
6) IS NULL 检查该值是否为 NULL;
1.AND运算符
1) 介绍如何使用 AND 运算符以组合布尔表达式以形成用于过滤数据的复杂条件。
2) AND 运算符组合 true, false ,和 null 结果:true + null = null,false + null = false。
3) 在MySQL中,0被认为是false,非0被认为是true;
2.OR运算符
1) MySQL 使用 OR 运算符进行短路评估(求值计算)。
2) 运算符优先级:MySQL 会在 AND 运算符之后再对 OR 运算符进行求值,如果想先计算 OR 表达式的值,可加括号;
3. IN 操作符
1) 确定指定的值是否与列表中的值或子查询中的任何值匹配(列表中的值需要用逗号分隔);
3) 举例,IN 操作符与 OR 运算符的使用
SELECT officeCode , city , phone FROM offices WHERE country IN ('USA' , 'France');
SELECT officeCode , city , phone FROM offices WHERE country = 'USA' OR country = 'France';
4. BETWEEN 运算符
expr [NOT] BETWEEN begin_expr AND end_expr;
1) expr , begin_expr 和 end_expr 必须具有相同的数据类型;
2) 如果任何表达式为 NULL ,则 BETWEEN 运算符返回 NULL 值;
3) 可以用 >= 和 <= 运算符来实现相同的结果;
4) BETWEEN 和日期类型数据一起使用,(如:BETWEEN CAST('2013-01-01' AS DATE) AND CAST('2013-01-31' AS DATE););
5. LIKE 操作符
常用于 WHERE 子句中,MySQL 提供两个通配符,用于与 LIKE 一起使用:百分比符号% 和 下划线 _;
1) 百分比(%)通配符允许匹配任何字符串的零个或多个字符;
假设要搜索名字以字符a
开头的员工信息,可以在模式末尾使用百分比通配符(%
),如下所示:
SELECT employeeNumber , lastName , firstName FROM employees WHERE firstName LIKE 'a%';
注:若要搜索名字以字符a
开头的员工信息,可使用:WHERE firstName LIKE '%a';
若要搜索名字包含字符a
的员工信息,可使用:WHERE firstName LIKE '%a%';
MySQL允许将NOT
运算符与LIKE
运算符组合,以找到不匹配特定模式的字符串。
2) 下划线(_)通配符允许匹配任何单个字符;
3) MySQL 与 ESCAPE子句:想要匹配的模式包含通配符,可使用 ESCAPE 子句指定转义字符,以便 MySQL 将通配符解释为文字字符,反斜杠()默认为转义字符。
如下语句,将查询productCode
字段中包含_20
字符串的值:
SELECT productCode , productName FROM products WHERE productCode LIKE '%\_20%';
6. LIMIT 子句
用于约束结果集中的行数。LIMIT 子句接受一个或两个参数,两个参数必须为零或正整数。
SELECT column_1 , column_2 , ... FROM table LIMIT offset , count;
offset 参数指定要返回的第一行的偏移量。第一行偏移量为0,而不是1.
count 指定要返回的最大行数。
1) 获取前N行:LIMIT N;
SELECT customernumber, customername, creditlimit FROM customers LIMIT 5;
2) 获取最高值和最低值,只需要在 LIMIT 前加一行:ORDER BY 子句
SELECT customernumber, customername, creditlimit FROM customers ORDER BY creditlimit DESC LIMIT 5;
注:最低值用ASC
3) 获得第 n 个最高值 ORDER BY creditlimit DESC LIMIT nth-1 , count;
7. IS NULL 操作符
value is NULL ,如果值为 NULL 则返回 true;否则返回 false 。
注:MySQL 没有 内置的 BOOLEAN 类型,它使用 TINYINT(1) 来表示 BOOLEAN 值,即 1 表示 true , 0 表示 false。