MysqL必知必会知识预览
第一章——了解sql
第二章——MysqL简介
第三章——使用MysqL
第四章——检索数据
第五章——排序检索数据
第六章——过滤数据
第七章——数据过滤
第八章——用通配符进行过滤
第九章——用正则表达式进行搜索
第十章——创建计算字段
第十一章——使用数据处理函数
第十二章——汇总数据
第十三章——分组数据
第十四章——使用子查询
第十五章——联结表
第十六章——创建高级联结
第十七章——组合查询
第十八章——全文本搜索
第十九章——插入数据
第二十章——更新和删除数据
第二十一章——创建和操纵表
第二十二章——使用视图
第二十三章——使用储存过程
第二十四章——使用游标
第二十五章——使用触发器
第二十六章——管理事务处理
第二十七章——全球化和本地化
第二十八章——安全管理
第二十九章——数据库维护
第三十章——改善性能
————————————– 华丽的分隔符 ————————————————–
第九章—正则表达式
正则表达式
用来匹配文本的特殊的串(字符集合)。正则表达式用正则表达式语言来建立,正则表达式语言是用来完成匹配特殊的串的一种特殊语言。正则表达式有特殊的语法和指令。MysqL正则表达式只是正则表达式的一个很小的子集。
Regexp
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;
Regexp 进行OR匹配
使用 | 表示
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
Regexp 进行范围匹配
[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之间的任意数字
Regexp 进行特殊字符匹配
select vend_name from vendors where vend_name REGEXP '\\.' ORDER BY vend_name;
// \\.匹配.
空白元字符匹配模式(换行,回车其余的可以忘记)
\\f ==== 换页
\\n ==== 换行
\\r ==== 回车
\\t ==== 制表 tab按键
\\v ==== 纵向制表
\\\ ==== \(反斜杠)
为什么使用\\进行正则表达式匹配??
多数的正则表达式实现是使用单个的反斜杠进行转义特殊字符,以便能使用这些字符本身,但是MysqL要求两个反斜杠(MysqL自己解释一个,正则表达式解释另外一个)
匹配\ 需要三个\
Regexp 进行字符类匹配
Regexp 匹配多个实例
select prod_name from products where prod_name REGEXP '\\([0-9] sticks?\\)' order by prod_name
// \\( 匹配括号(,[0-9] 匹配任意数字 sticks? 匹配stick或者sticks s后面的?使s可选,?匹配他前面的任意字符字符的0次或者1次
select prod_name from products where prod_name REGEXP '[[:digit:]]{4}' order by prod_name
// 匹配连在一起的4位数字
定位符
为了匹配特定位置的文本,需要使用定位符
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
// ^ 与 $ 的结合使用