首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >图解面试题:多表如何查询?

图解面试题:多表如何查询?

原创
作者头像
猴子聊数据分析
修改于 2019-12-27 10:30:12
修改于 2019-12-27 10:30:12
8140
举报

​【题目】

现在有两个表,“学生表”记录了学生的基本信息,有“学号”、“姓名”。

“成绩”表记录了学生选修的课程,以及对应课程的成绩。

这两个表通过“学号”进行关联。

现在要查找出所有学生的学号,姓名,课程和成绩。

【解题思路】

1.确定查询结果

题目要求查询所有学生的姓名,学号,课程和成绩信息

select 学号,姓名,课程,成绩

查询结果的列名“学号”、“姓名”,在“学生”表里,列名“课程”、“成绩”在“成绩”表里,所以需要进行多表查询。

2.哪种联结呢?

涉及到多表查询,在之前的课程《从零学会sql:多表查询》里讲过需要用到联结。

多表的联结又分为以下几种类型:

1)左联结(left join),联结结果保留左表的全部数据

2)右联结(right join),联结结果保留右表的全部数据

3)内联结(inner join),取两表的公共数据

这个题目里要求“所有学生”,而“所有学生”在“学生”表里。为什么不在“成绩”表里呢?

如果有的学生没有选修课程,那么他就不会出现在“成绩”表里,所以“成绩”表没有包含“所有学生”。

所以要以“学生”表进行左联结,保留左边表(学生表)里的全部数据。

from 学生信息表 as a left join 成绩表 as b

3.两个表联结条件是什么?

两个表都有“学号”,所以联结条件为学号。

on a.学号=b.学号

4.最终sql

代码语言:javascript
AI代码解释
复制
select a.学号,a.姓名,b.课程,b.成绩from 学生 as aleft join 成绩 as bon a.学号=b.学号;

运行结果:我们看到学号4都课程为空值,表示这名学生没有选修课程。

【本题考点】

考察多表联结,以及如何选择联结的类型。记住课程里讲过的下面这张图,遇到多表联结的时候从这张图选择对于的sql。

【举一反三】

有下面两个表

编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息:

代码语言:javascript
AI代码解释
复制
FirstName, LastName, City, State

【思路】

从表的结构可以看出,表1(Person)是人的姓名信息,表2(Address)是人的地址信息。

1)查询结果是两个表里的列名,所以需要多表查询

2)考虑到有的人可能没有地址信息,要是查询结构要查所有人,需要保留表1(Person)里的全部数据,所以用左联结(left join)

3)两个表联结条件:两个表通过personId产生联结。

【参考答案】

代码语言:javascript
AI代码解释
复制
select FirstName, LastName, City, Statefrom Person left join Addresson Person.PersonId = Address.PersonId

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
leet-code两表求合查询
编写一个SQL查询来报告Person表中每个人的姓、名、城市和州。如果personId的地址不在Address表中,则报告为空null 。以 任意顺序 返回结果表。
兔云小新LM
2022/11/21
6940
图解面试题:如何分析游戏?
猴子是一个班级的班主任,由于所带班级的学生成绩普遍不是很好。现在他需要找出每门课程中成绩最差的学生,然后有针对性的辅导。
猴子聊数据分析
2020/04/12
7050
平平无奇SQL面试题:经典50例
组函数: 去重 distinct() 统计总数sum() 计算个数count() 平均数avg() 最大值max() 最小数min()
大数据真好玩
2021/07/07
3K0
【leetcode两题选手】MySQL类题目(一)
编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息:
看、未来
2020/08/25
4950
【leetcode两题选手】MySQL类题目(一)
图解面试题:查找不在表里的数据
下面是学生的名单,表名为“学生表”;近视学生的名单,表名为“近视学生表”。请问不是近视眼的学生都有谁?
Lenis
2019/12/25
4330
图解面试题:查找不在表里的数据
图解SQL联结:右联结
右联结,会将右侧表中的数据全部取出来。下面图片中用文氏图画出了右联结,是红圈中的部分。
猴子聊数据分析
2019/11/29
6620
6. SQL 多表查询
表的生成参考《 3. SQL–数据库基础查询操作》。 前几节所总结的查询,都是基于单张表格进行的,如果单张表格的信息不足以达到查询的目的,就需要将他们组合到一起形成多张表格。
全栈程序员站长
2022/08/23
9990
6. SQL 多表查询
Leetcode-sql-four
本文中主要是介绍LeetCode中关于SQL的练习题,从易到难,循序渐进。文中会介绍题目和提供尽可能多的解答方案。从本文开始属于\color{red}{中等}难度
皮大大
2021/03/01
5150
Leetcode-sql-four
掌握这些SQL面试题再也不怕面试懵逼了
这类问题其实就是常见的:分组取每组最大值、最小值,每组最大的N条(top N)记录。
开心鸭
2020/10/26
6170
掌握这些SQL面试题再也不怕面试懵逼了
手把手教你 SQL 多表查询
本文通过经典的学生-课程模式 S-T 数据库带大家学习 SQL 常用的多表查询 :
wsuo
2020/07/31
2.1K0
手把手教你 SQL 多表查询
MySQL 多表查询、连接查询(内连接、外连接)
查询的结果是一个二维表,它是students表和classes表的“乘积”,即students表的每一行与classes表的每一行都两两拼在一起返回
Michael阿明
2020/07/13
4.7K0
MySQL 多表查询、连接查询(内连接、外连接)
图解面试题:经典50题
翻译成大白话:计算每个学号不及格分数个数,筛选出大于2个的学号并找出姓名,平均成绩,思路如图:
猴子聊数据分析
2020/06/24
6910
滴滴2020年面试题:如何找出最小的N个数?
“学生表”里记录了学生的学号、入学时间等信息。“成绩表”里是学生选课成绩的信息。两个表中的学号一一对应。(滴滴2020年面试题)
猴子聊数据分析
2020/05/13
1.2K0
3.4 《数据库系统概论》之数据查询—SELECT(单表查询、连接查询、嵌套查询、集合查询、多表查询)
[例5] 查询全体学生的姓名、出生年份和所有系,要求用小写字母表示所有系名,这里假定目前年份是2004年。
全栈程序员站长
2022/07/01
7.1K0
3.4 《数据库系统概论》之数据查询—SELECT(单表查询、连接查询、嵌套查询、集合查询、多表查询)
滴滴2020年面试题:如何找出最小的N个数?
“学生表”里记录了学生的学号、入学时间等信息。“成绩表”里是学生选课成绩的信息。两个表中的学号一一对应。(滴滴2020年面试题)
猴子数据分析
2020/12/22
7090
mysql练习:经典50道基础题
建表共4张表,分别对应学生信息(Student)、课程信息(Course)、教师信息(Teacher)以及成绩信息(SC)
不愿意做鱼的小鲸鱼
2023/02/01
1.4K0
图解面试题:你有多久没涨过工资了?
“雇员表“中记录了员工的信息,“薪水表“中记录了对应员工发放的薪水。两表通过“雇员编号”关联。
猴子聊数据分析
2020/05/22
7690
SQLServer 学习笔记之超详细基础SQL语句 Part 3
-----------------------接Part 2-------------------
授客
2019/09/11
6430
小红书面试题:如何分析用户行为?
小红书月活跃用户数已经过亿,用户在小红书上通过文字、图片、视频笔记分享生活,并创建相关商品链接,吸引相同爱好的用户进行收藏购买,用户的消费有什么行为特征呢?(小红书面试题)
猴子数据分析
2021/01/22
8190
用SQL语句进行数据库查询(复杂查询)
(4)查询选修了“C语言程序设计”的学生的学号与姓名 –a.用内连接查询 语句:
初阶牛
2023/01/04
2.2K0
用SQL语句进行数据库查询(复杂查询)
相关推荐
leet-code两表求合查询
更多 >
领券
社区新版编辑器体验调研
诚挚邀请您参与本次调研,分享您的真实使用感受与建议。您的反馈至关重要,感谢您的支持与参与!
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
首页
学习
活动
专区
圈层
工具
MCP广场
首页
学习
活动
专区
圈层
工具
MCP广场