1.大纲
-
WHERE - 学习如何使用
WHERE
子句根据指定的条件过滤行记录。 -
AND运算符 - 介绍如何使用
AND
运算符以组合布尔表达式以形成用于过滤数据的复杂条件。 -
OR运算符 - 介绍
OR
运算符,并展示如何将OR
运算符与AND
运算符组合以过滤数据。 -
IN运算符 - 学习如何在
WHERE
子句中使用IN
运算符来确定值是否匹配列表或子查询中的指定值。 -
BETWEEN运算符 - 显示如何使用
BETWEEN
运算符来根据指定范围查询数据。 - LIKE - 提供基于特定模式匹配查询数据的技术示例,以执行一些模糊查询。
-
LIMIT子句 - 使用
LIMIT
来限制SELECT
语句返回的行数 -
IS NULL - 使用
IS NULL
运算符测试值是否为NULL
。
2.where
WHERE
子句允许根据指定的过滤表达式或条件来指定要选择的行。
您还将学习如何使用LIMIT子句来限制SELECT
语句返回的行数。
即使WHERE
子句出现在语句的末尾,但MySQL会首先使用WHERE
子句中的表达式来选择匹配的行。
MySQL从SELECT
子句中的选择列表中选择列。
可以像上面的查询一样形成一个简单的条件,或者是将多个表达式与逻辑运算符(如AND,OR等)组合在一起的一个非常复杂的例子。
二:AND
1.举例
SELECT lastname, firstname, jobtitle FROM employees WHERE jobtitle = 'Sales Rep' AND officeCode = 1;
2.比较运算符
3.AND
SELECT lastname, firstname, officeCode FROM employees WHERE officecode > 5;
4.表结构
desc customers;
三:IN
1.IN
运算符来确定指定列的值是否匹配列表中的值或子查询中的任何值。
IN运算符允许您确定指定的值是否与列表中的值或子查询中的任何值匹配
用法:
SELECT
column1,column2,... FROM table_name WHERE (expr|column_1) IN ('value1','value2',...);
SELECT
column1,column2,... FROM table_name WHERE (expr|column_1) IN ('value1','value2',...);
解释:
可以在WHERE子句中与IN运算符一起使用,可使用列或表达式(expr)。
列表中的值必须用逗号(,)分隔。
IN操作符也可以用在其他语句(如INSERT,UPDATE,DELETE等)的WHERE子句中
SELECT officeCode, city, phone, country FROM offices WHERE country IN ('USA' , 'France');
也可以使用OR
运算符执行得到与上面查询相同的结果
SELECT officeCode, city, phone FROM offices WHERE country = 'USA' OR country = 'France';
如果列表中有很多值,使用多个OR
运算符则会构造一个非常长的语句。 因此,使用IN
运算符则会缩短查询并使查询更易读。
2.NOT IN
SELECT officeCode, city, phone FROM offices WHERE country NOT IN( 'USA', 'France');
3.IN与子查询
IN
运算符通常用于子查询。子查询不提供常量值列表,而是提供值列表。
使用表:
例如,如果要查找总金额大于60000
的订单,则使用IN
运算符查询如下所示:
SELECT
orderNumber, customerNumber, status, shippedDate
FROM
orders
WHERE
orderNumber IN (SELECT
orderNumber
FROM
orderDetails
GROUP BY orderNumber
HAVING SUM(quantityOrdered * priceEach) > 60000);
重要的是group by后,再根据分组的结果进行sum聚合。
四:Between
1.between
BETWEEN
运算符允许指定要测试的值范围
SELECT
productCode, productName, buyPrice
FROM
products
WHERE
buyPrice BETWEEN 90 AND 100;
也可以通过使用大于或等于(>=
)和小于或等于(<=
)运算符来实现相同的结果。
2.NOT BETWEEN
要查找购买价格不在20
到100
(含20
到100
)之间的产品,可将BETWEEN
运算符与NOT
运算符组合使用
SELECT
productCode, productName, buyPrice
FROM products WHERE buyPrice NOT BETWEEN 20 AND 100;
SELECT
productCode, productName, buyPrice
FROM products WHERE buyPrice NOT BETWEEN 20 AND 100;
3.Be't'ween与日期类型
当使用BETWEEN
运算符与日期类型值时,要获得最佳结果,应该使用类型转换将列或表达式的类型显式转换为DATE类型。
要查询获取所需日期(requiredDate
)从2013-01-01
到2013-01-31
的所有订单
SELECT orderNumber,
requiredDate,
status
FROM orders
WHERE requireddate
BETWEEN CAST('2013-01-01' AS DATE)
AND CAST('2013-01-31' AS DATE);
五:LIKE
1.LIKE
MySQL提供两个通配符,用于与LIKE
运算符一起使用,它们分别是:百分比符号 - %
和下划线 - _
百分比(%)通配符允许匹配任何字符串的零个或多个字符。
下划线(_)通配符允许匹配任何单个字符。
2.NOT与like语句
MySQL允许将NOT
运算符与LIKE
运算符组合,以找到不匹配特定模式的字符串。
SELECT
employeeNumber, lastName, firstName
FROM employees WHERE lastName NOT LIKE 'B%';
SELECT
employeeNumber, lastName, firstName
FROM employees WHERE lastName NOT LIKE 'B%';
3.like与escape
有时想要匹配的模式包含通配符,例如10%
,_20
等这样的字符串时。在这种情况下,您可以使用ESCAPE
子句指定转义字符,以便MySQL将通配符解释为文字字符。如果未明确指定转义字符,则反斜杠字符\
是默认转义字符。
SELECT
productCode, productName
FROM
products
WHERE productCode LIKE '%\_20%';
SELECT
productCode, productName
FROM
products
WHERE productCode LIKE '%\_20%';
也可以使用ESCAPE
子句指定一个不同的转义字符,例如$
:
SELECT
productCode, productName
FROM
products
WHERE productCode LIKE '%$_20%' ESCAPE '$';
SELECT
productCode, productName
FROM
products
WHERE productCode LIKE '%$_20%' ESCAPE '$';
六:LIMIT
1.LIMIT
在SELECT
语句中使用LIMIT
子句来约束结果集中的行数。LIMIT
子句接受一个或两个参数。两个参数的值必须为零或正整数。
语法:
当您使用带有一个参数的LIMIT
子句时,此参数将用于确定从结果集的开头返回的最大行数。
2.与order by一起使用
找到倒数5个的值。
SELECT customernumber, customername, creditlimit
FROM customers ORDER BY creditlimit DESC LIMIT 5;
SELECT customernumber, customername, creditlimit
FROM customers ORDER BY creditlimit DESC LIMIT 5;
找出结果集中价格第二高的产品。可以使用LIMIT
子句来选择第二行,如以下查询(注意:偏移量从0
开始,所以要指定从1
开始,然后取一行记录):