本专栏『百日百题』长期更新,一起加入本刷题计划,一起成长吧! ️点击可关注本专栏
为什么要学习SQL?
SQL是目前使用最广泛的数据库语言。 不管你是程序员、数据分析师、Web开发者、互联网运营,或者做报表的职场白领,掌握良好的SQL知识对用好数据库是极大的帮助,而且在面试中也会对SQL进行一定程度的考察,所以说我们学习SQL是非常必要,也是非常重要的!
为什么要刷题?
编程要在实践中学习,就像游泳要通过游泳来练习。很多学生喜欢把编程当成古诗词去背诵,背诵各种语法,这样是不对的。
学编程应该像学开车一样。教练给学员讲解基本步骤后,主要靠学员在练车过程中去巩固回忆,更多时候靠的是肌肉记忆。
想要掌握一门语言就得,对其多加练习,这样才能在用到的时候运筹帷幄!
用什么刷题?
这里我极力推荐牛客网,我们平时写算法题都是在Leetcode之类上面的,当然Leetcode上面也有SQL相关题目,但是必须得会员才可以刷,这对很多人都不太友好。而牛客网就不一样了。
牛客网上面的SQL题目几乎都是免费的,大家只要想刷就可以刷,而且牛客网不只是一个题目它是教学平台,都配有视频讲解,需要的同学可以去看。最重要的就是牛客网对所有的SQL题目进行了分类,适合不同阶段的同学,所以我极力推荐大家使用牛客网!
本专栏文章即将带你从基础SQL语法到复杂SQL语句,循序渐进持续练习,加入刷题计划一起加油吧!
为了方便刷题我直接把牛客网的链接放在下面,大家点击蓝色字体就可以直接进行跳转刷题了!
传送门:刷题传送门
本系列文章即将带你从SQL基础语法到SQL复杂语句,循序渐进持续练习,加入刷题计划一起加油吧!
题目:
题解:
SELECT q.device_id,question_id,result
FROM question_practice_detail q
JOIN user_profile u ON q.device_id=u.device_id
WHERE university='浙江大学'
考察知识:
多表查询 - 多表连接:若一个查询同时涉及两个或两个以上的表,则称之为连接查询。
连接查询是关系数据库中最主要的查询。
连接查询包括内连接、外连接和交叉连接等。
连接查询中用于连接两个表的条件称为连接条件或连接谓词。
一般格式为:
表名1.列名1 = 表名2.列名2
内连接语法为:
SELECT …
FROM 表名
[INNER] JOIN 被连接表
ON 连接条件
例如:查询每个学生及其班级的详细信息
SELECT *
FROM 学生表
INNER JOIN 班级表 ON 学生表.班号=班级表.班号
题解:
SELECT u.university,
COUNT(q.question_id)/COUNT(DISTINCT q.device_id) AS avg_answer_cnt
FROM user_profile AS u
RIGHT JOIN question_practice_detail AS q
ON u.device_id=q.device_id
GROUP BY university;
考察知识:
这里使用到了外连接的知识,这里整体介绍一下这四种连接方式:
[INNER] JOIN
:内连接,最终结果为在两张表格中都匹配上的数据项(默认情况);LEFT JOIN
:左外连接,最终结果为左外连接结果加上左侧表格(此处为第一张表)未匹配上的数据;RIGHT JOIN
:右外连接,最终结果为右外连接结果加上右侧表格(此处为第一张表)未匹配上的数据;FULL JOIN
:交叉连接,最终结果为交叉连接加上左侧和右侧两张表中未匹配上的数据;题解:
SELECT
university,
difficult_level,
COUNT(qpd.device_id)/COUNT(DISTINCT qpd.device_id) AS avg_answer_cnt
FROM user_profile up
JOIN question_practice_detail qpd ON up.device_id = qpd.device_id
JOIN question_detail qd ON qpd.question_id = qd.question_id
GROUP BY university,difficult_level;
题解:
SELECT university,difficult_level,COUNT(qpd.question_id)/COUNT(DISTINCT qpd.device_id)avg_answer_cnt
FROM user_profile up
RIGHT JOIN question_practice_detail qpd
ON up.device_id=qpd.device_id
JOIN question_detail qd
ON qpd.question_id=qd.question_id
WHERE university="山东大学"
GROUP BY difficult_level;
题解:
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";
考察知识:
UNION
(并):使用 UNION可以实现将多个查询结果集合并为一个结果集。语法格式为:
SELECT 语句1
UNION [ALL]
SELECT 语句2
使用UNION
需要注意:
UNION ALL
是结果不去重;ORDER BY
语句要放在最后一个查询语句的后边;为了方便刷题我直接把刷题网站的链接放在下面,大家点击蓝色字体就可以直接进行跳转刷题了!
传送门:刷题神器
刷题这件事,大家一定要认真起来,不可懈怠!
日积月累,方成大器!