请稍候,加载中....

SQL 多表连接

SQL JOIN语句

SQL JOIN 用于把来自两个或多个表的行结合起来。

SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。

根据连接方式的不同有: INNER JOIN LEFT JOINRIGHT JOINFULL JOIN

SQL INNER JOIN 从多个表中返回满足 JOIN 条件的所有行。

 


演示数据库

在猿变手册教程中,我们将使用 yuanbian 样本数据库。

下面是选自 "articles" 表的数据:

+----+-----------------+-----------+--------+---------------------+
| id | title           | author    | a_type | pub_date            |
+----+-----------------+-----------+--------+---------------------+
|  1 | hadoop简介      | 大猿      |    311 | 2003-01-05 11:23:00 |
|  2 | python元类      | 小猿      |    163 | 2003-01-11 13:00:01 |
|  3 | HTML基础        | 猿大头    |    497 | 2004-03-09 12:00:00 |
|  4 | Javascript      | 猿媛      |     20 | 2005-11-03 17:34:12 |
|  5 | ETL快速入门     | 猿媛      |      3 | 2005-11-07 18:40:00 |
+----+-----------------+-----------+--------+---------------------+

下面是 "article_view_log" 网站访问记录表的数据:

+--------+------+-------+------------+
| log_id | aid  | count | log_date   |
+--------+------+-------+------------+
|      1 |    1 | 100   | 2005-03-01 |
|      2 |    3 | 140   | 2005-03-01 |
|      3 |    5 | 303   | 2005-03-01 |
|      4 |    2 | 120   | 2005-03-02 |
|      5 |    4 | 180   | 2005-03-02 |
|      6 |    5 | 430   | 2005-03-02 |
|      7 |    1 | 210   | 2005-03-02 |
|      8 |    4 | 330   | 2005-03-03 |
|      9 |    2 | 210   | 2005-03-03 |
+--------+------+-------+------------+

请注意,"articles" 表中的 "id" 列指向 "article_view_log" 表中的字段 "aid"。上面这两个表是通过 "aid" 列关联起来的。

 


INNER JOIN示例

SELECT articles.id, articles.title, article_view_log.count, article_view_log.log_date
FROM articles
INNER JOIN article_view_log
ON articles.id=article_view_log.aid;

执行以上 SQL 输出结果如下:

+----+-----------------+-------+------------+
| id | title           | count | log_date   |
+----+-----------------+-------+------------+
|  1 | hadoop简介      | 100   | 2005-03-01 |
|  3 | HTML基础        | 140   | 2005-03-01 |
|  5 | ETL快速入门     | 303   | 2005-03-01 |
|  2 | python元类      | 120   | 2005-03-02 |
|  4 | Javascript      | 180   | 2005-03-02 |
|  5 | ETL快速入门     | 430   | 2005-03-02 |
|  1 | hadoop简介      | 210   | 2005-03-02 |
|  4 | Javascript      | 330   | 2005-03-03 |
|  2 | python元类      | 210   | 2005-03-03 |
+----+-----------------+-------+------------+
9 rows in set (0.02 sec)

 


不同的 SQL JOIN

在更详细的讲解之前,猿变手册先列出不同的 SQL JOIN 类型:

  • INNER JOIN:如果表中有至少一个匹配,则返回行
  • LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行
  • RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行
  • FULL JOIN:只要其中一个表中存在匹配,则返回行

下图展示了 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相关的 7 种用法。


Python学习手册-