MySQL中三种关联查询方式的简单比较

2019-01-05 09:49:28刘景俊

而使用 ON 时,字段就会出现两次:
 

SELECT * FROM film JOIN film_actor ON film.film_id = film_actor.film_id WHERE actor_id = 17 AND film.length > 120 LIMIT 1G *************************** 1. row *************************** film_id: 96 title: BREAKING HOME description: A Beautiful Display of a Secret Agent And a Monkey who must Battle a Sumo Wrestler in An Abandoned Mine Shaft release_year: 2006 language_id: 1 original_language_id: NULL rental_duration: 4 rental_rate: 2.99 length: 169 replacement_cost: 21.99 rating: PG-13 special_features: Trailers,Commentaries last_update: 2006-02-15 05:03:42 actor_id: 17 film_id: 96 last_update: 2006-02-15 05:05:03

幕后

MySQL 对两者的处理方式是相同的,使用 EXPLAIN EXTENDED 我们可以看到:
 

EXPLAIN EXTENDED SELECT film.title, film_id FROM film JOIN film_actor USING (film_id) WHERE actor_id = 17 AND film.length > 120G *************************** 1. row *************************** ... 2 rows in set, 1 warning (0.00 sec) root@mysql-5.1.51> SHOW WARNINGSG *************************** 1. row *************************** Level: Note Code: 1003 Message: select `sakila`.`film`.`title` AS `title`,`sakila`.`film`.`film_id` AS `film_id` from `sakila`.`film` join `sakila`.`film_actor` where ( (`sakila`.`film`.`film_id` = `sakila`.`film_actor`.`film_id`) and (`sakila`.`film_actor`.`actor_id` = 17) and (`sakila`.`film`.`length` > 120) )

最终所有的查询都被转成了 Theta 风格。

译者:就是说这三种方式除了写法不同外,没什么区别。

您可能感兴趣的文章:

mysql中的跨库关联查询方法浅谈mysql中多表不关联查询的实现方法MySQL中表子查询与关联子查询的基础学习教程实例讲解Java的MyBatis框架对MySQL中数据的关联查询MyBatis实践之动态SQL及关联查询mysql关联子查询的一种优化方法分析Yii2实现跨mysql数据库关联查询排序功能代码mysql一对多关联查询分页错误问题的解决方法如何利用分析函数改写范围判断自关联查询详解