MySQL JOIN连接的使用
使用 MySQL 的 JOIN 在两个或多个表中查询数据。可以在 SELECT, UPDATE 和 DELETE 语句中使用 Mysql 的 JOIN 来联合多表查询。
JOIN 按照功能大致分为如下三类:
INNER JOIN
(内连接,或等值连接):获取两个表中字段匹配关系的记录LEFT JOIN
(左连接):获取左表所有记录,即使右表没有对应匹配的记录RIGHT JOIN
(右连接):与LEFT JOIN
相反,用于获取右表所有记录,即使左表没有对应匹配的记录
MySQL INNER JOIN
我们在appblog数据库中有两张表tcount_tbl
和appblog_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)
MySQL LEFT JOIN
MySQL LEFT JOIN
与JOIN
有所不同。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
字段值。
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
字段值。
版权声明:
作者:Joe.Ye
链接:https://www.appblog.cn/index.php/2023/02/24/mysql-join-connection-usage/
来源:APP全栈技术分享
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论