MySQL必知必会知识预览 第一章——了解SQL 第二章——MySQL简介 第三章——使用MySQL 第四章——检索数据 第五章——排序检索数据 第六章——过滤数据 第七章——数据过滤 第八章——用通配符进行过滤 第九章——用正则表达式进行搜索 第十章——创建计算字段 第十一章——使用数据处理函数 第十二章——汇总数据 第十三章——分组数据 第十四章——使用子查询 第十五章——联结表 第十六章——创建高级联结 第十七章——组合查询 第十八章——全文本搜索 第十九章——插入数据 第二十章——更新和删除数据 第二十一章——创建和操纵表 第二十二章——使用视图 第二十三章——使用储存过程 第二十四章——使用游标 第二十五章——使用触发器 第二十六章——管理事务处理 第二十七章——全球化和本地化 第二十八章——安全管理 第二十九章——数据库维护 第三十章——改善性能
————————————– 华丽的分隔符 ————————————————–
用来匹配文本的特殊的串(字符集合)。正则表达式用正则表达式语言来建立,正则表达式语言是用来完成匹配特殊的串的一种特殊语言。正则表达式有特殊的语法和指令。MySQL正则表达式只是正则表达式的一个很小的子集。
Regexp关键字告诉MySQL后面所跟的东西作为正则表达式处理。 select prod_id,prod_name from products where prod_name Regexp ‘1000’ order by prod_name; //查询prod_name 与文字正文 1000 匹配的产品;(与like操作符类似)
select prod_id,prod_name from products where prod_name Regexp ‘.000’ order by prod_name; // ‘.’(小数点),正则表达式的一个特殊字符,表示匹配任意一个字符。1000 2000等都是符合要求的。(也可以替换为like)
Regexp与like 的区别 Like与Regexp之间的重要差别:like在没有通配符的情况下匹配的是整个列的内容是否相同,而Regexp则是匹配的文本是否在列值中出现。 select prod_id,prod_name from products where prod_name like‘1000’ order by prod_name;
select prod_id,prod_name from products where prod_name Regexp ‘1000’ order by prod_name;
like 匹配不会查出数据,而Regexp则会返回数据。主要原因就是like在没有通配符的情况下,匹配的是整个列的内容,而在数据库中不存在prod_name 为1000的产品,所以没有数据显示,而Regexp则是在值中进行部分匹配。可以说是Regexp的功能更强大于like。。 Binary关键字 完全匹配,MySQL中的正则表达式在3.23.4之后不区分大小写匹配。利用关键字binary关键字,可以进行大小写区分。
select prod_id,prod_name from products where prod_name Regexp Binary ‘Jet’ order by prod_name;
使用 | 表示 select prod_id,prod_name from products where prod_name regexp ‘1000|2000|3000’ order by prod_name; // ‘|’ 表示OR操作符,它表示匹配其中之一,因此1000和2000,3000都匹配并返回。 多个OR条件,可以利用单个正则表达式进行匹配。
Regexp 匹配几个字符之一,利用 [] 表示、另一种形式的OR
select prod_id,prod_name from products where prod_name regexp ‘[123]tom’ order by prod_name; //[123] tom == 1tom 或者2tom 或者3tom 为[1|2|3]tom的缩写、
注意带括号与不带括号的区别: select prod_id,prod_name from products where prod_name regexp ‘1|2|3|tom’ order by prod_name; // 1|2|3 tom == 1 或者2 或者3tom
[0-9] 0到9数字匹配 [a-z] a到z字母匹配 select prod_id,prod_name from products where prod_name regexp ‘[0-5] tom’ order by prod_name; //注意空格的存在, 0到5之间的任意数字
多数的正则表达式实现是使用单个的反斜杠进行转义特殊字符,以便能使用这些字符本身,但是MySQL要求两个反斜杠(MySQL自己解释一个,正则表达式解释另外一个)
匹配\ 需要三个\
为了匹配特定位置的文本,需要使用定位符
select prod_name from products where prod_name REGEXP '^[0-9\\.]' order by prod_name // 匹配以数字(包括小数点)开头的所有产品,^的双重用途 ^有两种用法,在集合中(用[和]定义),用它来否定集合。否则就是用作串的开始、
select prod_name from products where prod_name REGEXP '^[^0-9\\.]' order by prod_name // 匹配不以数字(包括小数点)开头的所有产品,REGEXP与LIKE 相同作用
select prod_name from products where prod_name REGEXP '^jet$' order by prod_name // ^ 与 $ 的结合使用