目录
01、力扣网-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 子句];
2.4、表连接方式
2.5、语法元素
2.5.1、union
select
device_id, gender, age, gpa
from user_profile
where university = '山东大学'
union all
select
device_id, gender, age, gpa
from user_profile
where gender = 'male';
2.5.2、case
CASE
WHEN 简单表达式1 THEN 结果表达式1
WHEN 简单表达式2 THEN 结果表达式2 …
WHEN 简单表达式n THEN 结果表达式n
[ ELSE 结果表达式n+1 ]
END
----------------------------------------------------
SELECT
CASE
WHEN GRADE BETWEEN 85 AND 100 THEN '优'
WHEN GRADE BETWEEN 70 AND 84 THEN '良'
WHEN GRADE BETWEEN 60 AND 69 THEN '及格'
ELSE '不及格'
END 等级,
COUNT(*) 人数
FROM
SC
GROUP BY
CASE
WHEN 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
---------------------------------
SELECT
IF (age < 25 OR age IS NULL,
'25岁以下',
'25岁及以上'
) age_cut,
COUNT(device_id) Number
FROM
user_profile
GROUP BY
age_cut;
---------------------------------
SELECT
device_id,
gender,
IF (age is null, '其他',
IF (age < 20, '20岁以下',
IF (age <= 24, '20-24岁', '25岁及以上')
)
) age_cut
FROM
user_profile;
2.5.4、日期函数-DATEDIFF
select
day (date) as day,
count(question_id) as question_cnt
from
question_practice_detail
where
month (date) = 8
and year (date) = 2021
group by
date;