树叶云MYSQL教程MySQL 连接的使用

MySQL 连接的使用

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

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

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

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

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

本章节使用的数据库结构及数据下载:runoob-mysql-join-test.sql。


在命令提示符中使用 INNER JOIN

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

实例

尝试以下实例:

测试实例数据

mysql
>
use

RUNOOB
;
Database

changed

mysql
>
SELECT
*
FROM

tcount_tbl
; +—————+————–+ |
runoob_author
|
runoob_count
| +—————+————–+ | 菜鸟教程 |
10
| |
RUNOOB
.
COM
|
20
| |
Google
|
22
| +—————+————–+
3

rows

in

set

(
0.01

sec
)

mysql
>
SELECT
*
from

runoob_tbl
; +———–+—————+—————+—————–+ |
runoob_id
|
runoob_title
|
runoob_author
|
submission_date
| +———–+—————+—————+—————–+ |
1
| 学习
PHP
| 菜鸟教程 |
2017

04

12
| |
2
| 学习
MySQL
| 菜鸟教程 |
2017

04

12
| |
3
| 学习
Java
|
RUNOOB
.
COM
|
2015

05

01
| |
4
| 学习
Python
|
RUNOOB
.
COM
|
2016

03

06
| |
5
| 学习
C
|
FK
|
2017

04

05
| +———–+—————+—————+—————–+
5

rows

in

set

(
0.01

sec
)

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

INNER JOIN

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
; +————-+—————–+—————-+ |
a
.
runoob_id
|
a
.
runoob_author
|
b
.
runoob_count
| +————-+—————–+—————-+ |
1
| 菜鸟教程 |
10
| |
2
| 菜鸟教程 |
10
| |
3
|
RUNOOB
.
COM
|
20
| |
4
|
RUNOOB
.
COM
|
20
| +————-+—————–+—————-+
4

rows

in

set

(
0.00

sec
)

以上 SQL 语句等价于:

WHERE 子句

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
; +————-+—————–+—————-+ |
a
.
runoob_id
|
a
.
runoob_author
|
b
.
runoob_count
| +————-+—————–+—————-+ |
1
| 菜鸟教程 |
10
| |
2
| 菜鸟教程 |
10
| |
3
|
RUNOOB
.
COM
|
20
| |
4
|
RUNOOB
.
COM
|
20
| +————-+—————–+—————-+
4

rows

in

set

(
0.01

sec
)


MySQL LEFT JOIN

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

实例

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

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
; +————-+—————–+—————-+ |
a
.
runoob_id
|
a
.
runoob_author
|
b
.
runoob_count
| +————-+—————–+—————-+ |
1
| 菜鸟教程 |
10
| |
2
| 菜鸟教程 |
10
| |
3
|
RUNOOB
.
COM
|
20
| |
4
|
RUNOOB
.
COM
|
20
| |
5
|
FK
|
NULL
| +————-+—————–+—————-+
5

rows

in

set

(
0.01

sec
)

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


MySQL RIGHT JOIN

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

实例

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

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
; +————-+—————–+—————-+ |
a
.
runoob_id
|
a
.
runoob_author
|
b
.
runoob_count
| +————-+—————–+—————-+ |
1
| 菜鸟教程 |
10
| |
2
| 菜鸟教程 |
10
| |
3
|
RUNOOB
.
COM
|
20
| |
4
|
RUNOOB
.
COM
|
20
| |
NULL
|
NULL
|
22
| +————-+—————–+—————-+
5

rows

in

set

(
0.01

sec
)

以上实例中使用了 RIGHT JOIN,该语句会读取右边的数据表 tcount_tbl 的所有选取的字段数据,即使在左侧表 runoob_tbl 中没有对应的runoob_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.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a INNER JOIN tcount_tbl b ON a.runoob_author = b.runoob_author

;
mysqli_select_db
(

$conn
,

RUNOOB


)
;
$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[‘runoob_id’]}
</td>

.

<td>
{$row[‘runoob_author’]}
</td>

.

<td>
{$row[‘runoob_count’]}
</td>

.

</tr>

;
}

echo


</table>

;
mysqli_close
(
$conn
)
;
?>

输出结果如下图所示:

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/238347.html<

(0)
运维的头像运维
上一篇2025-04-22 21:51
下一篇 2025-04-22 21:52

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注