MySQL 连接的使用

5 MySQL 连接的使用

标签(空格分隔): MySQL


可以在 SELECT, UPDATE 和 DELETE 语句中使用 Mysql 的 JOIN 来联合多表查询。
JOIN 按照功能大致分为如下三类:

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

INNER JOIN

两张数据表数据如下:

mysql> SELECT * from tcount_tbl;
+---------------+--------------+
| runoob_author | runoob_count |
+---------------+--------------+
| Google        | 22           |
| RUNOOB.COM    | 20           |
| 菜鸟教程      | 10           |
+---------------+--------------+

mysql> select * from runoob_tbl;
+-----------+--------------+---------------+-----------------+
| runoob_id | runoob_title | runoob_author | submission_date |
+-----------+--------------+---------------+-----------------+
|         1 | 学习 PHP     | 菜鸟教程      | 2017-08-10      |
|         2 | 学习MYSQL    | 菜鸟教程      | 2017-08-10      |
|         3 | 学习JAVA     | RUNOOB.COM    | 2016-05-06      |
|         4 | 学习Python   | RUNOOB.COM    | 2016-03-06      |
|         5 | 学习C        | FK            | 2017-04-05      |
+-----------+--------------+---------------+-----------------+

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

mysql> select a.runoob_id, a.runoob_author,b.runoob_count from runoob_tbl a inner join
    -> tcount_tbl b on a.runoob_author = b.runoob_author;
+-----------+---------------+--------------+
| runoob_id | runoob_author | runoob_count |
+-----------+---------------+--------------+
|         1 | 菜鸟教程      | 10           |
|         2 | 菜鸟教程      | 10           |
|         3 | RUNOOB.COM    | 20           |
|         4 | RUNOOB.COM    | 20           |
+-----------+---------------+--------------+

以上 SQL 语句等价于:

mysql> select a.runoob_id,a.runoob_author,b.runoob_count from runoob_tbl a ,tcount_tbl b
    -> where a.runoob_author = b.runoob_author;
+-----------+---------------+--------------+
| runoob_id | runoob_author | runoob_count |
+-----------+---------------+--------------+
|         1 | 菜鸟教程      | 10           |
|         2 | 菜鸟教程      | 10           |
|         3 | RUNOOB.COM    | 20           |
|         4 | RUNOOB.COM    | 20           |
+-----------+---------------+--------------+

LEFT JOIN

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

以 runoob_tbl 为左表,tcount_tbl 为右表,理解 MySQL LEFT JOIN 的应用:

mysql> select a.runoob_id,a.runoob_author ,b.runoob_count from runoob_tbl a
    -> left join tcount_tbl b on a.runoob_author = b.runoob_author;
+-----------+---------------+--------------+
| runoob_id | runoob_author | runoob_count |
+-----------+---------------+--------------+
|         3 | RUNOOB.COM    | 20           |
|         4 | RUNOOB.COM    | 20           |
|         1 | 菜鸟教程      | 10           |
|         2 | 菜鸟教程      | 10           |
|         5 | FK            | NULL         |
+-----------+---------------+--------------+

MySQL RIGHT JOIN

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

以 runoob_tbl 为左表,tcount_tbl 为右表,理解MySQL RIGHT JOIN的应用:

mysql> select a.runoob_id,a.runoob_author,b.runoob_count from runoob_tbl a
    -> right join tcount_tbl b on a.runoob_author = b.runoob_author;
+-----------+---------------+--------------+
| runoob_id | runoob_author | runoob_count |
+-----------+---------------+--------------+
|         1 | 菜鸟教程      | 10           |
|         2 | 菜鸟教程      | 10           |
|         3 | RUNOOB.COM    | 20           |
|         4 | RUNOOB.COM    | 20           |
|      NULL | NULL          | 22           |
+-----------+---------------+--------------+

猜你喜欢

转载自blog.csdn.net/weixin_42061048/article/details/80594608