【MySQL】数据库之高级SQL查询语句补充

目录

一、补充正则表达式的查询regexp

二、补充case的用法

三、补充空值和null值的区别


一、补充正则表达式的查询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行