MySQL JOIN连接的使用

使用 MySQL 的 JOIN 在两个或多个表中查询数据。可以在 SELECT, UPDATE 和 DELETE 语句中使用 Mysql 的 JOIN 来联合多表查询。

JOIN 按照功能大致分为如下三类:

  • INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录
  • LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录
  • RIGHT JOIN(右连接):与LEFT JOIN相反,用于获取右表所有记录,即使左表没有对应匹配的记录

MySQL INNER JOIN

我们在appblog数据库中有两张表tcount_tblappblog_tbl

mysql> use appblog;
Database changed
mysql> SELECT * FROM tcount_tbl;
+-----------------+--------------+
| appblog_author  | appblog_count|
+-----------------+--------------+
| APP开发技术博客 | 10           |
| APPBLOG.CN      | 20           |
| Google          | 22           |
+-----------------+--------------+
3 rows in set (0.01 sec)

mysql> SELECT * from appblog_tbl;
+------------+---------------+-----------------+-----------------+
| appblog_id | appblog_title | appblog_author  | submission_date |
+------------+---------------+-----------------+-----------------+
| 1          | 学习 PHP      | APP开发技术博客 | 2017-04-12      |
| 2          | 学习 MySQL    | APP开发技术博客 | 2017-04-12      |
| 3          | 学习 Java     | APPBLOG.CN      | 2015-05-01      |
| 4          | 学习 Python   | APPBLOG.CN      | 2016-03-06      |
| 5          | 学习 C        | FK              | 2017-04-05      |
+------------+---------------+-----------------+-----------------+
5 rows in set (0.01 sec)

接下来我们就使用MySQL的INNER JOIN(也可以省略INNER使用JOIN,效果一样)来连接以上两张表来读取appblog_tbl表中所有appblog_author字段在tcount_tbl表对应的appblog_count字段值:

INNER JOIN

mysql> SELECT a.appblog_id, a.appblog_author, b.appblog_count FROM appblog_tbl a INNER JOIN tcount_tbl b ON a.appblog_author = b.appblog_author;
+--------------+------------------+-----------------+
| a.appblog_id | a.appblog_author | b.appblog_count |
+--------------+------------------+-----------------+
| 1            | APP开发技术博客  | 10              |
| 2            | APP开发技术博客  | 10              |
| 3            | APPBLOG.CN       | 20              |
| 4            | APPBLOG.CN       | 20              |
+--------------+------------------+-----------------+
4 rows in set (0.00 sec)

以上 SQL 语句等价于:

WHERE 子句

mysql> SELECT a.appblog_id, a.appblog_author, b.appblog_count FROM appblog_tbl a, tcount_tbl b WHERE a.appblog_author = b.appblog_author;
+--------------+------------------+-----------------+
| a.appblog_id | a.appblog_author | b.appblog_count |
+--------------+------------------+-----------------+
| 1            | APP开发技术博客  | 10              |
| 2            | APP开发技术博客  | 10              |
| 3            | APPBLOG.CN       | 20              |
| 4            | APPBLOG.CN       | 20              |
+--------------+------------------+-----------------+
4 rows in set (0.01 sec)

INNER JOIN

MySQL LEFT JOIN

MySQL LEFT JOINJOIN有所不同。MySQL LEFT JOIN会读取左边数据表的全部数据,即便右边表无对应数据。

尝试以下实例,以appblog_tbl为左表,tcount_tbl为右表,理解MySQL LEFT JOIN的应用:

LEFT JOIN

mysql> SELECT a.appblog_id, a.appblog_author, b.appblog_count FROM appblog_tbl a LEFT JOIN tcount_tbl b ON a.appblog_author = b.appblog_author;
+--------------+------------------+-----------------+
| a.appblog_id | a.appblog_author | b.appblog_count |
+--------------+------------------+-----------------+
| 1            | APP开发技术博客  | 10              |
| 2            | APP开发技术博客  | 10              |
| 3            | APPBLOG.CN       | 20              |
| 4            | APPBLOG.CN       | 20              |
| 5            | FK               | NULL            |
+--------------+------------------+-----------------+
5 rows in set (0.01 sec)

以上实例中使用了LEFT JOIN,该语句会读取左边的数据表appblog_tbl的所有选取的字段数据,即便在右侧表tcount_tbl中没有对应的appblog_author字段值。

LEFT JOIN

MySQL RIGHT JOIN

MySQL RIGHT JOIN会读取右边数据表的全部数据,即便左边边表无对应数据。

尝试以下实例,以appblog_tbl为左表,tcount_tbl为右表,理解MySQL RIGHT JOIN的应用:

RIGHT JOIN

mysql> SELECT a.appblog_id, a.appblog_author, b.appblog_count FROM appblog_tbl a RIGHT JOIN appblog_tbl b ON a.appblog_author = b.appblog_author;
+--------------+------------------+-----------------+
| a.appblog_id | a.appblog_author | b.appblog_count |
+--------------+------------------+-----------------+
| 1            | APP开发技术博客  | 10              |
| 2            | APP开发技术博客  | 10              |
| 3            | APPBLOG.CN       | 20              |
| 4            | APPBLOG.CN       | 20              |
| NULL         | NULL             | 22              |
+--------------+------------------+-----------------+
5 rows in set (0.01 sec)

以上实例中使用了RIGHT JOIN,该语句会读取右边的数据表tcount_tbl的所有选取的字段数据,即便在左侧表appblog_tbl中没有对应的appblog_author字段值。

RIGHT JOIN

版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/02/24/mysql-join-connection-usage/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
MySQL JOIN连接的使用
使用 MySQL 的 JOIN 在两个或多个表中查询数据。可以在 SELECT, UPDATE 和 DELETE 语句中使用 Mysql 的 JOIN 来联合多表查询。 JOIN 按照功能大致分为如下三类……
<<上一篇
下一篇>>
文章目录
关闭
目 录