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

本文详细介绍了SQL中的三种主要连接查询类型:LEFTJOIN显示左表所有数据及匹配的右表数据;RIGHTJOIN显示右表所有数据及匹配的左表数据;INNERJOIN仅显示两表数据匹配的部分。通过示例解释了每个连接类型如何根据连接条件组合两个表的数据。
摘要由CSDN通过智能技术生成

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

 

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

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月影WEB

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值