SQL JOIN语句
SQL JOIN 用于把来自两个或多个表的行结合起来。
SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。
根据连接方式的不同有: INNER JOIN、 LEFT JOIN、RIGHT JOIN、FULL 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 种用法。
讨论区