博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL学习笔记(四)
阅读量:5305 次
发布时间:2019-06-14

本文共 4358 字,大约阅读时间需要 14 分钟。

1、用通配符进行过滤

  通配符(wildcard) 用来匹配值的一部分的特殊字符

  百分号 (%) 通配符  %表示任何字符出现任意次数  

1 mysql> SELECT prod_id, prod_name 2     -> FROM products 3     -> WHERE prod_name LIKE 'jet%'; 4 +---------+--------------+ 5 | prod_id | prod_name    | 6 +---------+--------------+ 7 | JP1000  | JetPack 1000 | 8 | JP2000  | JetPack 2000 | 9 +---------+--------------+10 2 rows in set (0.05 sec)

  通配符可在搜索模式中任意位置使用,并且可以使用多个通配符。

1 mysql> SELECT prod_id, prod_name 2     -> FROM products 3     -> WHERE prod_name LIKE '%anvil%'; 4 +---------+--------------+ 5 | prod_id | prod_name    | 6 +---------+--------------+ 7 | ANV01   | .5 ton anvil | 8 | ANV02   | 1 ton anvil  | 9 | ANV03   | 2 ton anvil  |10 +---------+--------------+11 3 rows in set (0.01 sec)

  通配符(%)不能匹配NULL

  下划线 (_) 通配符  只能匹配单个字符

1 mysql> SELECT prod_id, prod_name 2     -> FROM products 3     -> WHERE prod_name LIKE '_ ton anvil'; 4 +---------+-------------+ 5 | prod_id | prod_name   | 6 +---------+-------------+ 7 | ANV02   | 1 ton anvil | 8 | ANV03   | 2 ton anvil | 9 +---------+-------------+10 2 rows in set (0.00 sec)

  使用通配符的技巧

  (1) 不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符。

  (2) 在确定需要使用通配符时,除非绝对有必要,否则不要把它们用在搜索模式的开始处。把通配符至于搜索模式的开始处,搜索起来是最慢的。

  (3) 仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据。

2、用正则表达式进行搜索

  基本字符匹配

1 mysql> SELECT prod_name 2     -> FROM products 3     -> WHERE prod_name REGEXP '1000' 4     -> ORDER BY prod_name; 5 +--------------+ 6 | prod_name    | 7 +--------------+ 8 | JetPack 1000 | 9 +--------------+10 1 row in set (0.03 sec)11 12 mysql> SELECT prod_name13     -> FROM products14     -> WHERE prod_name REGEXP '.000'15     -> ORDER BY prod_name;16 +--------------+17 | prod_name    |18 +--------------+19 | JetPack 1000 |20 | JetPack 2000 |21 +--------------+22 2 rows in set (0.00 sec)

  '.'是正则表达式语言中的一个特殊的字符。它表示匹配任意一个字符。

  LIKE匹配整个列。如果被匹配的文本在列值中出现,LIKE将不会找到它,相应的行也不会返回(除非使用通配符)。而REGEXP在列值内进行匹配,如果被匹配的文本在列

值中出现,REGEXP将会找到它,相应的行将被返回。

  OR匹配

1 mysql> SELECT prod_name 2     -> FROM products 3     -> WHERE prod_name REGEXP '1000|2000' 4     -> ORDER BY prod_name; 5 +--------------+ 6 | prod_name    | 7 +--------------+ 8 | JetPack 1000 | 9 | JetPack 2000 |10 +--------------+11 2 rows in set (0.03 sec)

  匹配几个字符之一

1 mysql> SELECT prod_name 2     -> FROM products 3     -> WHERE prod_name REGEXP '[123] Ton' 4     -> ORDER BY prod_name; 5 +-------------+ 6 | prod_name   | 7 +-------------+ 8 | 1 ton anvil | 9 | 2 ton anvil |10 +-------------+11 2 rows in set (0.00 sec)

  匹配范围

1 mysql> SELECT prod_name 2     -> FROM products 3     -> WHERE prod_name REGEXP '[1-5] Ton' 4     -> ORDER BY prod_name; 5 +--------------+ 6 | prod_name    | 7 +--------------+ 8 | .5 ton anvil | 9 | 1 ton anvil  |10 | 2 ton anvil  |11 +--------------+12 3 rows in set (0.00 sec)

  为了匹配特殊字符,必须用\\为前导。\\-表示查找-,\\.表示查找.

1 mysql> SELECT vend_name 2     -> FROM vendors 3     -> WHERE vend_name REGEXP '\\.' 4     -> ORDER BY vend_name; 5 +--------------+ 6 | vend_name    | 7 +--------------+ 8 | Furball Inc. | 9 +--------------+10 1 row in set (0.05 sec)

  \\也用来引用元字符

\\f           <==>           换页

\\n           <==>          换行

\\r           <==>           回车

\\t           <==>           制表

\\v           <==>           纵向制表

匹配字符类


  类          说明


 

[:alnum:]        任意字母和数字(同[a-zA-Z0-9])

[:alpha:]        任意字符

[:blank:]        空格和制表

[:cntrl:]         ASCII控制字符(ASCII0到31和127)

[:digit:]         任意数字

[:graph:]        与[:printf:]相同,但不包含空格

[:lower:]        任意小写字母

[:print:]        任意可打印字符

[:punct:]        既不在[:alnum:]又不在[:cntrl:]中的任意字符

[:space:]        包含空格在内的任意空白字符

[:upper:]        任意大写字母

[:xdigit:]        任意十六进制数字


 

  匹配多个实例(举例)

1 mysql> SELECT prod_name 2     -> FROM products 3     -> WHERE prod_name REGEXP '\\([0-9] sticks?\\)' 4     -> ORDER BY prod_name; 5 +----------------+ 6 | prod_name      | 7 +----------------+ 8 | TNT (1 stick)  | 9 | TNT (5 sticks) |10 +----------------+11 2 rows in set (0.00 sec)
1 mysql> SELECT prod_name 2     -> FROM products 3     -> WHERE prod_name REGEXP '[[:digit:]]{4}'; 4 +--------------+ 5 | prod_name    | 6 +--------------+ 7 | JetPack 1000 | 8 | JetPack 2000 | 9 +--------------+10 2 rows in set (0.00 sec)

  定位符

1 mysql> SELECT prod_name 2     -> FROM products 3     -> WHERE prod_name REGEXP '^[0-9\\.]' 4     -> ORDER BY prod_name; 5 +--------------+ 6 | prod_name    | 7 +--------------+ 8 | .5 ton anvil | 9 | 1 ton anvil  |10 | 2 ton anvil  |11 +--------------+12 3 rows in set (0.00 sec)

转载于:https://www.cnblogs.com/liushaobo/archive/2013/04/09/3009178.html

你可能感兴趣的文章