MySQL 连接的使用

 MySQL 连接的使用

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

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

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

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

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

在命令提示符中使用 INNER JOIN

我们在XXXXXX数据库中有两张表 tcount_tbl 和 xxxxxx_tbl。两张数据表数据如下:

实例

尝试以下实例:

测试实例数据

mysql> use XXXXXX;
Database changed
mysql> SELECT * FROM tcount_tbl;
+---------------+--------------+
| xxxxxx_author | xxxxxx_count |
+---------------+--------------+
| XX教程  | 10           |
| XXXXXX.COM    | 20           |
| Google        | 22           |
+---------------+--------------+
3 rows in set (0.01 sec)mysql> SELECT * from xxxxxx_tbl;
+-----------+---------------+---------------+-----------------+
| xxxxxx_id | xxxxxx_title  | xxxxxx_author | submission_date |
+-----------+---------------+---------------+-----------------+
| 1         | 学习 PHP    | XX教程  | 2021-04-12      |
| 2         | 学习 MySQL  | XX教程  | 2021-04-12      |
| 3         | 学习 Java   | xxxxxx.COM    | 2019-05-01      |
| 4         | 学习 Python | xxxxxx.COM    | 2020-03-06      |
| 5         | 学习 C      | FK            | 2021-04-05      |
+-----------+---------------+---------------+-----------------+
5 rows in set (0.01 sec)

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

INNER JOIN

mysql> SELECT a.xxxxxx_id, a.xxxxxx_author, b.xxxxxx_count FROM xxxxxx_tbl a INNER JOIN tcount_tbl b ON a.xxxxxx_author = b.xxxxxx_author;
+-------------+-----------------+----------------+
| a.xxxxxx_id | a.xxxxxx_author | b.xxxxxx_count |
+-------------+-----------------+----------------+
| 1           | XX教程    | 10             |
| 2           | XX教程    | 10             |
| 3           | XXXXXX.COM      | 20             |
| 4           | XXXXXX.COM      | 20             |
+-------------+-----------------+----------------+
4 rows in set (0.00 sec)

以上 SQL 语句等价于:

WHERE 子句

mysql> SELECT a.xxxxxx_id, a.xxxxxx_author, b.xxxxxx_count FROM xxxxxx_tbl a, tcount_tbl b WHERE a.xxxxxx_author = b.xxxxxx_author;
+-------------+-----------------+----------------+
| a.xxxxxx_id | a.xxxxxx_author | b.xxxxxx_count |
+-------------+-----------------+----------------+
| 1           | XX教程    | 10             |
| 2           | XX教程    | 10             |
| 3           | XXXXXX.COM      | 20             |
| 4           | XXXXXX.COM      | 20             |
+-------------+-----------------+----------------+
4 rows in set (0.01 sec)


MySQL LEFT JOIN

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

实例

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

LEFT JOIN

mysql> SELECT a.xxxxxx_id, a.xxxxxx_author, b.xxxxxx_count FROM xxxxxx_tbl a LEFT JOIN tcount_tbl b ON a.xxxxxx_author = b.xxxxxx_author;
+-------------+-----------------+----------------+
| a.xxxxxx_id | a.xxxxxx_author | b.xxxxxx_count |
+-------------+-----------------+----------------+
| 1           | XX教程    | 10             |
| 2           | XX教程    | 10             |
| 3           | XXXXXX.COM      | 20             |
| 4           | XXXXXX.COM      | 20             |
| 5           | FK              | NULL           |
+-------------+-----------------+----------------+
5 rows in set (0.01 sec)

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


MySQL RIGHT JOIN

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

实例

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

RIGHT JOIN

mysql> SELECT a.xxxxxx_id, a.xxxxxx_author, b.xxxxxx_count FROM xxxxxx_tbl a RIGHT JOIN tcount_tbl b ON a.xxxxxx_author = b.xxxxxx_author;
+-------------+-----------------+----------------+
| a.xxxxxx_id | a.xxxxxx_author | b.xxxxxx_count |
+-------------+-----------------+----------------+
| 1           | XX教程    | 10             |
| 2           | XX教程    | 10             |
| 3           | XXXXXX.COM      | 20             |
| 4           | XXXXXX.COM      | 20             |
| NULL        | NULL            | 22             |
+-------------+-----------------+----------------+
5 rows in set (0.01 sec)

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


在 PHP 脚本中使用 JOIN

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

尝试如下实例:

MySQL ORDER BY 测试:

<?php
$dbhost = 'localhost';  // mysql服务器主机地址
$dbuser = 'root';            // mysql用户名
$dbpass = '123456';          // mysql用户名密码
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{die('连接失败: ' . mysqli_error($conn));
}
// 设置编码,防止中文乱码
mysqli_query($conn , "set names utf8");$sql = 'SELECT a.xxxxxx_id, a.xxxxxx_author, b.xxxxxx_count FROM xxxxxx_tbl a INNER JOIN tcount_tbl b ON a.xxxxxx_author = b.xxxxxx_author';mysqli_select_db( $conn, 'XXXXXX' );
$retval = mysqli_query( $conn, $sql );
if(! $retval )
{die('无法读取数据: ' . mysqli_error($conn));
}
echo '<h2>菜鸟教程 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['xxxxxx_id']}</td> "."<td>{$row['xxxxxx_author']} </td> "."<td>{$row['xxxxxx_count']} </td> "."</tr>";
}
echo '</table>';
mysqli_close($conn);
?>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/3733.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

webstorm配置vue开发环境

&#x1f333;&#x1f333;&#x1f333;前言&#xff1a;本文章针对于如何用IDE和webstorm运行一个别人的vue项目进行步骤记录。 &#x1f4d9;参考&#xff1a;(10条消息) idea配置vue开发环境_idea配置vue运行环境_drinkworld的博客-CSDN博客https://blog.csdn.net/drinkwo…

容器生态系统概念讲解

容器生态系统 这张图显示了 Docker、Kubernetes、CRI、OCI、containerd 和 runc 在这个生态系统中是如何结合的。 其工作流程简单来说是这样的&#xff1a; Docker&#xff0c;Kubernetes 等工具来运行一个容器时会调用容器运行时&#xff08;CRI&#xff09;比如 containerd…

探索Java集合框架的奥秘

文章目录 1. 引言2. Java 集合框架概览2.1 Collection接口2.1.1 List接口(1) ArrayList&#xff08;数组&#xff09;(2) Vector&#xff08;数组实现、线程同步&#xff09;(3) LinkedList&#xff08;链表&#xff09; 2.1.2 Set 接口(1) HashSet&#xff08;Hash 表&#xf…

选择高考志愿:聚焦计算机科学与技术,规避土木工程

选择高考志愿&#xff1a;聚焦计算机科学与技术&#xff0c;规避土木工程 高考季已至&#xff0c;各地高考成绩陆续公布&#xff0c;许多毕业生和家长开始面临疑惑&#xff1a;如何填报志愿、选专业还是选学校、什么专业好就业&#xff1f;张雪峰曾提到&#xff1a;“普通家庭…

nvm 和 nrm安装使用

前端工具推荐&#xff1a;nvm&#xff08;Node 版本管理工具&#xff09; 和 nrm&#xff08;管理npm源&#xff09;&#xff1a; 一、nvm 1.1 nvm 是什么 1.2 安装 nvm 1.3 使用 nvm 二、nrm 2.1 nrm 是什么 2.2 安装 nrm 2.3 使用 nrm 一、nvm 如果直接将 node 安装到…

常见面试题之线程中并发锁(一)

1. 讲一下synchronized关键字的底层原理&#xff1f; 1.1. 基本使用 如下抢票的代码&#xff0c;如果不加锁&#xff0c;就会出现超卖或者一张票卖给多个人 Synchronized【对象锁】采用互斥的方式让同一时刻至多只有一个线程能持有【对象锁】&#xff0c;其它线程再想获取这…

Midjourney教程古风人像类

古风图像的特点&#xff1a; 人物发型多为飘逸的长发&#xff0c;或是精致的盘发&#xff1b; 人物服装多为飘逸的长袍、长裙&#xff1b; 整体画风以水墨、水彩、工笔为c主&#xff0c;线条写意&#xff0c;色彩清新淡雅&#xff1b; 背景中多用花鸟、亭台楼阁、桃林等构建氛…

INDEMIND双目视觉惯性模组实时生成点云并保存点云图

双目惯性相机最开始是从VINS中了解到的&#xff0c;2018年VINS中推荐过Loitor视觉惯性相机&#xff0c;但是后来看到GitHub Issue中有人反映Loitor丢帧、无技术支持等问题&#xff0c;加之购入渠道非官方故未入手Loitor&#xff0c;浏览知乎时关注到Indemind的该款产品&#xf…

FreeRTOS—任务基础知识

文章目录 一、FreeRTOS任务特性二、FreeRTOS任务状态三、FreeRTOS任务优先级四、FreeRTOS任务实现五、任务控制块六、任务堆栈 一、FreeRTOS任务特性 简单没有使用限制&#xff08;任务数量没有显示&#xff0c;一个优先级下可以有多个任务&#xff09;支持抢占&#xff08;高…

C语言结构体字节对齐(内存对齐)之#pragma pack和__attribute__((packed)的使用

在不使用#pragma pack和__attribute__((packed) 等选项来自定义字节对齐大小的情况下&#xff0c;关于正常字节对齐的描述&#xff0c;可参考博文&#xff1a; C/C计算类/结构体和联合体&#xff08;union&#xff09;所占内存大小&#xff08;内存对齐问题&#xff09;_联合体…

通付盾发布WAAP白皮书,帮助企业应对数字化转型过程中日益高发的网络安全威胁

简介 企业数字化转型是数字经济发展的重要一环。面对企业数字化转型过程中的安全问题&#xff0c;WAAP白皮书将对攻击方式、攻击量、攻击来源、行业分布等维度对各类攻击进行详细解读&#xff0c;梳理传统Web应用防护能力的不足&#xff0c;分析日益增长的API防护&#xff0c;…

H5学习(三)-- CSS层叠样式表

文章目录 一、简介二、CSS的书写样式1. 行内样式&#xff08;内联样式&#xff09;2. 页内样式3. 外部样式 三、常见的选择器1. 标签选择器2. 类选择器3. id选择器4. 并列选择器5. 复合选择器6. 伪类选择器 一、简介 CSS&#xff08;cascading style sheet&#xff09;是层叠样…