树叶云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

相关推荐

  • 高防服务器的防御原理是什么,如何选择高防服务器?

    高防服务器的防御原理,简单说就是通过流量清洗、防火墙规则和黑洞路由等机制,在攻击流量到达业务服务器之前将其过滤或阻断,从而保障正常访问,流量清洗机制是核心防线高防服务器对抗DDoS攻击,靠的不是单一技术,而是一套组合动作,最常见的攻击类型是流量型攻击,比如UDP洪水、SYN洪水、ICMP放大等,核心思路是耗尽带……

    2026-07-26
    0
  • BGP线路到底是什么意思呢,有什么优势?

    BGP线路是一种通过边界网关协议实现多运营商网络互联的接入方式,能自动选择最优路径,极大提升跨网访问速度和稳定性,是解决国内南北网络瓶颈的核心方案,什么是BGP线路BGP,全称Border Gateway Protocol,边界网关协议,是互联网核心路由协议之一,它负责在自治系统之间交换网络可达性信息,BGP线……

    2026-07-26
    0
  • 增值电信业务经营许可证对IDC有多重要,如何办理?

    增值电信业务经营许可证是IDC服务商合法运营的核心凭证,它直接决定了机房能否接入骨干网、客户能否放心托管业务,以及服务商自身能否长期稳定发展,许可证是IDC进入市场的硬门槛互联网数据中心业务属于增值电信业务中的B1类,依据工信部《电信业务经营许可管理办法》,任何从事服务器托管、虚拟主机、云服务等业务的企业,必须……

    2026-07-26
    0
  • 站群服务器一个IP放几个网站合适?,怎么选

    站群服务器一个IP放3-5个网站是大多数情况下的最佳平衡点,但具体数量需根据网站权重、内容质量及IP资源成本灵活调整,这个结论基于搜索引擎对同IP站点的关联判定逻辑,以及站群运营的长期实践,如果你刚接触站群,可能会纠结于IP分配,但核心原则是:不要让搜索引擎轻易识别出这些网站属于同一实体,站群IP分配的底层逻辑……

    2026-07-26
    0
  • DDoS攻击和CC攻击有什么区别,怎么防御?

    DDoS攻击和CC攻击最核心的区别在于攻击目标不同:DDoS攻击主要消耗网络带宽和基础设施资源,而CC攻击专门针对应用层逻辑,耗尽服务器CPU和数据库连接数,两者从原理到防御手段完全不同,攻防视角下的本质差异攻击目标:一个砸门,一个撬锁DDoS攻击(分布式拒绝服务)瞄准的是网络层和传输层,通过大量伪造数据包或畸……

    2026-07-26
    0

发表回复

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