- 学习MySQL
- MySQL-主页
- MySQL - 简介
- MySQL-安装
- MySQL - 管理
- MySQL-PHP 语法
- MySQL-连接
- MySQL-创建数据库
- MySQL - 删除数据库
- MySQL - 选择数据库
- MySQL - 数据类型
- MySQL - 创建表
- MySQL - 删除表
- MySQL - 插入查询
- MySQL - 选择查询
- MySQL-Where 子句
- MySQL - 更新查询
- MySQL - 删除查询
- MySQL - Like 子句
- MySQL - 对结果进行排序
- MySQL - 使用连接
- MySQL - NULL 值
- MySQL - 正则表达式
- MySQL - 事务
- MySQL - 更改命令
- MySQL - 索引
- MySQL - 临时表
- MySQL - 克隆表
- MySQL - 数据库信息
- MySQL - 使用序列
- MySQL - 处理重复项
- MySQL - SQL 注入
- MySQL - 数据库导出
- MySQL - 数据库导入
- MySQL 有用资源
- MySQL - 有用的函数
- MySQL - 语句参考
- MySQL - 快速指南
- MySQL - 有用的资源
- MySQL - 讨论
MySQL - 使用连接
在前面的章节中,我们一次从一个表中获取数据。这对于简单的任务来说已经足够了,但在大多数现实世界的 MySQL 使用中,您经常需要在单个查询中从多个表中获取数据。
您可以在单个 SQL 查询中使用多个表。MySQL中的连接Behave是指将两个或多个表粉碎成一个表。
您可以在 SELECT、UPDATE 和 DELETE 语句中使用 JOINS 来连接 MySQL 表。我们还将看到 LEFT JOIN 的示例,它与简单的 MySQL JOIN 不同。
在命令提示符处使用联接
假设我们在 TUTORIALS 中有两个表tcount_tbl和tutorials_tbl。现在看一下下面给出的示例 -
例子
以下示例 -
root@host# mysql -u root -p password; Enter password:******* mysql> use TUTORIALS; Database changed mysql> SELECT * FROM tcount_tbl; +-----------------+----------------+ | tutorial_author | tutorial_count | +-----------------+----------------+ | mahran | 20 | | mahnaz | NULL | | Jen | NULL | | Gill | 20 | | John Poul | 1 | | Sanjay | 1 | +-----------------+----------------+ 6 rows in set (0.01 sec) mysql> SELECT * from tutorials_tbl; +-------------+----------------+-----------------+-----------------+ | tutorial_id | tutorial_title | tutorial_author | submission_date | +-------------+----------------+-----------------+-----------------+ | 1 | Learn PHP | John Poul | 2007-05-24 | | 2 | Learn MySQL | Abdul S | 2007-05-24 | | 3 | JAVA Tutorial | Sanjay | 2007-05-06 | +-------------+----------------+-----------------+-----------------+ 3 rows in set (0.00 sec) mysql>
现在我们可以编写一个 SQL 查询来连接这两个表。此查询将从表tutorials_tbl中选择所有作者,并从tcount_tbl中选取相应数量的教程。
mysql> SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count -> FROM tutorials_tbl a, tcount_tbl b -> WHERE a.tutorial_author = b.tutorial_author; +-------------+-----------------+----------------+ | tutorial_id | tutorial_author | tutorial_count | +-------------+-----------------+----------------+ | 1 | John Poul | 1 | | 3 | Sanjay | 1 | +-------------+-----------------+----------------+ 2 rows in set (0.01 sec) mysql>
在 PHP 脚本中使用联接
PHP 使用mysqli query()或mysql_query()函数通过连接从 MySQL 表中获取记录。该函数采用两个参数,成功时返回 TRUE,失败时返回 FALSE。
句法
$mysqli->query($sql,$resultmode)
先生。 | 参数及说明 |
---|---|
1 |
$sql 必需 - 使用 Join 从多个表中获取记录的 SQL 查询。 |
2 |
$结果模式 可选 - 常量 MYSQLI_USE_RESULT 或 MYSQLI_STORE_RESULT,具体取决于所需的Behave。默认情况下,使用 MYSQLI_STORE_RESULT。 |
首先使用以下脚本在 MySQL 中创建一个表并插入两条记录。
create table tcount_tbl( tutorial_author VARCHAR(40) NOT NULL, tutorial_count int ); insert into tcount_tbl values('Mahesh', 3); insert into tcount_tbl values('Suresh', 1);
例子
尝试以下示例以使用 Join 从两个表中获取记录。-
将以下示例复制并粘贴为 mysql_example.php -
<html> <head> <title>Using joins on MySQL Tables</title> </head> <body> <?php $dbhost = 'localhost'; $dbuser = 'root'; $dbpass = 'root@123'; $dbname = 'TUTORIALS'; $mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname); if($mysqli->connect_errno ) { printf("Connect failed: %s<br />", $mysqli->connect_error); exit(); } printf('Connected successfully.<br />'); $sql = 'SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count FROM tutorials_tbl a, tcount_tbl b WHERE a.tutorial_author = b.tutorial_author'; $result = $mysqli->query($sql); if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) { printf("Id: %s, Author: %s, Count: %d <br />", $row["tutorial_id"], $row["tutorial_author"], $row["tutorial_count"]); } } else { printf('No record found.<br />'); } mysqli_free_result($result); $mysqli->close(); ?> </body> </html>
输出
访问部署在 apache Web 服务器上的 mysql_example.php 并验证输出。
Connected successfully. Id: 1, Author: Mahesh, Count: 3 Id: 2, Author: Mahesh, Count: 3 Id: 3, Author: Mahesh, Count: 3 Id: 5, Author: Suresh, Count: 1
MySQL 左连接
MySQL 左连接不同于简单连接。MySQL LEFT JOIN 对左侧的表给予了一些额外的考虑。
如果我执行LEFT JOIN,我会得到以相同方式匹配的所有记录,此外,我会为连接左表中的每个不匹配记录获得一条额外记录:从而确保(在我的示例中)每个作者都得到一个提到。
例子
尝试以下示例来理解 LEFT JOIN。
root@host# mysql -u root -p password; Enter password:******* mysql> use TUTORIALS; Database changed mysql> SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count -> FROM tutorials_tbl a LEFT JOIN tcount_tbl b -> ON a.tutorial_author = b.tutorial_author; +-------------+-----------------+----------------+ | tutorial_id | tutorial_author | tutorial_count | +-------------+-----------------+----------------+ | 1 | John Poul | 1 | | 2 | Abdul S | NULL | | 3 | Sanjay | 1 | +-------------+-----------------+----------------+ 3 rows in set (0.02 sec)
您需要进行更多练习才能熟悉 JOINS。这是 MySQL/SQL 中有点复杂的概念,在实际示例中会变得更加清晰。