老莫的笔记本  
  
查看: 1217|回复: 0

MYSQL 连接语句 JOIN

[复制链接]

662

主题

878

帖子

5133

积分

超级版主

Rank: 8Rank: 8

积分
5133
发表于 2018-7-27 00:23:09 | 显示全部楼层 |阅读模式
JOIN  : 在两个或者多个表中查询数据,可以在 SELECT ,UPDAYE 和 DELETE 的语句中使用 MYSQL 的JOIN 联合多表查询。
INNER HOINF(内连接,或等值链接) : 获取两个表中字段匹配关系的记录。
LEFT JOIN (左连接 ) 获取左表中所有记录,即使右表没有队友的匹配记录。
RIGH JOIN(右连接) 与LEFT JOIN 相反,用于获取右表所有记录即使左表没有对应匹配的记录。

先来个测试数据
  1. mysql> use RUNOOB;
  2. Database changed
  3. mysql> SELECT * FROM tcount_tbl;
  4. +---------------+--------------+
  5. | runoob_author | runoob_count |
  6. +---------------+--------------+
  7. | 菜鸟教程  | 10           |
  8. | RUNOOB.COM    | 20           |
  9. | Google        | 22           |
  10. +---------------+--------------+
  11. 3 rows in set (0.01 sec)
  12. mysql> SELECT * from runoob_tbl;
  13. +-----------+---------------+---------------+-----------------+
  14. | runoob_id | runoob_title  | runoob_author | submission_date |
  15. +-----------+---------------+---------------+-----------------+
  16. | 1         | 学习 PHP    | 菜鸟教程  | 2017-04-12      |
  17. | 2         | 学习 MySQL  | 菜鸟教程  | 2017-04-12      |
  18. | 3         | 学习 Java   | RUNOOB.COM    | 2015-05-01      |
  19. | 4         | 学习 Python | RUNOOB.COM    | 2016-03-06      |
  20. | 5         | 学习 C      | FK            | 2017-04-05      |
  21. +-----------+---------------+---------------+-----------------+
  22. 5 rows in set (0.01 sec)
复制代码

第一测: 使用 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 tcount_tbl b ON a.runoob_author = b.runoob_author;
  2. +-------------+-----------------+----------------+
  3. | a.runoob_id | a.runoob_author | b.runoob_count |
  4. +-------------+-----------------+----------------+
  5. | 1           | 菜鸟教程    | 10             |
  6. | 2           | 菜鸟教程    | 10             |
  7. | 3           | RUNOOB.COM      | 20             |
  8. | 4           | RUNOOB.COM      | 20             |
  9. +-------------+-----------------+----------------+
  10. 4 rows in set (0.00 sec)
复制代码
就相当于 WHERE 语句
  1. SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a, tcount_tbl b WHERE a.runoob_author = b.runoob_author;
复制代码
LEFT JOIN 与 JOIN 有所不同,前者会从左侧读取数据表的全部数据,即便右边无对应数据。
  1. 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;
  2. +-------------+-----------------+----------------+
  3. | a.runoob_id | a.runoob_author | b.runoob_count |
  4. +-------------+-----------------+----------------+
  5. | 1           | 菜鸟教程    | 10             |
  6. | 2           | 菜鸟教程    | 10             |
  7. | 3           | RUNOOB.COM      | 20             |
  8. | 4           | RUNOOB.COM      | 20             |
  9. | 5           | FK              | NULL           |
  10. +-------------+-----------------+----------------+
  11. 5 rows in set (0.01 sec)
复制代码

RIGHTJOIN 与 上述相反 为右侧全表
  1. 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;
  2. +-------------+-----------------+----------------+
  3. | a.runoob_id | a.runoob_author | b.runoob_count |
  4. +-------------+-----------------+----------------+
  5. | 1           | 菜鸟教程    | 10             |
  6. | 2           | 菜鸟教程    | 10             |
  7. | 3           | RUNOOB.COM      | 20             |
  8. | 4           | RUNOOB.COM      | 20             |
  9. | NULL        | NULL            | 22             |
  10. +-------------+-----------------+----------------+
  11. 5 rows in set (0.01 sec)
复制代码


PHP中的用法:  老套路 MYSQLI_QUERY()
  1. <?php
  2. $dbhost = 'localhost:3306';  // mysql服务器主机地址
  3. $dbuser = 'root';            // mysql用户名
  4. $dbpass = '123456';          // mysql用户名密码
  5. $conn = mysqli_connect($dbhost, $dbuser, $dbpass);
  6. if(! $conn )
  7. {
  8.     die('连接失败: ' . mysqli_error($conn));
  9. }
  10. // 设置编码,防止中文乱码
  11. mysqli_query($conn , "set names utf8");
  12. $sql = '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
  13. mysqli_select_db( $conn, 'RUNOOB' );
  14. $retval = mysqli_query( $conn, $sql );
  15. if(! $retval )
  16. {
  17.     die('无法读取数据: ' . mysqli_error($conn));
  18. }
  19. echo '<h2>菜鸟教程 MySQL JOIN 测试<h2>echo '<table border="1"><tr><td>教程 ID</td><td>作者</td><td>登陆次数</td></tr>while($row = mysqli_fetch_array($retval, MYSQL_ASSOC))
  20. {
  21.     echo "<tr><td> {$row['runoob_id']}</td> ".
  22.          "<td>{$row['runoob_author']} </td> ".
  23.          "<td>{$row['runoob_count']} </td> ".
  24.          "</tr>";
  25. }
  26. echo '</table>mysqli_close($conn);
  27. ?>
复制代码






回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表