MySQL 查询语句中包含 join、on 和 where 三个关键词,它们的执行顺序如下:
- 笛卡尔积:从每个表中获取所有的行,将它们合并成一个虚拟表(即笛卡尔积)。
- on条件筛选:使用 on 关键词对笛卡尔积进行筛选,只输出符合 on 条件的行。
- where条件筛选:使用 where 关键词对筛选后的结果进行筛选,只输出符合 where 条件的行。
从上面的过程可以看出,where 关键词在这个过程中的作用是在 on 筛选后的结果中进行的。
下面是两个示例:
示例一:
SELECT *
FROM table1
JOIN table2
ON table1.id = table2.id
WHERE table1.name = 'John'
这个查询语句的执行顺序是:
1. 获取 table1 和 table2 中所有的行,将它们合并成笛卡尔积。
2. 对笛卡尔积进行 on 条件筛选,只输出 table1.id = table2.id 的行。
3. 对 on 筛选后的结果进行 where 条件筛选,只输出 table1.name = 'John' 的行。
示例二:
SELECT *
FROM table1
LEFT JOIN table2
ON table1.id = table2.id
WHERE table2.id IS NULL
这个查询语句的执行顺序是:
1. 获取 table1 和 table2 中所有的行,将它们合并成笛卡尔积。
2. 对笛卡尔积进行 on 条件筛选,只输出 table1.id = table2.id 的行,如果 table2 中没有符合条件的行,则输出 table1 中所有的行。
3. 对 on 筛选后的结果进行 where 条件筛选,只输出 table2.id IS NULL 的行,即输出 table1 中没有与 table2 匹配的行。
综上所述,join、on 以及 where 关键词的执行顺序是先进行笛卡尔积,然后进行 on 条件筛选,最后进行 where 条件筛选。若未特别指定,join 的默认类型为 inner join。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:mysql查询语句join、on、where的执行顺序 - Python技术站