使用LIKE可以进行模糊匹配,正则表达式也可以用于匹配内容,并且使用起来更加灵活
正则表达式的常用方式:"字段名 REGEXP 匹配模式"
正则表达式 | 说明 |
^ | 匹配字符串开始的位置 |
$ | 匹配字符串结束的位置 |
. | 匹配任何字符 |
[xyz] | 匹配括号内的任意单个字符 |
[m-n] | 匹配m到n的任意单个字符,如[0-9]、[a-z]、[A-Z] |
* | 匹配0或多次前面的字符 |
+ | 匹配1或多次前面的字符 |
? | 匹配0或1次前面的字符 |
x|y | 匹配x或y |
{m} | 匹配m次前面的字符 |
{m,} | 匹配大于或等于m次前面的字符 |
{m,n} | 匹配m到n次前面的字符 |
{0,m} | 匹配0到m次前面的字符 |
(pattern) | 括号中的pattern是一个正则表达式,用于匹配指定pattern模式的一个表达式 |
案例
导入数据
DROP TABLE IF EXISTS contact_info;
CREATE TABLE contact_info(
employee_id VARCHAR(8),
employee_name VARCHAR(8),
email VARCHAR(32)
)
ENGINE = InnoDB
DEFAULT CHARSET = utf8;
INSERT INTO
contact_info (employee_id,employee_name,email)
VALUE ('e001','王明','12345@qq.com')
,('e002','张杰','88888@163.com')
,('e003','王菲菲','wangfeifei@163.com')
,('e004','李飞','lifei001@qq.com');
contact_info表(员工联系方式表)
employee_id:员工号 employee_name:员工姓名 email:个人邮箱
1.查询姓"王"或姓"李"的员工信息
SELECT *
FROM contact_info
WHERE employee_name REGEXP '^[李王]';
结果展示:
这里使用符号"^"限制了员工姓名的姓(字符串的开头内容),使用"[李王]"限制了查询内容为"李"或"王",从而限制了开头的字符为"李"或"王"
2.查询个人邮箱至少包含3个连续的8的员工信息
SELECT *
FROM contact_info
WHERE email REGEXP '8{3,}';
结果展示:
这里在数字8后面使用{3,},代表至少连续出现3个8
3.查询个人邮箱中符号"@"之前含有任意英文字母的员工信息
SELECT *
FROM contact_info
WHERE email REGEXP '[a-zA-Z].*@';
结果展示:
这里使用[a-zA-Z]代表匹配任意英文单词,加上符号"@"的目的是限制英文字母出现在符号"@"之前,加上".*"的目的是使英文字母和@符号之间可以有任意多个或零个其他内容。如果删除这里的".*",就无法获取"李飞"的个人邮箱了,因为其个人邮箱的英文字母和符号"@"中间存在"001",所以匹配不到