leftjoin多表联合查询_leetcode-sql练习精讲系列文章——一、多表如何连接

17272d262d664e57a821401b82acab23.png

这是一个系列文章,涵盖了SQL最常用的知识点。题目来自于leetcode的sql题,文章列出了问题-完整解析-答案-知识点拓展-BAT等大厂面试真题。希望能帮你全方位的弄懂。有问题可以留言,码字不易,写一篇要好几个小时,希望能得到点赞收藏哦。

一、问题

现有两张表,一张名为”学生”表,包含学生编号,学生姓名,出生年月,性别。一张名为“成绩”表,包含了学生选修的课程,以及对应课程的成绩。 两表通过“学号”进行关联。

现在要求查出每一位学生的信息,包括学生编号,学生姓名,课程和成绩信息。

二、数据准备

create 

247a50748035f112b13f49f48a3bacbc.png

三、解答

【解题思路】

  • 1.明确题目要求的结果

根据题干要求的所有学生的信息姓名,学号,课程和成绩信息。我们知道:“学号”、“姓名”,保存在“学生”表里,“课程”、“成绩”在“成绩”表里,所以需要进行多表查询。

  • 2.确定连接方式

注意题干中的要求所有的学生,有可能学生有注册信息但没有课程成绩信息,所以以学生表作为主表。考察的知识点为表连接中的外连接中的左连接或是右连接

  • 3.确定连接两表的主键

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

问:如果问题为查找有成绩信息的同学的信息包括学生编号,学生姓名,课程和成绩信息。改如何写?

[代码]

#

eadf98c39b8e1739fc7378456870f44c.png

[本题解答]

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

FirstName

7ac92f2b511e06c974d98fd875e54afd.png

【思路】

从题目看出,表1(Person)是人的姓名信息,表2(Address)是人的地址信息。

1)题目要求的结果是两个表里的信息,所以需要多表查询

2)有的人没有地址信息,所以要求查所有人就需要保留表1的全部数据,使用左连接

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

【参考答案】

select FirstName, LastName, City, State
from Person left join Address
on Person.PersonId = Address.PersonId

四、基础知识点

我们复习下基础知识:表的连接方式有:

  • 内连接:被连接表中的所有列,包括其中的重复列。
  • 外连接: 左连接、右连接和全连接。
  • 左连接:返回左表中的所有行,如果左表中行在右表中没有匹配行,则结果中右表中的列返回空值。
  • 右连接:恰与左连接相反,返回右表中的所有行,如果右表中行在左表中没有匹配行,则结果中左表中的列返回空值。
  • 全连接:返回左表和右表中的所有行。当某行在另一表中没有匹配行,则另一表中的列返回空值。
  • 交叉连接 :也称迪卡尔积。不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积,如果带where,返回或显示的是匹配的行数。

3c9f7535b28053fe06d02666b373464a.png

​ (注:图中使用颜色表示两表关联)

五、大厂真题试练

蚂蚁金服面试真题: sql中过滤条件放在on和where中的区别

我们知道on和where是筛选条件,那么具体区别是什么?我们分开看下。

  • inner join: 结果没有区别,前者是先求笛卡尔积然后按照on后面的条件进行过滤,后者是先用on后面的条件过滤,再用where的条件过滤。
  • left join、right join:使用left join(right join)时on后面的条件只对右表(左表)有效。

join过程可以这样理解:where的执行顺序在join之后,on执行在join之中。由于join要求索引列保留,所以对于left join来说on对右表生效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434043.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

噪声调频 matlab,如何用matlab编写噪声调频干扰信号

2013-11-01qsort函数怎么编?qsort,包含在stdlib。h头文件里,函数一共四个参数,没返回值。一个典型的qsort的写法如下qsort(s,n,sizeof(s[0]),cmp);其中第一个参数是参与排序的数组名(或者也可以理解成开始排序的地址,因为可以写&s[i]这样的表达式);第二个参数是…

简明Python3教程 16.标准库

简介 python标准库作为python标准安装的一部分,其自身包含数量庞大的实用模块, 因此熟悉python标准库非常重要,因为很多问题都能利用python标准库快速解决。 下面我们将研究标准库中的一些常用模块。完整的标准库模块列表可以在安装python时附…

串口与modem流量控制大全(2)

PC端处理: 本端发送 当 发现(不一定及时发现) CTS (-3V to -15V)无效时,停止发送, 当 发现(不一定及时发现) CTS (3V to 15V)有效时,恢复发送; 本端接收 0&l…

php中的address,html中address是什么意思?(代码示例)

本篇文章主要介绍了关于address标签用法。或许有些朋友对于address标签有点陌生,也会产生address是什么意思的疑问,毕竟在我们日常建站过程中,很少会用到这个标签。但是俗话说,存在即合理。html里每一个标签都有他自己的定义和用处…

modem建链过程详述

终端 MODEM 步骤1|DTR-->| 步骤2|TXD-->| 步骤3|<--DSR| 步骤4|<--DCD| 步骤5|<--CTS| 步骤6|<--RXD| 1、由终端送DTR信号到MODEM&#xff0c;DTR信号由RS232的DTR脚送出&#xff0c;告诉MODEM终端已准备好&#xff1b; 2、终端送TXD信号到MODEM&#xf…

存储过程没有执行完后没有释放锁_面试必问---synchronized实现原理及锁升级过程你懂吗?...

synchronized实现原理及锁升级过程前言:synchronized是Java内置的机制&#xff0c;是JVM层面的&#xff0c;而Lock则是接口&#xff0c;是JDK层面的尽管最初synchronized的性能效率比较差&#xff0c;但是随着版本的升级&#xff0c;synchronized已经变得原来越强大了,本文带大…

C51存储器类型与51单片机的物理区域

1、 data区空间小,所以只有频繁用到或对运算速度要求很高的变量才放到data区内,比如for循环中的计数值。 2、 data区内最好放局部变量。 因为局部变量的空间是可以覆盖的&#xff08;某个函数的局部变量空间在退出该函数是就释放,由别的函数的局部变量覆盖&#xff09;,可以提…

嵌入式MODEM通迅技术

摘要&#xff1a; 现今&#xff0c;市面上生产的各种嵌入式Modem可通过公众电话交换网络&#xff08;PSTN&#xff09;实现数据的传输功能&#xff0c;包括标准的串行和并行的接口&#xff0c;具有同步和异步的通信数据传输格式&#xff0c;支持多种Modem标准协议——V.92、V.9…

python删除mysql数据库_python 删除mysql数据库

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航&#xff0c;为用户…

php音视频同步,视频画面和声音不同步?视频声音画面同步工具|软件

造成视频声音和画面不同步的原因&#xff0c;原因有三种&#xff1a;1、机器配置太低&#xff0c;播放高码率的视频文件容易造成不同步&#xff1b;2、片子本身就不同步&#xff1b;3、软件使用不当造成转换后的文件不同步。常见于 avi 文件和 rm/rmvb 文件。虽然我们下载的电影…

Hibernate C3P0连接池配置

本文向大家介绍Hibernate C3P0连接池&#xff0c;可能好多人还不了解Hibernate C3P0连接池&#xff0c;没有关系&#xff0c;看完本文你肯定有不少收获&#xff0c;希望本文能教会你更多东西。 Hibernate自带的连接池算法相当不成熟。 它只是为了让你快些上手&#xff0c;并不适…

cc、gcc、g++、CC的区别概括

gcc是C编译器&#xff1b;g是C编译器&#xff1b;linux下cc一般是一个符号连接&#xff0c;指向gcc&#xff1b;gcc和g都是GUN&#xff08;组织&#xff09;的编译器。而CC则一般是makefile里面的一个名字&#xff0c;即宏定义&#xff0c;嘿&#xff0c;因为Linux/Unix都是大小…

怎样在vs中监视char*字符串_字符串指针数据类型

一、前言在实际开发中&#xff0c;特别是芯片开发中&#xff0c;例如智能传感器芯片&#xff0c;经常直接使用C语言指针数据类型来操作寄存器。那么字符串指针就是我们常见的操作。C语言没有单独的字符串对象&#xff0c;它是通过数组的形式来表示字符串的&#xff1a;#include…

php mysql 替换 pdo,php操作MySQL数据库之PDO方式

这篇文章主要介绍了关于php操作MySQL数据库之PDO方式 &#xff0c;有着一定的参考价值&#xff0c;现在分享给大家&#xff0c;有需要的朋友可以参考一下基本使用1)连接数据库$pdo new PDO(“mysql:hostlocalhost; dbnamedb_name”,username,password);2)执行SQL语句$pdo ->…

.NET操作Excel

一.读取Excel数据&#xff0c;并显示 1.配置文件 <configuration> <system.web> <compilation debug"true" targetFramework"4.0" /> </system.web> <appSettings> <!--连接03版本的--> &l…

AC_CHECK_LIB的工作原理

AC_CHECK_LIB就是告诉configure我们需要检查哪些lib&#xff0c;并根据检查结果做什么处理。正是在这里遇到了问题并有所收获&#xff0c;才促使我写这篇blog记录一下。问题是这样&#xff0c;我想检查一下libXv.so这个库是否存在&#xff0c;不存在的话就让configure直接退出。…

mac json格式化工具_一个在 MAC 上 iOS/Flutter 开发的辅助工具

大家好&#xff0c;我是章鱼猫。今天给大家推荐的这个开源项目&#xff0c;是来自于我们公众号读者的投稿&#xff0c;这个东西还挺好的。如果你作为读者&#xff0c;也有自己的开源项目或者你也有想推荐的开源项目&#xff0c;都可以向我们投稿&#xff0c;我们就是致力于帮助…

php 开启fsockopen函数,巧用php的fsockopen函数

这几天闲着没事&#xff0c;用PHP的fsockopen写了几个文件为我的酷我音乐盒的帐户加分。获得途径 积分音乐盒完整的听一首歌曲 1(每天最高200)音乐坊成功上传一张歌单 50(每天最高200)酷我音乐空间空间被访问1次 1(每天最高50)有人打招呼1次 2(每天最高50)有人留言(非主人) 5(每…

java中多维数组的clone容易引起误解

int[][] arr1 new int[][]{{1,2},{1,2}}; int[][] arr2 arr1.clone(); 因为arr1!arr2所以我的意图是 修改arr2 在确定修改结束后 将arr2赋给arr1依此保证在arr2修改过程中arr1不变&#xff0c;&#xff0c;&#xff0c;但神奇的是竟然变了后来才注意到虽然arr1!arr2但arr1[0]…