【MySQL】数据库之高级SQL查询语句补充
目录
一、补充正则表达式的查询regexp
要知道 在MySQL中使用正则表达式,一定要在前面加上regexp
正则表达式
^ 匹配文本的开始字符 ‘^bd’ 匹配以 bd 开头的字符串
$ 匹配文本的结束字符 ‘qn$’ 匹配以 qn 结尾的字符串
. 匹配任何单个字符 ‘s.t’ 匹配任何 s 和 t 之间有一个字符的字符串
* 匹配零个或多个在它前面的字符 ‘fo*t’ 匹配 t 前面有任意个 o
+ 匹配前面的字符 1 次或多次 ‘hom+’ 匹配以 ho 开头,后面至少一个m 的字符串
字符串 匹配包含指定的字符串 ‘clo’ 匹配含有 clo 的字符串
p1|p2 匹配 p1 或 p2 ‘bg|fg’ 匹配 bg 或者 fg
[...] 匹配字符集合中的任意一个字符 ‘[abc]’ 匹配 a 或者 b 或者 c
[^...] 匹配不在括号中的任何字符 ‘[^ab]’ 匹配不包含 a 或者 b 的字符串
{n} 匹配前面的字符串 n 次 ‘g{2}’ 匹配含有 2 个 g 的字符串
{n,m} 匹配前面的字符串至少 n 次,至多m 次 ‘f{1,3}’ 匹配 f 最少 1 次,最多 3 次
二、补充case的用法
case有两种语法
语法一:
case when 字段值或表达式 then 表达式或值 .... [else 默认值或表达式] end
语法二:
case 字段名 when 字段值 then 表达式或值 .... [else 默认值或表达式] end
两者的区别在于case后面是否有跟上字段的名称
现在先来语法二的测试
语法:
SELECT CASE ("字段名")
WHEN "条件1" THEN "结果1"
WHEN "条件2" THEN "结果2"
...
[ELSE "结果N"]
END
FROM "表名";
# "条件" 可以是一个数值或是公式。 ELSE 子句则并不是必须的。
转换为另一种语法:
SELECT store_name,CASE store_name
WHEN 'Houston' THEN sales+200
WHEN 'Los Angeles' THEN ROUND(sales/2)
WHEN 'england' THEN sales*2
ELSE sales END 'new sales'
FROM store_info;
SELECT store_name,CASE
WHEN store_name ='Houston' THEN sales+200
WHEN store_name ='Los Angeles' THEN ROUND(sales/2)
WHEN store_name ='england' THEN sales*2
ELSE sales END 'new sales'
FROM store_info;
现在来看看语法一,它不仅仅支持取值为确定的一个值,还支持表达式的方式来进行判断赋值
第一种,采用条件表达式,我现在想要实现销售额大于1000是great,500-1000的sales是good,小于500的sales是bad
SELECT store_name,sales,CASE
WHEN Sales >=1000 THEN 'great'
WHEN Sales >=500 THEN 'good'
ELSE 'bad' END 'grade'
FROM store_info;
第二种:我想采用正则表达式,如果说是以es结尾的城市,那么id为1,以on结尾的id为2,以en开头的,id为3
三、补充空值和null值的区别
空值''和null值的区别,总结为三点:
1、空值'' 不占用空间,字节为0,null值占用空间大小;
2、 空值在count(*)和count(字段)都是会将其记录统计,但是如果是null,不会统计
3、条件表达is not null无法过滤出空值'',但是使用!=''和<>''可以过滤出空值以及null行