过滤数据(WHERE)子句
过滤数据
SELECT * FROM 表名 WHERE 条件
例:
SELECT * FROM products WHERE prod_price='14.99'
WHERE子句的位置 在同时使用ORDERBY和WHERE子句时,应该让ORDER BY位于WHERE之后,否则将会产生错误!
例:
SELECT * FROM products WHERE prod_price='14.99' ORDER BY prod_price
WHERE子句操作符
操作符 | 说明 |
---|---|
= | 等于 |
<> | 不等于 |
!= | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
BETWEEN | 在指定的两个值之间 |
单值查询
注意! MySQL在执行匹配时默认不区分大小写,如fuses与Fuses匹配。
SELECT * FROM 表名 WHERE prod_name=‘fuses’;
不匹配查询
SELECT * FROM 表名 WHERE 列名 <> '值';
或者 SELECT * FROM 表名 WHERE 列名 != '值';
如:输出不是fuses的结果
SELECT * FROM products WHERE prod_name <> 'fuses'
或者 SELECT * FROM products WHERE prod_name != 'fuses';
何时使用引号 如果仔细观察上述WHERE子句中使用的条件, 会看到有的值括在单引号内(如前面使用的’fuses’)而有的值未括起来。单引号用来限定字符串。如果将值与串类型的列进行比较,则需要限定引号。用来与数值列进行比较的值不用引号。
范围查询
SELECT * FROM 表名 WHERE 列名 BETWEEN 条件A AND 条件B ;
例:查询价格在1~11之间的记录
SELECT * FROM products WHERE prod_price BETWEEN 1 and 11
空值查询
注意:NULL 无值(no value),它与字段包含0、空字符串或仅仅包含空格不同。
SELECT * FROM 表名 WHERE 列名 IS NULL ;
并列查询(AND操作符)
SELECT * FROM 表名 WHERE 条件1 AND 条件2;
例:供应商1003,价格<30的产品信息
SELECT * FROM products WHERE prod_price <30 AND vend_id =1003;
任一查询(OR操作符)
SELECT * FROM 表名 WHERE 条件1 OR 条件2;
例:供应商是1003或者价格<30的产品信息
SELECT * FROM products WHERE prod_price <30 OR vend_id =1003;
AND OR 优先级
SQL(像多数语言一样)在处理OR操作符前,优先处理AND操作符。
在WHERE子句中使用圆括号,消除奇异。
范围查询(IN操作符)
IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。IN取合法值的由逗号分隔的清单,全都括在圆括号中。
下列两行代码等价
SELECT * FROM 表名 WHERE 列名 IN (条件1,条件2);
SELECT * FROM 表名 WHERE 列名 = 条件1 OR 列名 = 条件2;
IN操作符一般比OR操作符清单执行更快。
不匹配查询(NOT IN操作符)
NOT IN操作符在WHERE子句中用来否定后跟条件的关键字。
下列两行代码等价
SELECT * FROM 表名 WHERE 列名 NOT IN (条件1,条件2);
SELECT * FROM 表名 WHERE 列名 != 条件1 AND 列名 != 条件2;
例:查询所有供应商不是1002,1003 的产品。
SELECT * FROM products WHERE vend_id NOT IN (1002,1003);
SELECT * FROM products WHERE vend_id !=1002 AND vend_id!=1003;
MySQL中的NOT MySQL支持使用NOT对IN、BETWEEN和EXISTS子句取反。
用通配符进行过滤(LIKE操作符)
通配符(wildcard) 用来匹配值的一部分的特殊字符。
搜索模式(search pattern) 由字面值、通配符或两者组合构成的搜索条件。
MySQL的通配符很有用,但这种功能是有代价的,通配符搜索的处理一般要比前面讨论的其他搜索所花时间更长。不要过度使用通配符,如果其他操作符能达到相同的目的,应该使用其他操作符。确实需要使用通配符时,除非绝对有必要,否则不要把它们用在搜索模式的开始处。把通配符置于搜索模式的开始处,搜索起来是最慢的。
百分号(%)通配符
最常使用的通配符是百分号(%)。在搜索串中,%表示任何字符出现任意次数。
SELECT * FROM 表名 WHERE 列名 LIKE '条件%'
例如,为了找出所有以词jet起头的顾客姓名,可使用以下SELECT 语句:
SELECT * FROM customers WHERE cust_name LIKE 'jet%'
jet结尾
SELECT * FROM customers WHERE cust_name LIKE '%jet'
包含jet
SELECT * FROM customers WHERE cust_name LIKE '%jet%'
注意:虽然似乎%通配符可以匹配任何东西,但有一个例外,即NULL。即使是WHERE prod_name LIKE '%'也不能匹配用值NULL作为产品名的行。只能用下面语句匹配NULL
SELECT * FROM 表名 WHERE 列名 IS NULL;
下划线(_)通配符
下划线的用途与%一样,但下划线只匹配单个字符而不是多个字符,_总是匹配一个字符,不能多也不能少。
SELECT * FROM 表名 WHERE 列名 LIKE '条件%'
例:查询供应商ID(4位数)是100开头的,100_
SELECT * FROM products WHERE vend_id LIKE '100_';
正则表达式
SELECT * FROM 表名 WHERE 列名 REGEXP '正则表达式'