前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[498]left join、inner join、right join、full outer join的区别

[498]left join、inner join、right join、full outer join的区别

作者头像
周小董
发布2022-04-13 14:19:21
1.5K0
发布2022-04-13 14:19:21
举报
文章被收录于专栏:python前行者python前行者

文章目录

sql的left join 、right join 、inner join之间的区别

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

t_user表

image.png
image.png

t_class表

image.png
image.png

sql语句:(左联结)

代码语言:javascript
复制
select u.UserID,u.UserName,c.id,c.name
from t_user u left join t_class c   on  c.id  = u.UserID

运行结果:

image.png
image.png

sql语句:(右联结)

代码语言:javascript
复制
select u.UserID,u.UserName,c.id,c.name
from t_user u RIGHT join t_class c
                    on  c.id  = u.UserID

运行结构:

image.png
image.png

sql语句(自然联结):

代码语言:javascript
复制
select u.UserID,u.UserName,c.id,c.name
from t_user u inner join t_class c
                    on  c.id  = u.UserID

运行结果:

image.png
image.png

根据构建的虚拟表,更新相同的字段值

代码语言:javascript
复制
update dmdc.bond_issuser_rela_detail c inner join (SELECT DISTINCT a.com_uni_code,a.com_chi_name,b.com_uni_code as code2,b.com_chi_name as name2
    FROM dmdc.bond_issuser_rela_detail a
    LEFT JOIN dmdc.t_com_info b 
    ON a.com_chi_name=b.com_chi_name
    WHERE a.com_uni_code is NULL and b.com_uni_code is not NULL ORDER BY b.com_uni_code) d on d.com_chi_name=c.com_chi_name
set c.com_uni_code = d.code2

说明:select查询造的虚拟表当做查询源的时候, 这个select语句是完全独立的, 不和他以外的SQL相通

代码语言:javascript
复制
 update  表1  a1  inner join  (select 字段1,字段2 from 表1 where 条件) a2 on 条件
        set   a1.字段1 = a2.字段2 

先造出来一个虚拟表,然后通过更新虚拟表的方式去实现具体的更新;

FULL OUTER JOIN

SQL FULL OUTER JOIN 关键字

FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行.

FULL OUTER JOIN 关键字结合了 LEFT JOIN 和 RIGHT JOIN 的结果。

SQL FULL OUTER JOIN 语法
代码语言:javascript
复制
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;
SQL FULL OUTER JOIN
SQL FULL OUTER JOIN
演示数据库

下面是选自 “Websites” 表的数据:

代码语言:javascript
复制
+----+--------------+---------------------------+-------+---------+
| id | name         | url                       | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1  | Google       | https://www.google.cm/    | 1     | USA     |
| 2  | 淘宝          | https://www.taobao.com/   | 13    | CN      |
| 3  | 菜鸟教程      | http://www.runoob.com/    | 4689  | CN      |
| 4  | 微博          | http://weibo.com/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook.com/ | 3     | USA     |
| 7  | stackoverflow | http://stackoverflow.com/ |   0 | IND     |
+----+---------------+---------------------------+-------+---------+

下面是 “access_log” 网站访问记录表的数据:

代码语言:javascript
复制
+-----+---------+-------+------------+
| aid | site_id | count | date       |
+-----+---------+-------+------------+
|   1 |       1 |    45 | 2016-05-10 |
|   2 |       3 |   100 | 2016-05-13 |
|   3 |       1 |   230 | 2016-05-14 |
|   4 |       2 |    10 | 2016-05-14 |
|   5 |       5 |   205 | 2016-05-14 |
|   6 |       4 |    13 | 2016-05-15 |
|   7 |       3 |   220 | 2016-05-15 |
|   8 |       5 |   545 | 2016-05-16 |
|   9 |       3 |   201 | 2016-05-17 |
+-----+---------+-------+------------+
9 rows in set (0.00 sec)
SQL FULL OUTER JOIN 实例

MySQL中不支持 FULL OUTER JOIN,你可以在 SQL Server 测试以下实例

代码语言:javascript
复制
SELECT Websites.name, access_log.count, access_log.date
FROM Websites
FULL OUTER JOIN access_log
ON Websites.id=access_log.site_id
ORDER BY access_log.count DESC;

**注释:**FULL OUTER JOIN 关键字返回左表(Websites)和右表(access_log)中所有的行。如果 “Websites” 表中的行在 “access_log” 中没有匹配或者 “access_log” 表中的行在 “Websites” 表中没有匹配,也会列出这些行。

A inner join B 取交集。 A left join B 取 A 全部,B 没有对应的值为 null。 A right join B 取 B 全部 A 没有对应的值为 null。 A full outer join B 取并集,彼此没有对应的值为 null。 对应条件在 on 后面填写。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-01-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • sql的left join 、right join 、inner join之间的区别
  • FULL OUTER JOIN
    • SQL FULL OUTER JOIN 关键字
      • SQL FULL OUTER JOIN 语法
        • 演示数据库
          • SQL FULL OUTER JOIN 实例
          相关产品与服务
          云数据库 MySQL
          腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档