SQL面试准备
2025-10-27 18:29:42 0 举报
AI智能生成
针对SQL面试,对常用的语法和技巧进行了总结梳理。
作者其他创作
大纲/内容
union和union all
union去重,union all不去重
union夹在多个select语句中
对应列的所有字段具有相同的属性和含义
第一个select语句使用的字段名称将作为结果集的字段名称
子句使用order by需搭配limit
条件判断
case when (适合多条件判断)
if函数 (适合单条件判断)
多条件判断可以使用if嵌套
计算字段满足某条件的量级
核心区别
sum用0
count用null
计算占比
0-1变量的平均值等价于1所占的比例,即满足特定条件的数量占总体的比例
Null与空值
匹配查询 EXISTS vs. IN
三大排序窗口函数
避坑排雷 NOT IN
SQL中任意值!=null结果都是false,所以如果not in后面的table里面有null,可以采取
️逆向思维转化为in
where 字段 is not null
️逆向思维转化为in
where 字段 is not null
连续登录/连续出现
先求出值出现的次数(第几次出现),再计算次数和序号的差值,根据值和差值进行聚合求出连续出现次数
模糊查询 LIKE
正则表达式 REGEXP
窗口函数实例
SQL函数
基础SQL函数
字符串函数
CONCAT:字符串连接
示例:CONCAT('Hello', ' ', 'World')
CONCAT_WS:合并字符串并添加分隔符
示例:CONCAT_WS("-", "SQL", "Tutorial", "is", "fun!")
SUBSTRING:截取字符串
示例:SUBSTRING('Hello World', 1, 5)
SUBSTRING_INDEX:按分隔符截取字符串
示例1:SUBSTRING_INDEX('a*b','*',1)
示例2:SUBSTRING_INDEX('a*b','*',-1)
示例3:SUBSTRING_INDEX(SUBSTRING_INDEX('a*b*c*d*e','*',3),'*',-1)
LENGTH:获取字符串长度 (字节数)
示例:LENGTH('Hello World')
CHAR_LENGTH:获取字符串长度 (字符数)
示例:CHAR_LENGTH("RUNOOB")
TRIM:去除字符串首尾空格
示例:TRIM(' Hello World ')
GROUP_CONCAT:将多个行的列值连接为一个字符串
示例:GROUP_CONCAT( DISTINCT role_name ORDER BY role_id desc ),',',2)
LEFT/RIGHT:返回字符串 s的前 /后n 个字符
示例1:LEFT('runoob',2)
示例2:RIGHT('runoob',2)
LOWER/UPPER:字符串大小写转换
示例1:LOWER('RUNOOB')
示例2:UPPER("runoob")
数值函数
ABS:绝对值
示例:ABS(-10)
CEILING:向上取整
示例:CEILING(4.2)
FLOOR:向下取整
示例:FLOOR(4.8)
ROUND:四舍五入
示例:ROUND(4.56, 1)
日期和时间函数
NOW:获取当前日期和时间
示例:NOW()
CURDATE:获取当前日期
示例:CURDATE()
CURTIME:获取当前时间
示例:CURTIME()
DATEDIFF:计算两个日期之间的天数差
示例:DATEDIFF('2023-12-31', '2023-01-01')
DATE:从日期或日期时间表达式中提取日期值
示例:DATE("2017-06-15")
TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2):计算时间差,返回datetime_expr2 − datetime_expr1 的时间差
示例:TIMESTAMPDIFF(DAY,'2003-02-01','2003-05-01')
计算两个时间相隔多少天
计算两个时间相隔多少天
DATE_SUB(date,INTERVAL expr type):从日期减去指定的时间间隔
示例:DATE_SUB(OrderDate,INTERVAL 2 DAY)
DATE_ADD(d,INTERVAL expr type):计算起始日期 d 加上一个时间段后的日期
示例:DATE_ADD("2017-06-15", INTERVAL 10 DAY)
DATE_FORMAT(d,f):按表达式 f的要求显示日期 d
示例:DATE_FORMAT('2011-11-11 11:11:11','%Y-%m-%d %r')
聚合函数
COUNT:计数
示例:COUNT(*) FROM table_name
SUM:求和
示例:SUM(column_name) FROM table_name
AVG:平均值
示例:AVG(column_name) FROM table_name
MAX/MIN:最大值/最小值
示例:MAX(column_name) FROM table_name / MIN(column_name) FROM table_name
高级SQL函数
窗口函数
ROW_NUMBER:行号
示例:ROW_NUMBER() OVER (PARTITION BY column_name ORDER BY column_name)
RANK:排名
示例:RANK() OVER (PARTITION BY column_name ORDER BY column_name)
DENSE_RANK:密集排名
示例:DENSE_RANK() OVER (PARTITION BY column_name ORDER BY column_name)
LAG/LEAD:前/后行值
示例:LAG(column_name, 1) OVER (ORDER BY column_name) / LEAD(column_name, 1) OVER (ORDER BY column_name)
条件函数
CASE WHEN:条件判断
示例:CASE WHEN condition THEN result ELSE default END
IF:简单条件判断
示例:IF(condition, true_result, false_result)
IFNULL:检查空值并返回替代值
示例:IFNULL(expression1,expression2)
COALESCE:返回第一个非NULL值
示例:COALESCE(expression1, expression2, ...)
CTE(公共表表达式)
表连接
当连接键无法让多表中的数据行一对一时,可能要考虑聚合后再进行连接
0 条评论
下一页