leftjoin多表联合查询_图解面试题:多表如何查询?
【题目】
现在有两个表,“学生表”记录了学生的基本信息,有“学号”、“姓名”。
“成绩”表记录了学生选修的课程,以及对应课程的成绩。
这两个表通过“学号”进行关联。
现在要查找出所有学生的学号,姓名,课程和成绩。
【解题思路】
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 aleft join 成绩 as bon a.学号=b.学号;
运行结果:我们看到学号4都课程为空值,表示这名学生没有选修课程。
【本题考点】
考察多表联结,以及如何选择联结的类型。记住课程里讲过的下面这张图,遇到多表联结的时候从这张图选择对于的sql。
【举一反三】
有下面两个表
编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息:
FirstName, LastName, City, State
【思路】
从表的结构可以看出,表1(Person)是人的姓名信息,表2(Address)是人的地址信息。
1)查询结果是两个表里的列名,所以需要多表查询
2)考虑到有的人可能没有地址信息,要是查询结构要查所有人,需要保留表1(Person)里的全部数据,所以用左联结(left join)
3)两个表联结条件:两个表通过personId产生联结。
【参考答案】
select FirstName, LastName, City, Statefrom Person left join Addresson Person.PersonId = Address.PersonId
推荐:如何提升你的分析技能,实现升职加薪?
leftjoin多表联合查询_图解面试题:多表如何查询?相关推荐
- postgres sql 多表联合查询_从零学会SQL-多表查询
之前学习的内容几乎针对单个表进行简单操作,实际工作中可没有这么简单,复杂的表结构和多表数据关联进行分析,这时候需要我们掌握多表查询方法,一如既往,我们先看一下这篇的主要内容: 表的加法 表的联结 联结 ...
- mysql教程详解之多表联合查询_详解数据库多表连接查询的实现方法
详解数据库多表连接查询的实现方法 通过连接运算符可以实现多个表查询.连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志. 在关系数据库管理系统中,表建立时各数据之间的关系不必 ...
- mysql水果表查询_最全MySQL数据库表的查询操作
序言 本节比较重要,对数据表数据进行查询操作,其中可能大家不熟悉的就对于INNER JOIN(内连接).LEFT JOIN(左连接).RIGHT JOIN(右连接)等一些复杂查询. 通过本节的学习,可 ...
- sql 两个表字段不一样合并查询_数据分析进阶--SQL多表查询
下午写完了上一篇文章,晚上就开始做牛客的SQL题啦,然后发现少少的十题就用到了好几次多表连接,case在实际分析过程中也非常常用,所以我打算单独把多表查询和case拉出来写一篇文章. 文章目录: 表的 ...
- oracle 多表查询_【Oracle】多表查询
笛卡尔集 笛卡尔集会在下面条件下产生: 省略连接条件 连接条件无效 所有表中的所有行互相连接 为了避免笛卡尔集, 可以在 WHERE 加入有效的连接条件. Oracle 连接 使用连接在多个表中查询数 ...
- mysql离散查询_如何写出高性能的MySQL查询
作者:会写代码的猪 发布时间:December 25, 2009 分类:猪在写代码 想写这样一篇文章很久了,但始终没有下手.最近帮同事看了几个查询,而且自己也在考虑一个索引系统的问题,所以今天就把这个 ...
- 高性能mysql 小查询_高性能MySQL06-查询优化(慢查询)
一.分析原因 SQL语句慢查询的原因有多种,如: 1)数据方面: 需要查询的表数据量太大导致性能下降: 是否向数据库请求了不需要的数据行或数据列: MySQL是否在扫描额外的记录 2)SQL语句太过于 ...
- java多线程查询_利用Java函数式接口处理多线程查询
Java函数式接口 有且只有一个抽象方法的接口被称为函数式接口. @FunctionalInterface注解: 该注解可用于一个接口的定义上, 一旦使用该注解来定义接口, 编译器将会强制检查该接口是 ...
- mongodb cond 模糊查询_为了实现在线库的复杂查询,你还在双写吗?
一.在线库不支持在线复杂查询 做在线业务的开发者经常会碰到这样的难题:在线数据库上面运行稍微复杂点的查询,在线业务就挂了!不管是单机数据库如MySQL.PG,还是分布式数据库,HBase.MongoD ...
- .net函数查询_特来电智能分析平台动态查询架构创新实践
一.业务背景及痛点 目前主流互联网智能分析平台中,数据查询作为基础的设施服务支撑着基础数据及业务分析的功能展现.随着数据量的增长,数据存储方式多元化,相对静态数据可能存储到关系型数据库中,订单类动态数 ...
最新文章
- 超过Google,微信AI在NLP领域又获一项世界第一
- 完美运动框架(js)
- 排序二叉树BST(binary search/sort tree)
- 【二分】最大均值(ybtoj 二分-1-3)
- Python | 在列表中指定索引处添加元素的程序
- Liferay Portal使用MySQL数据库配置
- SPSS:因子分析步骤
- 前端web开发培训,HTML表格标签,先收藏了
- python数据分析的常用方法_16种常用的数据分析方法汇总
- python判断火车票座位_利用Python实现命令行版的火车票查看器
- CSS中如何实现背景图片透明并且固定和文字不透明效果
- html 设置图片左对齐,CSS设置图片的对齐
- UR机器人(一):坐标系及位姿表示方法
- Nginx基础应用——日志切割
- 张博涵清华大学_清华大学人文学院
- 小米6.0系统设备一键激活xposed框架的经验
- 在springboot中使用PageHelper(mybatis的分页插件) 以及自定义分页
- 讨教学员备考经验|高分上岸中质协六西格玛黑带!
- DO、DTO、BO、AO、VO、POJO
- Intel Corporation SSD 750 Series 性能测试
热门文章
- eslint+prettier+husky的配置说明
- js基础-16-继承
- 鸿蒙os framework,疯壳-鸿蒙OS-HDF驱动框架
- type=file的未选择任何文件修改_Electron应用易“招黑”,轻松被修改并植入后门...
- scatter python_Python数据可视化之scatter( )函数
- hutool 读取扩展名文件_如何快速的搜索文件,Everything使用技巧
- mysql游戏调整等级_mysql求游戏排名
- 小菜找实习——阿里3月27日场笔试第一题
- 《大话数据结构》学习笔记
- java内存分配 图_java运行内存分配图(转)