图解SQL面试题 (学习笔记) 003 多表查询

本文详细解析了SQL中的多表查询,包括如何进行多表联结、如何查找不在表里的数据,以及如何计算薪水涨幅等实际问题。通过实例讲解了左联结的使用,并给出了相关面试题目的解题思路。
摘要由CSDN通过智能技术生成

一级目录

二级目录

三级目录

003多表查询

多表如何查询

【题目】
现在有两个表,“学生表” 记录了学生的基本信息,有 “学号”、“姓名”。
“成绩” 表记录了学生选修的课程,以及对应课程的成绩。
这两个表通过 “学号” 进行关联。
现在要查找出所有学生的学号,姓名,课程和成绩。

在这里插入图片描述
解题思路】

  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
    select a.学号,a.姓名,b.课程,b.成绩
    from 学生 as a
    left join 成绩 as b
    on a.学号=b.学号;

在这里插入图片描述
在这里插入图片描述
举一反三:
在这里插入图片描述

编写一个 SQL 查询,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值