此随笔仅总结个人刷SQL题时,突然不会使用的某函数或某方法,大佬勿看勿喷
- regexp '正则表达式'
一般用于邮箱校验
例题:查找拥有有效邮箱的用户
select *
from users
where mail regexp '^[a-zA-Z]+[a-zA-Z0-9_\\./\\-]*@leetcode\\.com$'
- 窗口函数
窗口函数讲解
函数 + over(partition by 分组 order by 排序) as XXX
函数包括:SUM(),COUNT(),AVG()等等
排序:
- row_number:直接排序,返回1,2,3,4
- rank:相等同名次占排名,返回1,2,2,4
- dense_rank:相等同名次不占排名,返回1,2,2,3
排序后可以加Range限定窗口范围,例如:
RANGE INTERVAL '5' DAY PRECEDING 五天范围内
-
模糊查询 like '%'
太弱智了有道题一时想不出来,就先记着 -
Case When THEN
对标Java中的SWITCH CASE
格式:
(CASE When 条件 THEN 结果
Else 结果
END)
例题:换座位
# Write your MySQL query statement below
SELECT (CASE
WHEN MOD(id,2)=1 and id=(SELECT COUNT(*) FROM Seat) THEN id
WHEN MOD(id,2)=1 THEN id+1
ELSE id-1
END
) as id,student
FROM Seat
ORDER BY id
- MOD(x,y) 取余 相当于%
- UNION 和 UNION ALL联合查询
详情可以看SQL语句中union all和union的区别以及用法 - Concat()和group_concat()拼接字符串
Concat(参数)用于字符串的直接拼接
group_concat(分隔符,参数)用于附加分隔符的字符串拼接 - LEFT(str,x)和RIGHT(str,x)
str的左边x字符和str的右边x字符 - upper()和lower()
将字符大写和小写,可以与LEFT()RIGHT()搭配使用 - 连接方式
- LEFT JOIN 左连接
- RIGHT JOIN 右连接
- INNER JOIN 内连接
- CROSS JOIN 交叉连接,也就是笛卡尔积