返回
MySQL 学习 - 02 表连接的执行流程
后端
2023-11-26 13:15:11
<br>
<br>
<br>
<br>
**前言**
对于连接操作,驱动表和被驱动表的关联条件我们放在 ON 后面,如果额外增加对驱动表和被驱动表的过滤条件,放到 ON 或 WHERE 后面都不会报错,但是得到的结果集却是不一样的?
**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 ON 和 WHERE 子句的区别**
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 表连接。
拓展阅读