- 大数据面试SQL题复习思路一网打尽!(文档见评论区)_哔哩哔哩_bilibili
- Hive SQL 大厂必考常用窗口函数及相关面试题
- 大数据面试SQL题-笔记01【运算符、条件查询、语法顺序、表连接】
- 大数据面试SQL题-笔记02【...】
目录
01、力扣网-sql题
1、高频SQL50题(基础版)
2、高频SQL50题(进阶版)
02、牛客网-sql题
2.1、运算符
2.2、条件查询
2.3、语法顺序
2.4、表连接方式
2.5、语法元素
2.5.1、union
2.5.2、case
2.5.3、if / is null
2.5.4、日期函数-DATEDIF
HSQL绝对重点
三、窗口函数用法举例
- 序号函数:row_number() / rank() / dense_rank()(面试重点)
- 分布函数:percent_rank() / cume_dist()
- 前后函数 lag(expr, n, defval)、lead(expr, n, defval)(面试重点)
- 头尾函数:FIRST_VALUE(expr)、LAST_VALUE(expr)
- 聚合函数+窗口函数联合使用
01、力扣网-sql题
力扣sql题
1、高频SQL50题(基础版)
没写完 ...
2、高频SQL50题(进阶版)
没写完 ...
02、牛客网-sql题
非技术快速入门
2.1、运算符
2.2、条件查询
_:匹配任意一个字符;
SELECT * FROM 学生表 WHERE name LIKE '张__'//查询姓“张”且名字是3个字的学生姓名。%:匹配0个或多个字符;
SELECT * FROM 学生表 WHERE 姓名 LIKE ‘张%’//查询学生表中姓‘张’的学生的详细信息。[ ]:匹配[ ]中的任意一个字符(若要比较的字符是连续的,则可以用连字符“-”表 达 );
SELECT * FROM 学生表 WHERE 姓名 LIKE '[张李刘]%’//查询学生表中姓‘张’、姓‘李’和姓‘刘’的学生的情况。[^ ]:不匹配[ ]中的任意一个字符。
SELECT * FROM 学生表 WHERE 学号 LIKE '%[^235]' //从学生表表中查询学号的最后一位不是2、3、5的学生信息。
2.3、语法顺序
SELECT columns
FROM table_name
WHERE conditions
GROUP BY columns
HAVING conditions
ORDER BY columns DESC
LIMIT num;
-------------------------------
SELECT * | 字段列表 [as 别名]
FROM 表名
[WHERE 子句]
[GROUP BY 子句]
[HAVING 子句]
[ORDER BY 子句]
[LIMIT 子句];
在 SQL 查询中,通常的语法顺序是这样的:
SELECT
:选择要查询的列。FROM
:指定查询的数据表。WHERE
:对数据进行筛选,根据指定的条件过滤行。GROUP BY
:按照指定的列对结果进行分组。HAVING
:对分组后的结果应用条件过滤。ORDER BY
:指定结果的排序顺序。LIMIT
:限制返回的行数。虽然在实际的 SQL 查询中,您不一定需要每个子句都使用,但是一般来说,这是它们的一般顺序。
至于
AND
,它是用于连接多个条件的逻辑运算符。它通常出现在WHERE
子句中,用于结合多个条件以过滤行。SELECT * FROM table_name WHERE condition1 AND condition2;
在这种情况下,
AND
的使用是在WHERE
子句中,但它可以根据需要出现在其他地方。
牛客网——SQL19 分组过滤练习题
select
university,
avg(question_cnt) as avg_question_cnt,
avg(answer_cnt) as avg_answer_cnt
from
user_profile
group by
university
having #聚合函数结果作为筛选条件时,不能用where,而是用having语法
avg_question_cnt < 5
or avg_answer_cnt < 20;
3.3.3 总结内连接查询步骤:
1) 确定查询哪些表
2) 确定表连接的条件
3) 确定查询的条件
4) 确定查询的字段
2.4、表连接方式
- 内连接(Inner Join):返回匹配连接条件的行,包括两个表中同时出现的行。
- 左连接(Left Join 或 Left Outer Join):返回左表中的所有行,以及右表中与左表匹配的行。如果右表中没有匹配的行,则返回 NULL 值。
- 右连接(Right Join 或 Right Outer Join):返回右表中的所有行,以及左表中与右表匹配的行。如果左表中没有匹配的行,则返回 NULL 值。
- 全连接(Full Join 或 Full Outer Join):返回左表和右表中的所有行,如果某行在其中一个表中没有匹配的行,则返回 NULL 值。
- 自连接(Self Join):将表与自身连接,通常用于比较表中的不同行。
除了这些基本的连接方式外,还有一些其他变体和组合,但这些是最常见的表连接方式。
这些连接方式可以组合使用,因此可能会导致多个表同时参与连接。例如,在一个查询中,您可以使用多个内连接,左连接,右连接或全连接。
2.5、语法元素
2.5.1、union
UNION
是用于合并两个或多个 SELECT 语句的结果集的操作符。它用于将多个查询结果合并为单个结果集,并且会自动去除重复的行。UNION
用于组合两个或多个查询的结果集,并返回一个包含所有查询结果的单个结果集。分别查看&结果不去重:所以直接使用两个条件的or是不行的,直接用union也不行,要用union all,分别去查满足条件1的和满足条件2的,然后合在一起不去重。
UNION
:UNION
操作符用于合并两个查询结果集,并且会自动去除重复的行。如果两个查询的结果集中存在相同的行,则UNION
只会返回一次该行。UNION
不会返回重复的行。UNION ALL
:UNION ALL
也用于合并两个查询结果集,但是它不会去除重复的行。即使两个查询的结果集中存在相同的行,UNION ALL
也会将它们都返回。UNION ALL
返回所有行,包括重复的行。
select device_id, gender, age, gpa
from user_profile
where university = '山东大学'union allselect device_id, gender, age, gpa
from user_profile
where gender = 'male';
2.5.2、case
CASEWHEN 简单表达式1 THEN 结果表达式1WHEN 简单表达式2 THEN 结果表达式2 …WHEN 简单表达式n THEN 结果表达式n[ ELSE 结果表达式n+1 ]
END
----------------------------------------------------
SELECTCASEWHEN GRADE BETWEEN 85 AND 100 THEN '优'WHEN GRADE BETWEEN 70 AND 84 THEN '良'WHEN GRADE BETWEEN 60 AND 69 THEN '及格'ELSE '不及格'END 等级,COUNT(*) 人数
FROMSC
GROUP BYCASEWHEN GRADE BETWEEN 85 AND 100 THEN '优'WHEN GRADE BETWEEN 70 AND 84 THEN '良'WHEN GRADE BETWEEN 60 AND 69 THEN '及格'ELSE '不及格'END
2.5.3、if / is null
#if判断
SELECT IF(age < 25 OR age IS NULL, '25岁以下', '25岁及以上') age_cut, COUNT(device_id) Number
FROM user_profile
GROUP BY age_cut
---------------------------------
SELECTIF (age < 25 OR age IS NULL,'25岁以下','25岁及以上') age_cut,COUNT(device_id) Number
FROMuser_profile
GROUP BYage_cut;
---------------------------------
SELECTdevice_id,gender,IF (age is null, '其他',IF (age < 20, '20岁以下',IF (age <= 24, '20-24岁', '25岁及以上'))) age_cut
FROMuser_profile;
2.5.4、日期函数-DATEDIFF
MySQL 中的
DAY()
、MONTH()
和YEAR()
函数用于从给定的日期中提取日、月和年,返回类型:int。
selectday (date) as day,count(question_id) as question_cnt
fromquestion_practice_detail
wheremonth (date) = 8and year (date) = 2021
group bydate;
DATEDIFF()
是 MySQL 中的日期函数,用于计算两个日期之间的天数差异。它的语法如下:DATEDIFF(date1, date2)
其中,
date1
和date2
是要比较的两个日期或日期/时间表达式。函数返回date1
减去date2
的结果,以天为单位的差值。例如,假设有两个日期
date1
和date2
,你可以使用DATEDIFF()
函数来计算它们之间的天数差:
SELECT DATEDIFF('2024-04-26', '2024-04-20'); -- 返回 6
在这个例子中,结果是
6
,因为从2024-04-20
到2024-04-26
之间相隔了 6 天。
ヾ(◍°∇°◍)ノ゙加油~