练习参考网址:http://www.manongjc.com/mysql_basic/mysql-where-basic.html
WHERE
子句允许您基于特定的表达式或条件指定要查询的精确行。
您还将学习如何使用LIMIT子句来约束SELECT
语句返回的行数。
筛选栏位部分数据
SELECT
*
FROM
employees
WHERE
jobtitle = "Sales Rep" and officeCode = 4
where 还有其他筛选条件的话,可使用 and / or运算符
常用运算符:=, !=, <> ,<, > , >= ,<=
还有一些有用的运算符,您可以在WHERE
子句中使用它们以形成更复杂的条件查询,例如:
- BETWEEN 选择指定范围内的值。
- LIKE 基于模式匹配匹配值。
- IN 指定值是否与列表中的任何值匹配。
- IS NULL检查值是否为NULL。
AND
以下是and运算符的运算结果
TRUE | FALSE | NULL | |
---|---|---|---|
TRUE | TRUE | FALSE | NULL |
FALSE | FALSE | FALSE | FALSE |
NULL | NULL | FALSE | NULL |
注意在MySQL中,0被认为是NULL,而非零是真的。
上面SQL语句中,MySQL只是计算1 = 0这一部分:,因为这个表达式返回false,所以MySQL认为整个表达式的结果是false。MySQL不会去判断表达式的剩余部分,即1/0; 如果判断1/0的话,它会发出一个错误消息,因为除数为零。
OR
TRUE | FALSE | NULL | |
TRUE | TRUE | TRUE | TRUE |
FALSE | TRUE | FALSE | NULL |
NULL | TRUE | NULL | NULL |
执行顺序如下:(改变顺序请使用())
- 首先,MySQL计算AND运算符,这是,
false AND false
返回false。 - 第二,MySQL计算OR运算符,这是,
true OR false
返回true。
SELECT customername,country
FROM customers
WHERE
country = "USA"
OR Country = 'france'
输出为:(mysql中对英文的大小写不敏感,对字符的引用可以单引号' 也可以用双引号" )
多个条件查询
SELECT customername,country,creditlimit
FROM customers
WHERE
(country = 'USA' OR Country = 'france')
AND creditlimit >= 100000
IN
IN
运算符允许你确定一个指定字段的值是否在给定列表或子查询中。下面是IN
运算符的语法:
SELECT
column1,column2,...
FROM
table_name
WHERE
(expr|column_1) IN ('value1','value2',...);
与or 的输出结果一致,比 or的语法要简短。
带有子查询的mysql in(子查询:一个表达式中可以调用另一个函数表达式)
因为where 不能与合计字符一起使用,当我们group 一类时,会使用到having 函数。
查询订单额大于60000的数据,
SELECT
orderNumber, sum(quantityOrdered * priceEach)
FROM
orderDetails
GROUP BY orderNumber
HAVING SUM(quantityOrdered * priceEach) > 60000;
查询到order number后,再从主表中查询相关信息
SELECT
orderNumber, customerNumber, status, shippedDate
FROM
orders
WHERE
orderNumber IN (10165,10287,10310);
between
between and常用于判断某个字符是否在给定的范围内,我们经常在SELECT,INSERT,UPDATE和DELETE语句的WHERE子句中使用BETWEEN运算符。
expr [NOT] BETWEEN begin_expr AND end_expr;
expr 与begin_expr end_expr必须具有相同的数据类型,为闭区间(也可使用<>来指定区间)。若表达式为null, 则between运算符返回null值。
如需在products 中查询价格在90-100的产品。
SELECT * FROM
products
WHERE
buyPrice BETWEEN 90 AND 100
like & escape
MySQL提供了两个通配符与LIKE
操作符一起使用:百分比 %
和下划线_
。
- percent(
%
)通配符允许您匹配任何零个或多个字符的字符串。 - 下划线(
_
)通配符允许您匹配任何单个字符。
查询员工表单中以a开头的相关信息:
SELECT
employeeNumber, lastName, firstName
FROM
employees
WHERE
firstName LIKE 'a%'
查询员工表单中以on结尾的相关的信息:
SELECT
employeeNumber, lastName, firstName
FROM
employees
WHERE
lastName LIKE '%on'
如需查找员工信息的名字含on的相关信息:
SELECT
employeeNumber, lastName, firstName
FROM
employees
WHERE
lastname LIKE '%on%'
“_” 下划线则表示只占一个字符:
SELECT
employeeNumber, lastName, firstName
FROM
employees
WHERE
firstname LIKE 'T_M'
若需查询不以B开头的员工,则用not like来查询:(like中字母不分大小写)
SELECT
employeeNumber, lastName, firstName
FROM
employees
WHERE
lastName NOT LIKE 'B%';
通配符:\
SELECT
productCode, productName
FROM
products
WHERE
productCode LIKE '%\_20%';
limit & is null
limit用于约束查询结果中的行数,一个或两个参数都必须为零或者正整数。
SELECT
column1,column2,...
FROM
table
LIMIT offset , count;
语法解释如下:
offset
指定第一行要返回的偏移量。第一行的偏移量(offset)为 0,而不是1;(首个位置)count
指定要返回最大的行数;(往后行数)
limit N;单个参数时为显示前N行资料
limit 常与order by一起使用,执行顺序为先使用order by 再使用limit
查询信用额度最高的5位:(DESC降序排列,ASC升序排列)
SELECT
customernumber,
customername,
creditlimit
FROM
customers
ORDER BY
creditlimit DESC
LIMIT 5;
使用limit获取第N个最大值
1.首先需对数值进行降序排序
2.使用limit的两个参数获取第N 个最大值
如需获取价格第二高的产品信息
SELECT
productName,
buyprice
FROM
products
ORDER BY
buyprice DESC
LIMIT 1, 1;
判断数值是否为NULL:value is null,非空值为 is not null
查询选取没有销售代表的客户:
SELECT
customerName,
country,
salesrepemployeenumber
FROM
customers
WHERE
salesrepemployeenumber IS NULL
ORDER BY customerName;
is null 的特殊功能
为了与ODBC程序兼容,MySQL支持IS NULL
操作符的一些特殊功能。
date 或 datetime类型的字串具有not null约束且含特殊日期如0000-00-00(一般为excel产生,一般可将0000-00-00替换为null),也可使用is null查询这些行