SQL正则表达式、列表运算、涉及null的查询

本文介绍了MySQL中如何使用正则表达式进行数据查询,包括开始和结束字符匹配、通配符、重复字符、特定字符串匹配、字符集合以及范围匹配等。同时,讲解了`in`和`not in`关键字在列表运算中的应用,以及如何处理`null`值的查询。通过实例展示了如何查询特定开头或结尾的家庭住址、包含特定数字的电话号码以及不同系别学生的姓名和性别。
摘要由CSDN通过智能技术生成

正则表达式       

        正则表达式通常用来检索或替换符合某个模式的文本内容,根据指定的匹配模式匹配文本中符合要求的特殊字符串。例如,从一个文本文件中提取电话号码,查找一篇文章中重复的单词或者替换用户输入的某些词语等,正则表达式强大而且灵活,可以应用于非常复杂的查询当中


在MySQL中使用regexp关键字指定正则表达式的字符匹配模式,其基本语法如下

where 字段名 regepx '操作符';
字符匹配选项表
选项说明示例
匹配文本的开始字符^b: 匹配以字母b开头的字符串,例如:book、big、banana
$匹配文本的结束字符st$:匹配以字符st结尾的字符串,例如:test、resist、persist
.匹配任何单个字符b.t:匹配任何b和t之间有一个字符的字符串,例如:bit、bat、but、
*匹配零个或多个在它前面的字符*n:匹配字符串n前面有任意多个字符的字符串,例如:fn、ann、faan、abcdn
+匹配前面的字符1次或多次ba+:匹配以b开头后面紧跟至少一个a的字符串,例如:ba、bay、bare、battle
<字符串>匹配包含指定字符串的文本fa:字符串至少包含fa,例如:fan、afa、faad
[字符集合]匹配字符集合中的任何一个字符[xz]:匹配x或z,例如:dizzy、zebra、x-ray、extra
[^]匹配不在括号中的任何字符[^abc]:匹配不包含a、b、c的字符串
字符串{n,}匹配单面的字符串至少n次b{2,}:匹配两个或更多的b,例如bb、bbbbb、bbbbbb
字符串{m,n}匹配前面的字符串至少m次,至多n次。如果n为0,则m为可选参数b{2,4}:匹配至少2个b,最多4个b,如bb、bbb、bbbb

举例

查询家庭住址以“济”开头的学生信息

select *
from stundet
where saddress regexp '济';

查询家庭住址以“号”结尾的学生信息

select *
from stundet
where saddress regepx '号$';

查询学生电话号码出现“66”数字的学生信息

select *
from student
where sphone regexp '66';

列表运算

在where子句中,如果需要确定表达式的取值是否属于某一列表值之一时,可以使用关键字in或not in来限定查询条件。

语法格式如下

where 表达式 [not] in 值列表

其中,not为可选项,当值不止一个时,需要将这些值用括号括起来,各列表之间使用逗号(,)隔开

举例

查询信息工程系、软件工程系和计算机工程系学生的姓名和性别

select sname,ssex
from stundet
where sdpet in('计算机工程系','软件工程系','信息工程系');

其中,条件表达式的另一种表示方法是sdpet='计算机工程系'or sdpet='软件工程系' or sdpet='信息工程系';


涉及null查询

当数据表中值为null时,可以使用is null关键字的where子句查询,反之要查询数据表的值不为null时,可以使用is not null关键字

语法格式如下

where 字段 is [not] null;

举例

因为某些学生选修课程后没有参加考试,所以有选修记录,但没有考试,查询缺少成绩的学生的学号和相应的课程号

select sno,con
from sc
where degrree is null;

这里的 is  不能用 = 代替

查询所有有成绩的学生学号和课程号

select sno,con
from sc
where dergree is not null;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值