画图解释SQL联合语句

默北 MySQL画图解释SQL联合语句已关闭评论8,554字数 1242阅读4分8秒阅读模式

SQL joins操作图:

inner join

SQL-Joins

设计两张表A和B,记录如下:文章源自运维生存时间-https://www.ttlsa.com/mysql/drawing-interpretation-of-sql-joint-statement/

id name       id  name
-- ----       --  ----
1  Pirate     1   Rutabaga
2  Monkey     2   Pirate
3  Ninja      3   Darth Vader
4  Spaghetti  4   Ninja

1. 内联合(inner join)只生成同时匹配表A和表B的记录集文章源自运维生存时间-https://www.ttlsa.com/mysql/drawing-interpretation-of-sql-joint-statement/

SELECT * FROM TableA
INNER JOIN TableB
ON TableA.name = TableB.name

id  name       id   name
--  ----       --   ----
1   Pirate     2    Pirate
3   Ninja      4    Ninja

图解如下:文章源自运维生存时间-https://www.ttlsa.com/mysql/drawing-interpretation-of-sql-joint-statement/

inner join文章源自运维生存时间-https://www.ttlsa.com/mysql/drawing-interpretation-of-sql-joint-statement/

2. 全外联合(full outer join)生成表A和表B里的记录全集,包括两边都匹配的记录。如果有一边没有匹配的,缺失的这一边为null文章源自运维生存时间-https://www.ttlsa.com/mysql/drawing-interpretation-of-sql-joint-statement/

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     Ninja      4     Ninja
4     Spaghetti  null  null
null  null       1     Rutabaga       
null  null       3     Darth Vader

图解如下:文章源自运维生存时间-https://www.ttlsa.com/mysql/drawing-interpretation-of-sql-joint-statement/

inner join文章源自运维生存时间-https://www.ttlsa.com/mysql/drawing-interpretation-of-sql-joint-statement/

 文章源自运维生存时间-https://www.ttlsa.com/mysql/drawing-interpretation-of-sql-joint-statement/

3. 左外联合(left outer join)生成表A的所有记录,包括在表B里匹配的记录。如果没有匹配的,右边将是null文章源自运维生存时间-https://www.ttlsa.com/mysql/drawing-interpretation-of-sql-joint-statement/

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   Ninja      4     Ninja
4   Spaghetti  null  null

图解如下:文章源自运维生存时间-https://www.ttlsa.com/mysql/drawing-interpretation-of-sql-joint-statement/

inner join文章源自运维生存时间-https://www.ttlsa.com/mysql/drawing-interpretation-of-sql-joint-statement/

 文章源自运维生存时间-https://www.ttlsa.com/mysql/drawing-interpretation-of-sql-joint-statement/

为了生成只在表A里而不在表B里的记录集,我们用同样的左外联合,然后用where语句排除我们不想要的记录。文章源自运维生存时间-https://www.ttlsa.com/mysql/drawing-interpretation-of-sql-joint-statement/

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   Spaghetti  null   null

图解如下:文章源自运维生存时间-https://www.ttlsa.com/mysql/drawing-interpretation-of-sql-joint-statement/

inner join文章源自运维生存时间-https://www.ttlsa.com/mysql/drawing-interpretation-of-sql-joint-statement/

 文章源自运维生存时间-https://www.ttlsa.com/mysql/drawing-interpretation-of-sql-joint-statement/

为了生成对于表A和表B唯一的记录集,我们用同样的全外联合,然后用where语句排除两边都不想要的记录。文章源自运维生存时间-https://www.ttlsa.com/mysql/drawing-interpretation-of-sql-joint-statement/

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     Spaghetti  null  null
null  null       1     Rutabaga
null  null       3     Darth Vader

图解如下:文章源自运维生存时间-https://www.ttlsa.com/mysql/drawing-interpretation-of-sql-joint-statement/

inner join文章源自运维生存时间-https://www.ttlsa.com/mysql/drawing-interpretation-of-sql-joint-statement/ 文章源自运维生存时间-https://www.ttlsa.com/mysql/drawing-interpretation-of-sql-joint-statement/

weinxin
我的微信
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~
默北
  • 本文由 发表于 03/08/2013 16:28:49
  • 转载请务必保留本文链接:https://www.ttlsa.com/mysql/drawing-interpretation-of-sql-joint-statement/
  • inner join
  • right join
  • SQL left join