MySQL函数和知识点梳理(对应Leetcode高频SQL50题基础版的知识点)

1.limit函数

limit n # 表示取n条数据
limit n,1 # 表示取第n+1条数据,即从n开始往后数1条,不包含n
limit n,m # 表示取从n开始数往后m条数据,不包含n,即(n+1,n+m)

2.排序函数

rank() 连续跳跃(重复的数表示排名一致,如1,1,2,2,3,3,3…)
dense_rank() 连续不跳跃,如1,1,2,3,3,4,4,4…
row_number() 相同的值,按照连续数字排名,如1,2,3,4,5,6
用在分组排序中的写法就是:
rank()/dense_rank()/row_number() over(partition by … order by …)

select * from (
	select *,rank(A) over(partition by ... order by ...) as Ar
) t where t.Ar>3

扩展:找分组中的每组的第N条数据,可以用row_number或者其他不同的排序函数,如:

select * from (
	select *,row_number() over(partition by A order by B) as C from table1
) T where T.C = N

3.获取指定字段的长度的记录

length(column)

select * from table where length(A)>15

4.使用关键字using简化连接查询

前提:查询必须是等值连接,连接中的列必须有相同的名称和数据类型,下列两个查询语句是一样的

select * from t1 join t2 on t1.A = t2.A
select * from t1 join t2 using(A)

5.Date_add()函数

用法:Date_add(字段,interval ? second/minute/hour/day/week/month/quarter/year)

select date_add(startdate,interval 7 day) from table1

6.IF()函数

用法:if(表达式,值1,值2),当表达式为True时取值1,否则为值2
字段是否为空的表达式:A is null

7.显示数据的百分号,concat()函数

select concat(round(A,2),'%') from table1

8.整除和取余运算,div和mod

用法:div()函数,整除:div(A,2);mod()函数,取余,mod(A,2);

9.从日期中取出年月,date_format

用法:date_format(A,‘%Y.%m’)
从日期中取出年:year(A)
从日期中取出月:month(A)

10.日期的比较函数

datediff(datepart,startdate,enddate)

11.isnull()函数

判断筛选条件,不存在就是空
用法:isnull((select * from table),null)没有记录就用null

12.sum()函数

可以用于求累计数值

sum(A) over(order by A desc/asc)

13.派生表

with t as (__________) # 括号括起来的部分是select语句

14.union()函数

用于合并两个或者多个select语句的结果集合,类似与pandas中concat/append函数

select A from t1 union select A from t2

15.滑动窗口函数

15.1 仅与行有关: rows between … and …

rows between unbounded predeeding and unbounded following # 当前行前面所有行和后面所有行
rows between n preceeding and n following # 前n行+后n行+当前行
rows between n preceeding and current row # 前n行和当前行
sum(A) over(partition by B order by C rows between current row and 6 following)

15.2 与当前行的值有关:range between … and …

省略号部分类似rows,但表示的是列值

sum(A) range between 100 preceeding and 200 following # 表示如果当前close的值为200,那么就会对close值落在100-400之间的行进行累加

16. 获取部分字符

substring()函数:substring(A,start,length) start指的是第start个字符(从1开始),length指获取长度为length的字符串
left(A,length) :从左边开始获取字段A长度为length的字符串
right(A,length):从右边开始获取字段A长度为length的字符串

17.字符串模糊匹配

字段包含某字符串:A like ‘XXX%'(A包含XXX开头,"%XXX"包含XXX结尾,“%XXX%”中间包含XXX)
locate()函数:locate(“XXX”,A),返回数字,A包含XXX的次数
substring_index(A,‘X’,int):A表示字段,‘X’表示分隔符,int表示第几个分隔符后面的所有字符串(记录会拼接)

18.group_concat()函数

将多条记录拼接成一条记录,且内部允许排序

group_concat(distinct A order by A separator ',') # 用,拼接

19.正则表达式

字段名 regexp “^…$”
^表示字符的开始
$表示字符的结束
[a-z]表示a-z之间的一个小写字母
[A-Z]表示A-Z之间的一个大写字母
[0-9]表示0-9之间的一个数字
. 表示中间有1个字符
*表示中间有多个字符

select * from Users
where mail regexp "^[a-zA-Z][a-zA-Z0-9\.\_/-]*@leetcode\\.com$"

20. Update if语句

update XXX set XXX=(
	case when XXX="A" then "B" #当XXX为A时,修改XXX属性为B,否则修改为C
	else "C"
	end
)

你可能感兴趣的:(数据库,mysql,leetcode,数据库)