MySQL 过滤数据(WHERE子句)

 

WHERE子句操作符

 

 

从表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> 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> SELECT  prod_name  FROM  products

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

 

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

posted on 2018-08-08 22:28  Deltadeblog  阅读(156)  评论(0编辑  收藏  举报

导航