【发布时间】:2010-11-09 19:28:23
【问题描述】:
检查以下场景(来源:http://phpweby.com/tutorials/mysql/32):
mysql> SELECT * FROM products;
+----+--------------+--------------+
| id | product_name | manufacturer |
+----+--------------+--------------+
| 1 | Shoes | Company1 |
| 2 | Laptop | Company2 |
| 3 | Monitor | Company3 |
| 4 | DVD | Company4 |
+----+--------------+--------------+
mysql> SELECT * FROM buyers;
+----+------+------------+----------+
| id | pid | buyer_name | quantity |
+----+------+------------+----------+
| 1 | 1 | Steve | 2 |
| 2 | 2 | John | 1 |
| 3 | 3 | Larry | 1 |
| 4 | 3 | Michael | 5 |
| 5 | NULL | Steven | NULL |
+----+------+------------+----------+
假设我想创建一个表格,其中每个买家都按照他购买的产品列出。我可以使用两种不同的方式获得非常相似的结果——一种使用JOIN,另一种使用WHERE。
mysql> SELECT buyer_name, quantity, product_name
FROM buyers LEFT JOIN products
ON buyers.pid=products.id;
+------------+----------+--------------+
| buyer_name | quantity | product_name |
+------------+----------+--------------+
| Steve | 2 | Shoes |
| John | 1 | Laptop |
| Larry | 1 | Monitor |
| Michael | 5 | Monitor |
| Steven | NULL | NULL |
+------------+----------+--------------+
mysql> SELECT buyers.buyer_name, buyers.quantity, products.product_name
FROM buyers,products
WHERE buyers.pid=products.id;
+------------+----------+--------------+
| buyer_name | quantity | product_name |
+------------+----------+--------------+
| Steve | 2 | Shoes |
| John | 1 | Laptop |
| Larry | 1 | Monitor |
| Michael | 5 | Monitor |
+------------+----------+--------------+
这是一个玩具示例,所以我想您选择哪种方式并不重要(除了实际上没有购买任何东西的买家的区别,例如史蒂文)。
但是当涉及到大表时,这两种查询的效率有区别吗?从我做的一些试验来看,我认为有。
我很乐意更好地了解这是否正确,两种方案的实施之间的根本区别是什么,以及我应该在什么时候更喜欢它们。
【问题讨论】:
-
您的“where”查询的“join”等效项是“SELECT Buyer_name, quantity, product_name FROM Buyers INNER JOIN products ON Buyer.pid=products.id;”
-
确实是重复的。对不起。请关闭。