[关闭]
@yanglt7 2018-06-06T06:41:55.000000Z 字数 2589 阅读 886

6 MySQL 连接的使用

MySQL


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

INNER JOIN

两张数据表数据如下:

  1. mysql> SELECT * from tcount_tbl;
  2. +---------------+--------------+
  3. | runoob_author | runoob_count |
  4. +---------------+--------------+
  5. | Google | 22 |
  6. | RUNOOB.COM | 20 |
  7. | 菜鸟教程 | 10 |
  8. +---------------+--------------+
  9. mysql> select * from runoob_tbl;
  10. +-----------+--------------+---------------+-----------------+
  11. | runoob_id | runoob_title | runoob_author | submission_date |
  12. +-----------+--------------+---------------+-----------------+
  13. | 1 | 学习 PHP | 菜鸟教程 | 2017-08-10 |
  14. | 2 | 学习MYSQL | 菜鸟教程 | 2017-08-10 |
  15. | 3 | 学习JAVA | RUNOOB.COM | 2016-05-06 |
  16. | 4 | 学习Python | RUNOOB.COM | 2016-03-06 |
  17. | 5 | 学习C | FK | 2017-04-05 |
  18. +-----------+--------------+---------------+-----------------+

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

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

以上 SQL 语句等价于:

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

LEFT JOIN

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

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

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

MySQL RIGHT JOIN

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

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

  1. mysql> select a.runoob_id,a.runoob_author,b.runoob_count from runoob_tbl a
  2. -> right join tcount_tbl b on a.runoob_author = b.runoob_author;
  3. +-----------+---------------+--------------+
  4. | runoob_id | runoob_author | runoob_count |
  5. +-----------+---------------+--------------+
  6. | 1 | 菜鸟教程 | 10 |
  7. | 2 | 菜鸟教程 | 10 |
  8. | 3 | RUNOOB.COM | 20 |
  9. | 4 | RUNOOB.COM | 20 |
  10. | NULL | NULL | 22 |
  11. +-----------+---------------+--------------+
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注