sql的左连接(LEFT JOIN)、右连接(RIGHT JOIN)、内连接(INNER JOIN)的详解

news/2025/2/12 19:56:38/

sql的左连接(LEFT JOIN)、右连接(RIGHT JOIN)、内连接(INNER JOIN)的详解:

这里以两个表的连表为例:


创建表1:为人员表,这里将它当做左表;

CREATE TABLE `user` (`id` int(11) NOT NULL AUTO_INCREMENT,`username` varchar(255) DEFAULT NULL,`password` varchar(255) DEFAULT NULL,`phone` varchar(255) DEFAULT NULL,`address` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

创建表2:为发布文章表,这里将它当做右表;

CREATE TABLE `news` (`id` int(11) NOT NULL AUTO_INCREMENT,`types` varchar(255) DEFAULT NULL,`titles` varchar(255) DEFAULT NULL,`contents` varchar(255) DEFAULT NULL,`author` varchar(50) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

1.左连接(LEFT JOIN)全称为左外连接:

是以左表为基础,根据ON后面给出的两个表的条件将两个表连接起来。
结果是会将左表所有的查询数据展示出来,而右表只展示出ON后面的条件与左表满足的部分。

举例:以左表的username字段和右表的author字段作为两个表的连接字段将两个表连接起来;

select user.username,user.phone,news.types,news.author,news.titles from user 
left join news on user.username = news.author

如图1

 

从图中可以看出左表的数据都展示出来了,而右表的数据只展示出了与左表连接的数据;
如果左表有数据和右表的数据为一对多的话,那么右表的多条对应左表一条的数据都展示出来。

2.右连接(RIGHT JOIN)全称为右外连接:

是以右表为基础,根据ON后面给出的两个表的条件将两个表连接起来。
结果是会将右表所有的查询数据展示出来,而左表只展示出ON后面的条件与右表满足的部分。

举例:以左表的username字段和右表的author字段作为两个表的连接字段将两个表连接起来;

select user.username,user.phone,news.types,news.author,news.titles from user 
right join news on user.username = news.author

如图2

 

从图中可以看出右表的数据都展示出来了,而左表的数据只展示出了与右表连接的数据;
如果右表有数据和左表的数据为多对一的话,那么左表的一条对应右表多条的数据会重复展示。

3.内连接(INNER JOIN)

是同时将两个表作为参考对象,根据ON后面给出的两个表的条件将两个表连接起来。
结果则是只有两个表同时满足ON后面的条件的部分才会展示出来。

举例:以左表的username字段和右表的author字段作为两个表的连接字段将两个表连接起来;

select user.username,user.phone,news.types,news.author,news.titles from user 
inner join news on user.username = news.author

如图3

 

从图中可以看出只有左表和右表两个表连接有相同的数据的部分才会展示出来。
 


http://www.ppmy.cn/news/46713.html

相关文章

DETR【论文阅读】

End-to-End Object Detection with Transformers 1. Introduction 发表:ECCV 2020影响:在目标检测上使用了一种全新的架构,是里程碑式的工作。简单优雅统一的结构,不再依赖于人的先验知识(anchor生成,nms…

javaweb笔记2

JSP 1、在webapp的根目录下新建一个index.jsp文件,访问以下地址: http://localhost:8080/webappName/index.jsp 实际上访问这个index.jsp文件,底层执行的是:index_jsp.class这个程序。 这个index.jsp会被tomcat翻译成index_jsp.j…

vue项目使用elementui上传组件 打包后报错t.upload.addEventListener is not a function的解决方案

错误问题 Vue:xhr.upload.addEventListener is not a function 这个问题是因为mockjs改动了axios里面XMLHttpRequest对象致使的 根据axios源码 l是一个XMLHttpRequest对象 mockJs把l变量从XMLHttpRequest对象改为了MockXMLHttpRequest对象 因此l.upload是一个空对象 空对象…

K8s为什么要放弃Docker

公司定期分享整理的资料 放弃始由 https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.20.md#deprecation 2020 年,k8s 1.20 终于正式向 Docker “宣战”:kubelet将弃用 Docker 支持,并将在未来的版本中完全移除。…

git使用规范文档

git使用规范文档 Git使用规范流程图 开发人员操作步骤: 第一步:clone代码 在你的本地代码库进行从远程仓库clone代码操作(100%表示clone完成) 进入项目文件,右键Git Bash Here 切换到你所进行开发的分支上 拉取该分…

故障重现, JAVA进程内存不够时突然挂掉模拟

背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize # This output file may be truncated or incomplete. # # Out of Memory Error (os_linux.cpp:26…

小红书达人种草怎么收费?

随着小红书平台的快速发展,用户数量在不断的上升,市场上也涌现出了很多的小红书营销公司,小红书营销主要是以小红书代写代发、品牌植入广告等方式来做品牌种草品宣。 小红书达人种草怎么收费这个问题,相信很多商家朋友都非常关心…

Ubuntu18.04 Gitkraken GitCracken

参考资料: ubuntu 安装 Gitkraken 9.x Pro 版本_gitkraken ubuntu CSDN博客【GitCracken】v8.1.1_gitcracken不起作用_等风来不如迎风去的博客-CSDN博客 关键: 材料1:需要使用linux/GitKraken-v8.1.1.tar.gz材料2:需要使用wcxo…