456lives.com - 舒适慢生活

专享优惠券-淘宝天猫最热门优惠券清单 阿里旅行-前往世界的尽头 【聚名品】奢品潮流风向标 省钱优惠圈 精品女装 靓丽全场
文字广告45元/月 聚划算专享优惠 文字广告45元/月 文字广告45元/月 文字广告45元/月
京东居家生活 日用精品 抽免单+抽红包,福利抽不停 天猫超市-今日疯抢 多款好货任你抢 全球精选-享品质生活 广告合作客服QQ:253482037

用画图的方式解释 SQL JOIN 语句

时间:2017-08-08 08:26:25 | 作者:本站编辑 | 来源:网络 | 查看:489 | 评论:0

摘要: 今天慢生活的研发工程师为大家分享一篇关于SQL联合(join)语句的帖子,这篇帖子我觉得对于新手开发者来说是份很好的材料。

        今天慢生活的研发工程师为大家分享一篇关于SQL联合(join)语句的帖子,这篇帖子我觉得对于新手开发者来说是份很好的材料。假设我们有下面两张表。表A在左边,表B在右边。我们给它们各四条记录。

id name          id  name
-- ----          --  ----
1  Pirate         1   Rutabaga
2  Monkey         2   Pirate
3  Nathan         3   Darth Vader
4  Sidney         4   Nathan

        我们通过name字段用几种不同方式把这些表联合起来,看能否得到和那些漂亮的韦恩图在概念上的匹配。

        一、内联合(inner join)

        内联合(inner join)只生成同时匹配表A和表B的记录集。

SELECT * FROM TableA INNER JOIN TableB ON TableA.name = TableB.name
id  name      id   name
--  ----      --   ----
1   Pirate     2    Pirate
3   Nathan     4    Nathan

内联合(inner join)

        二、全外联合(full outer join)

        全外联合(full outer join)生成表A和表B里的记录全集,包括两边都匹配的记录。如果有一边没有匹配的,缺失的这一边为null。

SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name
id    name      id    name
--    ----      --    ----
1     Pirate     2     Pirate
2     Monkey     null   null
3     Nathan     4     Nathan
4     Sidney     null   null
null   null       1     Rutabaga
null   null       3     Darth Vader

全外联合(full outer join)

        三、左外联合(left outer join)

        左外联合(left outer join)生成表A的所有记录,包括在表B里匹配的记录。如果没有匹配的,右边将是null。

SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name
id  name      id    name
--  ----      --    ----
1   Pirate     2     Pirate
2   Monkey     null   null
3   Nathan     4     Nathan
4   Sidney     null   null

左外联合(left outer join)

        四、左外联合 + where

        为了生成只在表A里而不在表B里的记录集,我们用同样的左外联合,然后用where语句排除我们不想要的记录。

SELECT * FROM TableA LEFT OUTER JOIN TableB ON TableA.name = TableB.name WHERE TableB.id IS null
id  name       id   name
--  ----       --   ----
2   Monkey     null   null
4   Sidney     null   null

左外联合 + where

        五、全外联合 + where

        为了生成对于表A和表B唯一的记录集,我们用同样的全外联合,然后用where语句排除两边都不想要的记录。

SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name WHERE TableA.id IS null OR TableB.id IS null
id    name      id    name
--    ----      --    ----
2     Monkey     null  null
4     Sidney     null  null
null   null       1   Rutabaga
null   null       3   Darth Vader

全外联合 + where

        六、交叉联合(cross join)

        还有一种笛卡尔积或者交叉联合(cross join),据我所知不能用韦恩图表示

SELECT * FROM TableA CROSS JOIN TableB

        这个把“所有”联接到“所有”,产生4乘4=16行,远多于原始的集合。如果你学过数学,你便知道为什么这个联合遇上大型的表很危险。

交叉联合(cross join)


  • 0
    惊讶
  • 0
    欠揍
  • 0
    支持
  • 0
    很棒
  • 0
    愤怒
  • 0
    搞笑
  • 0
    恶心
  • 0
    不解
此篇文章已有0人参与评论

请发表评论

热门评论

精选资讯


免责申明:本站部份内容来源自互联网,如果侵害了您的合法权益,请您及时与我们联系,我们会在第一时间给予改正和删除。

Powered by 舒适慢生活 Copyright © 2013-2023, All Rights Reserved京ICP备13024987号-4京公网安备11010602030047号京公网安备11010602030047号

工作时间:7x24小时联系QQ:253482037服务热线:188****4459活动洽谈:188****4459联系邮箱:253482037@qq.com