返回

MySQL 学习 - 02 表连接的执行流程

后端

<br>



<br>



<br>



<br>

**前言** 

对于连接操作,驱动表和被驱动表的关联条件我们放在 ON 后面,如果额外增加对驱动表和被驱动表的过滤条件,放到 ONWHERE 后面都不会报错,但是得到的结果集却是不一样的?

**1.1 MySQL 的连接类型** 

MySQL 支持多种连接类型,包括:

* **INNER JOIN:**  返回两个表中具有匹配行的记录。
* **LEFT JOIN:**  返回左表中的所有记录,以及与右表中具有匹配行的记录。
* **RIGHT JOIN:**  返回右表中的所有记录,以及与左表中具有匹配行的记录。
* **FULL JOIN:**  返回两个表中的所有记录,无论它们是否具有匹配行。

**1.2 连接的执行流程** 

当 MySQL 执行连接操作时,它会按照以下步骤进行:

1. 首先,MySQL 会检查驱动表和被驱动表的关联条件。
2. 然后,MySQL 会过滤驱动表,只保留满足关联条件的记录。
3. 接着,MySQL 会过滤被驱动表,只保留满足关联条件的记录。
4. 最后,MySQL 会将过滤后的驱动表和被驱动表连接起来,并返回结果集。

**1.3 ONWHERE 子句的区别** 

ON 子句用于指定驱动表和被驱动表的关联条件,而 WHERE 子句用于过滤连接后的结果集。

例如,以下查询使用 ON 子句来指定驱动表和被驱动表的关联条件:

```sql
SELECT *
FROM t1
INNER JOIN t2
ON t1.id = t2.id;

这段查询将返回 t1 和 t2 表中具有匹配 ID 的记录。

而以下查询使用 WHERE 子句来过滤连接后的结果集:

SELECT *
FROM t1
INNER JOIN t2
ON t1.id = t2.id
WHERE t1.name = 'John';

这段查询将返回 t1 和 t2 表中具有匹配 ID 并且 t1.name 字段等于 'John' 的记录。

结论

通过本文,我们了解了 MySQL 表连接的执行流程,以及 ON 和 WHERE 子句的区别。希望这些知识能够帮助您更好地理解和使用 MySQL 表连接。

拓展阅读