WHERE子句操作符

MySQL 过滤数据(WHERE子句)-LMLPHP

从表products中检索prod_name,prod_price列,返回prod_price=2.5的行

mysql> SELECT  prod_name, prod_price  FROM  products

-> WHERE prod_price = 2.5 ;

从表products中检索prod_name,prod_price列,返回prod_name=fuses的行

mysql> SELECT  prod_name, prod_price  FROM  products

-> WHERE prod_name = 'fuses' ;

从表products中检索prod_name,prod_price列,返回prod_price位于5与10之间的行

mysql> SELECT  prod_name, prod_price  FROM  products

-> WHERE prod_price  BETWEEN 5 AND 10 ;

从表customers中检索cust_name列,返回cust_email为null的行

mysql> SELECT  cust_name  FROM  customers

-> WHERE cust_email  IS  NULL ;

组合WHERE子句

使用逻辑操作符(AND,OR,NOT)组合WHERE子句

从表products中检索prod_name,prod_price,vend_id列,返回vend_id=1003 且 prod_price大于等于10的行

mysql> SELECT  prod_name, prod_price, prod_price  FROM  products

-> WHERE vend_id = 1003  AND  prod_price  >= 10 ;

从表products中检索prod_name,prod_price,vend_id列,返回vend_id=1002 或 vend_id=1003 的行

mysql> SELECT  prod_name, prod_price, prod_price  FROM  products

-> WHERE vend_id = 1002  OR  vend_id = 1003 ;

从表products中检索prod_name,prod_price 列,返回非 prod_price大于等于10的行

mysql> SELECT  prod_name, prod_price, prod_price  FROM  products

-> WHERE  NOT  prod_price  >= 10 ;

可以使用IN代替OR

从表products中检索prod_name,prod_price,vend_id列,返回vend_id=1002 或 vend_id=1003 的行

mysql> SELECT  prod_name, prod_price, prod_price  FROM  products

-> WHERE vend_id  IN  (1002, 1003) ;

使用通配符过滤

针对过滤条件不够明确的可以使用通配符,如从表products中检索产品名prod_name包含字符anvil的所有产品,可以使用通配符  '%anvil%'。

百分号(%)通配符:表示任意多个字符。

从表products中检索prod_name列,返回prod_name以jet开头 的行

mysql> SELECT  prod_name  FROM  products

-> WHERE prod_name  LIKE  'jet%' ;

下划线(_)通配符:表示单个字符。

从表products中检索prod_name列,返回prod_name以jet开头只有4个字符的行

mysql> SELECT  prod_name  FROM  products

-> WHERE prod_name  LIKE  'jet_' ;

使用正则表达式过滤

从表products中检索prod_name列,返回prod_name包含字符串 '1000' 的行

mysql> SELECT  prod_name  FROM  products

-> WHERE prod_name  REGEXP  '1000' ;

通配符与正则表达式的区别:统配符与列的整个值进行匹配,如LIKE  '1000';  表示要匹配的值必须为'1000'。 而正则表达式与列所包含的值匹配,如REGEXP  '1000' ; 表示要匹配的值包含'1000' 。)

从表products中检索prod_name列,返回prod_name包含字符串 '1 ton'   或 '2 ton'  或'3 ton' 的行

mysql> SELECT  prod_name  FROM  products

-> WHERE prod_name  REGEXP  '1|2|3 ton' ;

(也可以WHERE prod_name  REGEXP  '[123] ton' ;  或  WHERE prod_name  REGEXP  '[1-3] ton' ;)

正则表达式字符类

MySQL 过滤数据(WHERE子句)-LMLPHP

重复元字符表示

MySQL 过滤数据(WHERE子句)-LMLPHP

mysql> SELECT  prod_name  FROM  products

-> WHERE prod_name  REGEXP  '\\([0-9] sticks?\\)' ;

由于  '('  为特殊字符,需要前置 \\ 才表示该符号本身,如 \\\ 表示字符 \

[0-9] 表示0至9中的一个数字

sticks?  s后的? 表示s为0个或1个,即  stick 或 sticks

'\\([0-9] sticks?\\)'    表示匹配(3 sticks) 、 (2 stick)等类似的字符串。

mysql> SELECT  prod_name  FROM  products

-> WHERE prod_name  REGEXP  '[[:digit:]]{4}' ;

[:digit:]表示匹配任意数字,{4}要求它前面的数字为4个

'[[:digit:]]{4}' 表示匹配连在一起的任意4位数字

等价于  '[0-9][0-9][0-9][0-9]'

定位符

MySQL 过滤数据(WHERE子句)-LMLPHP

mysql> SELECT  prod_name  FROM  products

-> WHERE prod_name  REGEXP  '^[0-9]' ;

'^[0-9]'  表示第一个字符必须为数字

05-11 11:25