当前位置: 首页 > 编程日记 > 正文

【SQL】sql语句LEFT JOIN(拼接表)详解

1、语法

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;

2、说明

按照一定规则,将表table1和表table12拼接起来。下面以学生管理系统为例,学生管理系统数据库各表如下
课程表:
在这里插入图片描述
学生表
在这里插入图片描述
成绩表
在这里插入图片描述
显示所有学生的全部成绩

SELECT s.id, s.name, sc.subject, t.score  
FROM transcript AS t 
LEFT JOIN student AS s ON t.student_id = s.id 
LEFT JOIN schedule AS sc ON  t.schedule_id = sc.id;

结果如下:
在这里插入图片描述

3、LEFT JOIN、RIGHT JOIN、INNER JOIN的区别

首先注意:sqlite不支持RIGHT JOIN
在这里插入图片描述

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行
举例如下:


表A记录如下:
aID     aNum
1     a20050111
2     a20050112
3     a20050113
4     a20050114
5     a20050115

表B记录如下:
bID     bName
1     2006032401
2     2006032402
3     2006032403
4     2006032404
8     2006032408


1.left join
sql语句如下:
select * from A
left join B
on A.aID = B.bID

结果如下:
aID     aNum     bID     bName
1     a20050111    1     2006032401
2     a20050112    2     2006032402
3     a20050113    3     2006032403
4     a20050114    4     2006032404
5     a20050115    NULL     NULL

(所影响的行数为 5 行)
结果说明:
left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.
换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).
B表记录不足的地方均为NULL.


2.right join
sql语句如下:
select * from A
right join B
on A.aID = B.bID

结果如下:
aID     aNum     bID     bName
1     a20050111    1     2006032401
2     a20050112    2     2006032402
3     a20050113    3     2006032403
4     a20050114    4     2006032404
NULL     NULL     8     2006032408

(所影响的行数为 5 行)
结果说明:
仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.


3.inner join
sql语句如下:
select * from A
innerjoin B
on A.aID = B.bID

结果如下:
aID     aNum     bID     bName
1     a20050111    1     2006032401
2     a20050112    2     2006032402
3     a20050113    3     2006032403
4     a20050114    4     2006032404

结果说明:
很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.


注:
LEFT JOIN操作用于在任何的 FROM 子句中,组合来源表的记录。使用 LEFT JOIN 运算来创建一个左边外部联接。左边外部联接将包含了从第一个(左边)开始的两个表中的全部记录,即使在第二个(右边)表中并没有相符值的记录。

语法:FROM table1 LEFT JOIN table2 ON table1.field1 compopr table2.field2

说明:table1, table2参数用于指定要将记录组合的表的名称。
field1, field2参数指定被联接的字段的名称。且这些字段必须有相同的数据类型及包含相同类型的数据,但它们不需要有相同的名称。
compopr参数指定关系比较运算符:"=", “<”, “>”, “<=”, “>=” 或 “<>”。
如果在INNER JOIN操作中要联接包含Memo 数据类型或 OLE Object 数据类型数据的字段,将会发生错误.

4、再来看一个例子,加深印象

原始表:人员名单、订购单如下
在这里插入图片描述
列出所有的人以及他们的定购数量 -(如果有的话)。
您可以使用下面的 SELECT 语句:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo 
FROM Persons 
LEFT JOIN Orders 
ON Persons.id_P=Orders.id_P 
ORDER BY Persons.LastName

在这里插入图片描述
LEFT JOIN 关键字会从左表 (Persons) 那里返回所有的行,即使在右表 (Orders) 中没有匹配的行。

相关文章:

找啊找啊找木偶,图灵奖得主G. Hinton第一篇论文曝光!

作者 | Geoffrey Hinton 译者 | 李倩编辑 | 一一出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;摘要针对在具有重叠结构的透明矩形中寻找木偶这一问题&#xff0c;Hinton大神想到使用松弛算法&#xff0c;通过从冲突局部解释网络中提取全局最佳图形的方式找木偶。介…

终于,「最近邻搜索」有通用方法了

作者&#xff1a;Kevin Hartnett 编译&#xff1a;Bing 如果你打算开一家咖啡馆&#xff0c;你一定想知道&#xff1a;“附近最近的一家咖啡馆在哪&#xff1f;”了解这些信息有助于应对商业竞争。 这种现象是计算机科学中广泛研究的问题&#xff0c;称为“最近邻搜索”。它的问…

tar自动打包指定文件夹中的文件到指定目录

这是我离开上一家公司&#xff0c;到XX人寿保险公司的第一个工作内容&#xff0c;很简单&#xff0c;可以减少每天重复的工作量。写一个脚本&#xff0c;将指定文件夹下的所有文件打包成以日期命名的格式并存放到其父目录中&#xff0c;自动检测该压缩包&#xff0c;保留时间为…

【SQL】sql语句GROUP BY

1、语法 SELECT column_name, aggregate_function(column_name) FROM table_name GROUP BY column_name;2、说明 先对数据集分组&#xff0c;再根据规则批量处理每组数据。 “Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组&#xff0c;所谓的分组就是将…

色情低俗、暴力恐怖内容...如何用AI“一网打尽”?

作者 | Rachel、Just出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;移动互联网时代催生了大量的多媒体数据&#xff0c;每天在社交平台、长短视频、直播平台、新闻资讯等内容平台产生了数以亿计的图片和视频&#xff0c;这些数据的内容审核面临严峻的挑战。人工审核…

想要学好Go语言的必须知道的一个小技巧

2019独角兽企业重金招聘Python工程师标准>>> 由于我转Go语言比较早&#xff0c;很多认识我的&#xff0c;转Go或学习Go的同学遇到问题&#xff0c;经常会过来问我&#xff0c;然后&#xff0c;我发现。 除了学习Go语言可以看那些资料&#xff0c;这个问题以外&#…

【CSS3教程】CSS3基础常用技巧实例集合

为什么80%的码农都做不了架构师&#xff1f;>>> CSS3常用技巧 CSS3下条纹&方格斜纹背景的实现 一、效果抢先&#xff1a;CSS3下的条纹背景demo 这些美丽的纹饰全部都是由CSS实现的&#xff0c;没有一点点的图片。 二、原理简述 主要是应用了两个CSS3的属性&…

【FFmpeg】ffmpeg工具源码分析(二):转码核心函数 transcode

1、转码流程 1)转码前初始化:打开输入输出文件,初始化编码器、解码器、过滤器,创建多线程,设置串口终端等; 2)while循环处理每一包数据,核心函数 transcode_step(稍后分析); 3)转码结束前收尾工作:关闭多线程,刷新编解码缓冲区,恢复串口终端设置,向输出文件写…

在CentOS7上部署Apache Mesos

概述 Apache Mesos是一款基于多资源&#xff08;内存、磁盘、CPU、端口等&#xff09;调度的开源集群管理套件&#xff0c;能使容错和分布式系统更加容易。 工作原理 Apache Mesos采用了Master/Slave结构来简化设计&#xff0c;将Master做得尽可能轻量级&#xff0c;仅保存了各…

CTA核心技术及应用峰会开幕!(附第二日参会攻略)

全球智能化趋势当前&#xff0c;人工智能技术正蓬勃发展。为了直击开发者在机器学习与人工智能技术研究与落地过程中的痛点与瓶颈&#xff0c;深入解析机器学习和知识图谱技术在行业中的实践和落地。2019 年 5 月 26 - 27 日&#xff0c;由中国 IT 社区 CSDN 与数字经济人才发展…

Sharepoint学习笔记—ECMAScript对象模型系列-- 8、组与用户操作(一)

这里总结一下关于使用ECMAscript对象模型来操作Goup与User的常用情况&#xff0c;因为内容较多&#xff0c;所以拆分为两个部分&#xff0c;这部分主要内容如下: 1、取得当前Sharepoint网站所有的Group 2、获取当前登录用户的Title与所属Group 3、获取指定Group下的…

【FFmpeg】ffmpeg工具源码分析(三):分配过滤器内存(宏GROW_ARRAY)详解

0、引言 在ffmpeg.c源码的核心函数transcode() 中,先执行初始化操作transcode_init() ; 首先初始化过滤器filtergraphs,在寻找过滤器在哪分配时,发现它使用宏GROW_ARRAY以增长的方式来分配内存。 1、GROW_ARRAY原型 #define GROW_ARRAY(array, nb_elems)\array = grow_a…

技术引路:机器学习仍大有可为,但方向在哪里?

整理 | CTA 直播小分队出品 | AI科技大本营&#xff08;id&#xff1a;rgznai100&#xff09;杭州国际博览中心&#xff0c;这里曾经是二十国集团领导人第十一次峰会的主场馆&#xff0c;5 月 26 日 CTA 核心技术与应用峰会&#xff08;杭州&#xff09;同样在这里正式召开&…

基于GTID模式MySQL主从复制

基于GTID模式MySQL主从复制 GTID复制原理&#xff1a;基于GTID的复制是MySQL 5.6后新增的复制方式GTID (global transaction identifier) 即全局事务ID, 保证了在每个在主库上提交的事务在集群中有一个唯一的ID.在原来基于日志的复制中, 从库需要告知主库要从哪个偏移量positio…

NET Framework 2.0中的数据访问新特性

1异步数据访问 a)支持异步数据编程 b)SqlConnection – BeginOpen – EndOpen c)SqlCommand – BeginExecuteNonQuery – BeginExecuteReader – BeginExecuteXmlReader – EndExecuteNonQuery – EndEx…

【网络】通讯名词解释:带宽、速率、波特率、奈奎斯特定律、香农定理

1、带宽 1.1 解释一 带宽&#xff0c;又叫频宽&#xff0c;是数据的传输能力&#xff0c;指单位时间内能够传输的比特数。高带宽意味着高能力。 数字设备中带宽用bps(b/s)表示&#xff0c;即每秒最高可以传输的位数。 模拟设备中带宽用Hz表示&#xff0c;即每秒传送的信号周期…

这可能是最全的机器学习工具手册!

作者 | 红色石头转载自 AI有道&#xff08;ID:redstonewill&#xff09;工欲善其事必先利其器&#xff01;之前我也断断续续给大家发文整理过一些关于数据科学&#xff0c;尤其是机器学习、深度学方面的速查手册&#xff01;但是&#xff0c;每次分享的都比较是针对某一块的内容…

保持分布式团队同步

分布式团队最大的挑战是沟通&#xff0c;这对建立协作的基本原则必不可少。调整工作时间&#xff0c;互相适应&#xff0c;而团队联络员有助于沟通和同步工作。以信任、尊重和开明为基础的团队会鼓励组织中的人们互相帮助&#xff0c;培养一种使团队保持同步的文化。\\SkuVault…

Word2010开发——操作文档

参考&#xff1a; http://blog.csdn.net/akipeng/article/details/6534375 http://www.haogongju.net/art/19029 首先建立一个Word外接程序&#xff08;Word AddIn&#xff09;&#xff08;家里的Vs竟然是中文版&#xff0c;汗&#xff01;&#xff09; 接着在项目中新增项&…

【驱动】ubuntu安装内核头文件

1、检查是否已经安装 使用dpkg-query命令检查是否有可用的内核头文件。 $ dpkg-query -s linux-headers-$(uname -r) 如果输出显示install ok installed说明已经安装成功 Package: linux-headers-4.15.0-142-generic Status: install ok installed2、安装内核头文件 $ sudo…

嫌Terminal终端太单调?快收下这几个有趣的改造工具!

整理 | Rachel责编 | 琥珀出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;【导语】Terminal&#xff08;终端&#xff09;是程序员常用的工具之一&#xff0c;常用于系统的相关配置修改。系统自带的 terminal 较为简单&#xff0c;很多 Github 的开源项目都尝试对终端…

关于matlab向文件写入数据的方法——留着备用

MATLAB数据采集的时候&#xff0c;往往需要把得到的数据保存下来。 fid fopen(文件名&#xff0c;‘打开方式’)&#xff1b; 说明&#xff1a;fid用于存储文件句柄值&#xff0c;如果fid>0&#xff0c;这说明文件打开成功。打开方式有如下选择&#xff1a; ‘r’&#xff…

js在页面滚动到一定位置时触发事件?

function getTop(e) {var offsete.offsetTop;if(e.offsetParent!null) //只要还有父元素,也就是当前元素不是根节点就继续往上累计元素的高度offsetgetTop(e.offsetParent);return offset; } var myBlockTop getTop(document.getElementById("homepageBanner")); va…

【C语言】学习笔记3——字符串

1. 字符串&#xff08;charcacter string&#xff09;是一个或多个字符的序列 2. C语言没有专门用于存储字符串的变量类型。字符串都被存储在char类型的数组种。 3. 数组由连续的存储单元组成&#xff0c;字符串种的字符被存储在相邻的存储单元中&#xff0c; 每个单元存储一个…

Facebook 的AI翻身之战!

作者 | Michael K. Spencer译者 | 王艳妮&#xff0c;责编 | 屠敏出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;Facebook最近举办了F8会议&#xff0c;这是了解这个平台未来发展的绝佳机会。 F8是Facebook的年度开发者大会——一个为期数日的活动&#xff0c;期间…

【Linux驱动】ThinkPad笔记本wifi模块rtl8821ce在ubuntu16.04的驱动(默认没有)

0、wifi模块型号 在win10下设备管理器中查看&#xff0c;型号为&#xff1a;Realtek 8821CE Wireless LAN 802.11ac PCI-E NIC 1、问题描述 在ThinkPad上安装win10ubuntu16.04双系统后&#xff0c;在win10下wifi可以正常使用&#xff0c;但是在ubuntu下没有wifi列表。 2、…

关于Linux的inode和dentry的一组文章

先mark一下&#xff0c;有时间再看。 http://www.ruanyifeng.com/blog/2011/12/inode.htmlhttp://teaching.idallen.com/dat2330/04f/notes/links_and_inodes.htmlhttp://www.thegeekstuff.com/2012/01/linux-inodes/http://blog.chinaunix.net/uid/7828352/frmd/-1.htmlhttp:/…

为什么Rust连续4年获“最受喜爱编程语言”?

作者 | Mike Tang责编 | Aholiab出品 | 区块链大本营&#xff08;blockchain_camp)2015年5月15日&#xff0c;Rust编程语言核心团队正式宣布发布Rust 1.0版本。4年来&#xff0c;它优雅的解决高并发和高安全性系统问题的能力&#xff0c;受到了越来越多开发者的喜爱。并且连续4…

【Windows】清除win10开始菜单中失效打程序标签

1、问题描述 安装新版本Qt程序&#xff0c;卸载旧版本Qt后&#xff0c;在开始菜单中&#xff0c;还有残留&#xff0c;但是已经失效&#xff0c;需要删除这些失效的程序标签。 2、显示隐藏文件夹 打开此电脑——查看——勾选“隐藏项目”&#xff1a; 3、删除失效的程序标签…

解析equals(Object obj)和compareTo(T obj)

背景&#xff1a;最近在研究静态扫描的东西&#xff0c;遇到一个规则&#xff1a;"equals(Object obj)" should be overridden along with the "compareTo(T obj)" method 然后就想深度扒一扒equals和compareTo有什么区别 1.java.lang.Object是所有类的父类…