在前几章节中,咱们已经学会了如何在一张表中读取数据,这是相对简单的,但是在真正的应用中经常需要从多个数据表中读取数据。

本章节咱们将向大家介绍如何使用 MySQL 的 JOIN 在两个或多个表中查询数据。

足下可以在 SELECT, UPDATE 和 DELETE 语句中使用 Mysql 的 JOIN 来联合多表查询。

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

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

本章节使用的database结构及数据download :liulianjiangcsdn-mysql-join-test.sql。


在命令提示符中使用 INNER JOIN

咱们在liulianjiangcsdndatabase中有两张表 tcount_tbl 和 liulianjiangcsdn_tbl。两张数据表数据如下:

实例

尝试以下实例:

测试实例数据mysql> use liulianjiangcsdn;Database changedmysql> SELECT * FROM tcount_tbl;+---------------+--------------+| liulianjiangcsdn_author | liulianjiangcsdn_count |+---------------+--------------+| liulianjiangcsdn教程  | 10           || liulianjiangcsdn.COM    | 20           || Google        | 22           |+---------------+--------------+3 rows in set (0.01 sec)mysql> SELECT * from liulianjiangcsdn_tbl;+-----------+---------------+---------------+-----------------+| liulianjiangcsdn_id | liulianjiangcsdn_title  | liulianjiangcsdn_author | submission_date |+-----------+---------------+---------------+-----------------+| 1         | 学习 PHP    | liulianjiangcsdn教程  | 2017-04-12      || 2         | 学习 MySQL  | liulianjiangcsdn教程  | 2017-04-12      || 3         | 学习 Java   | liulianjiangcsdn.COM    | 2015-05-01      || 4         | 学习 Python | liulianjiangcsdn.COM    | 2016-03-06      || 5         | 学习 C      | FK            | 2017-04-05      |+-----------+---------------+---------------+-----------------+5 rows in set (0.01 sec)

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

 INNER JOINmysql> SELECT a.liulianjiangcsdn_id, a.liulianjiangcsdn_author, b.liulianjiangcsdn_count FROM liulianjiangcsdn_tbl a INNER JOIN tcount_tbl b ON a.liulianjiangcsdn_author = b.liulianjiangcsdn_author;
​    +-------------+-----------------+----------------+
​    | a.liulianjiangcsdn_id | a.liulianjiangcsdn_author | b.liulianjiangcsdn_count |
​    +-------------+-----------------+----------------+
​    | 1           | liulianjiangcsdn教程    | 10             |
​    | 2           | liulianjiangcsdn教程    | 10             |
​    | 3           | liulianjiangcsdn.COM      | 20             |
​    | 4           | liulianjiangcsdn.COM      | 20             |
​    +-------------+-----------------+----------------+
​    4 rows in set (0.00 sec)

以上 SQL 语句等价于:

WHERE 子句mysql> SELECT a.liulianjiangcsdn_id, a.liulianjiangcsdn_author, b.liulianjiangcsdn_count FROM liulianjiangcsdn_tbl a, tcount_tbl b WHERE a.liulianjiangcsdn_author = b.liulianjiangcsdn_author;+-------------+-----------------+----------------+| a.liulianjiangcsdn_id | a.liulianjiangcsdn_author | b.liulianjiangcsdn_count |+-------------+-----------------+----------------+| 1           | liulianjiangcsdn教程    | 10             || 2           | liulianjiangcsdn教程    | 10             || 3           | liulianjiangcsdn.COM      | 20             || 4           | liulianjiangcsdn.COM      | 20             |+-------------+-----------------+----------------+4 rows in set (0.01 sec)

MySQL LEFT JOIN

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

实例

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

LEFT JOINmysql> SELECT a.liulianjiangcsdn_id, a.liulianjiangcsdn_author, b.liulianjiangcsdn_count FROM liulianjiangcsdn_tbl a LEFT JOIN tcount_tbl b ON a.liulianjiangcsdn_author = b.liulianjiangcsdn_author;+-------------+-----------------+----------------+| a.liulianjiangcsdn_id | a.liulianjiangcsdn_author | b.liulianjiangcsdn_count |+-------------+-----------------+----------------+| 1           | liulianjiangcsdn教程    | 10             || 2           | liulianjiangcsdn教程    | 10             || 3           | liulianjiangcsdn.COM      | 20             || 4           | liulianjiangcsdn.COM      | 20             || 5           | FK              | NULL           |+-------------+-----------------+----------------+5 rows in set (0.01 sec)

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


MySQL RIGHT JOIN

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

实例

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

RIGHT JOIN mysql> SELECT a.liulianjiangcsdn_id, a.liulianjiangcsdn_author, b.liulianjiangcsdn_count FROM liulianjiangcsdn_tbl a RIGHT JOIN tcount_tbl b ON a.liulianjiangcsdn_author = b.liulianjiangcsdn_author;+-------------+-----------------+----------------+| a.liulianjiangcsdn_id | a.liulianjiangcsdn_author | b.liulianjiangcsdn_count |+-------------+-----------------+----------------+| 1           | liulianjiangcsdn教程    | 10             || 2           | liulianjiangcsdn教程    | 10             || 3           | liulianjiangcsdn.COM      | 20             || 4           | liulianjiangcsdn.COM      | 20             || NULL        | NULL            | 22             |+-------------+-----------------+----------------+5 rows in set (0.01 sec)

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


在 PHP 脚本中使用 JOIN

PHP 中使用 mysqli_query() 函数来执行 SQL 语句,足下可以使用以上的相同的 SQL 语句作为 mysqli_query() 函数的参数。

尝试如下实例:

MySQL ORDER BY 测试: 输出结果如下图所示: <?php$dbhost = 'localhost';  // mysqlserver 主机地址$dbuser = 'root';            // mysql用户名$dbpass = '123456';          // mysql用户名password $conn = mysqli_connect($dbhost, $dbuser, $dbpass);if(! $conn ){die('连接失败: ' . mysqli_error($conn));}// 设置编码,防止中文乱码mysqli_query($conn , "set names utf8");$sql = 'SELECT a.liulianjiangcsdn_id, a.liulianjiangcsdn_author, b.liulianjiangcsdn_count FROM liulianjiangcsdn_tbl a INNER JOIN tcount_tbl b ON a.liulianjiangcsdn_author = b.liulianjiangcsdn_author';mysqli_select_db( $conn, 'liulianjiangcsdn' );$retval = mysqli_query( $conn, $sql );if(! $retval ){die('无法读取数据: ' . mysqli_error($conn));}echo '<h2>liulianjiangcsdn教程 MySQL JOIN 测试<h2>';echo '<table border="1"><tr><td>教程 ID</td><td>作者</td><td>登陆次数</td></tr>';while($row = mysqli_fetch_array($retval, MYSQLI_ASSOC)){echo "<tr><td> {$row['liulianjiangcsdn_id']}</td> "."<td>{$row['liulianjiangcsdn_author']} </td> "."<td>{$row['liulianjiangcsdn_count']} </td> "."</tr>";}echo '</table>';mysqli_close($conn);?>

本专栏所有文章

第1章 MySQL 教程 第2章 MySQL 安装教程
第3章 MySQL 管理教程 第4章 MySQL PHP 语法教程
第5章 MySQL 连接教程 第6章 MySQL 创建数据库教程
第7章 MySQL 删除数据库教程 第8章 MySQL 选择数据库教程
第9章 MySQL 数据类型教程 第10章 MySQL 创建数据表教程
第11章 MySQL 删除数据表教程 第12章 MySQL 插入数据教程
第13章 MySQL 查询数据教程 第14章 MySQL WHERE 子句教程
第15章 MySQL UPDATE 更新教程 第16章 MySQL DELETE 语句教程
第17章 MySQL LIKE 子句教程 第18章 MySQL UNION教程
第19章 MySQL 排序教程 第20章 MySQL 分组教程
第21章 MySQL 连接的使用教程 第22章 MySQL NULL 值处理教程
第23章 MySQL 正则表达式教程 第24章 MySQL 事务教程
第25章 MySQL ALTER命令教程 第26章 MySQL 索引教程
第27章 MySQL 临时表教程 第28章 MySQL 复制表教程
第29章 MySQL 元数据教程 第30章 MySQL 序列使用教程
第31章 MySQL 处理重复数据教程 第32章 MySQL 及 SQL 注入教程
第33章 MySQL 导出数据教程 第34章 MySQL 导入数据教程
第35章 MySQL 函数教程 第36章 MySQL 运算符教程

寄语

本文有榴莲酱CSDN原创,欢迎点赞、转载,博客地址:https://blog.csdn.net/qq441540598

  • 她平时总与某个人相爱,但她的热情从来得不到回报,所以一直保留着全部的幻想。
  • 在理想的最美好的世界中,一切都是为最美好的目的而设。
  • 为着一个美丽的希望,我们才如此受苦、流泪、滴血。
  • 我对于事业的抱负和梦想,是以“真”为开始,“善”为历程,“美”为最终目标
  • 有时,仅仅需要做的是,往前走一步,哪怕是很小的一步,烦恼疼苦便在你的身后了。

第21章 MySQL 连接的使用教程相关推荐

  1. 第31章 MySQL 处理重复数据教程

    有些 MySQL 数据表中可能存在重复的记录,有些情况咱们允许重复数据的存在,但有时候咱们也需要删除这些重复的数据. 本章节咱们将为大家介绍如何防止数据表出现重复数据及如何删除数据表中的重复数据. 防 ...

  2. 第5章 MySQL 连接教程

    使用mysql二进制方式连接 陛下可以使用MySQL二进制方式进入到mysql命令提示符下来连接MySQLdatabase. 实例 以下是从命令行中连接mysqlserver 的简单实例: [root ...

  3. mysql连接idea详细教程_idea配置连接数据库的超详细步骤

    学习时,使用IDEA的时候,需要连接Database,连接时遇到了一些小问题,下面记录一下操作流程以及遇到的问题的解决方法. 一. 连接操作 简介:介绍如何创建连接,具体连接某个数据库的操作流程. 1 ...

  4. 第10章 MySQL 创建数据表教程

    创建MySQL数据表需要以下信息: 表名 表字段名 定义每个表字段 语法 以下为创建MySQL数据表的SQL通用语法: CREATE TABLE table_name (column_name col ...

  5. 第31章 Python3 标准库概览教程

    操作系统接口 os模块提供了不少与操作系统相关联的函数. >>> import os>>> os.getcwd() # return 当前的工作目录'C:\\Pyt ...

  6. 第25章 Python3 输入和输出教程

    在前面几个章节中,咱们其实已经接触了 Python 的输入输出的功能.本章节咱们将具体介绍 Python 的输入输出. 输出格式美化 Python两种输出值的方式: 表达式语句和 print() 函数 ...

  7. 数据库连接10060_通过mysql 连接远程数据库时,输入密码后,提示10060错误

    能提示输入密码,说明网络能够连接,而且能连到服务器.输入密码后提示错误,说明应该是权限问题 解决方法: ​一.进入mysql数据库命令行 ​二.输入use mysql; ​三.设置root账号密码为1 ...

  8. 第18章 SQL 连接(JOIN)教程

    SQL 连接(JOIN) SQL join 用于把来自两个或多个表的行结合起来. 展示了 LEFT JOIN.RIGHT JOIN.INNER JOIN.OUTER JOIN 相关的 7 种用法. S ...

  9. Mysql学习总结(12)——21分钟Mysql入门教程

    21分钟 MySQL 入门教程 目录 一.MySQL的相关概念介绍 二.Windows下MySQL的配置 配置步骤 MySQL服务的启动.停止与卸载 三.MySQL脚本的基本组成 四.MySQL中的数 ...

最新文章

  1. 【转】Matlab axis用法
  2. 目录和文件管理(一)
  3. (兔子繁殖问题)有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到三个月后每个月又生一对兔子,假如兔子都不死,问32个月过后的兔子总数为多少?...
  4. tensorflow 模型可视化_基于tensorflow-2.x的yolov3实现
  5. Mysql索引介绍及常见索引的区别
  6. 流量卡物联网卡管理平台源码|PHP管理系统源码
  7. Ubuntu安装时怎样分区
  8. 2017年中国大功率UPS市场需求、市场需求及市场结构占比分析预测
  9. jsfor循环终止_详解如何在JS代码中消灭for循环
  10. SAP License:ERP实施风险是什么?
  11. 跨境电商shopify独立站如何引流量
  12. 「THUSC 2016」成绩单 方块消除 (区间dp)
  13. js中的extend
  14. Ubuntu下常用软件介绍
  15. (十一)可编辑表格EditorGridPanel
  16. 富士急乐园免税店将开业,打造游园购物访日体验
  17. 曲苑杂坛--服务启动时执行
  18. 公司招了个漂亮女程序员是种什么样的体验?
  19. html5图片并排显示图片,HTML5 - 并排显示项目
  20. android无感知拍照github,装X指南之通过 VirtualApp 实现免 Root 权限 Hook

热门文章

  1. 低代码:降低技术能力要求,提升软件开发效率
  2. 影响现代办公室隔断设计的因素有哪些,办公室隔断设计方案要求
  3. 第一篇:Ubuntu18.04 Nvidia RTX 2080ti 驱动安装
  4. 计算机专业的考研英语作文,2019考研英语小作文万能模板:建议信1_计算机专业考研...
  5. [4G+5G专题-145]: 规范-5G NR协议规范快速概览
  6. 含钆介孔二氧化硅海藻酸钠纳米微球/桑色素二氧化硅单发光纳米微球的制备过程
  7. 北京航空航天大学2006年硕士研究生考试参考书目——ChinaKaoyan_com
  8. Redis基本操作数据命令
  9. 《企业级私有网盘系统owncloud》
  10. Python游戏之Pygame——太空飞机大战(二)