gpt4 book ai didi

sql - 在 MySQL 查询中,什么时候我应该更喜欢 JOIN 而不是 WHERE?

转载 作者:行者123 更新时间:2023-12-01 00:32:27 25 4
gpt4 key购买 nike

检查以下场景(来源: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 |
+------------+----------+--------------+

这是一个玩具示例,所以我想您选择哪种方式并不重要(除了实际没有购买任何东西的买家的差异,例如 Steven)。

但是当涉及到大表时,这两种查询在效率上有区别吗?从我做过的一些试验来看,我认为是有的。

我很乐意更好地理解这是否正确,这两种方案的实现之间的根本区别是什么,以及我应该在什么时候更喜欢它们。

最佳答案

除了是 ANSI 标准之外,明确提及连接通常应该更好(并且更易于阅读),但是对于现代优化器,我认为这两个版本的性能没有任何显着差异。

注意:您提到的两个查询不等价 - 如果您将左连接替换为内部连接,它们将变得等价,在这种情况下,性能没有明显差异。

内连接通常比左连接快。

关于sql - 在 MySQL 查询中,什么时候我应该更喜欢 JOIN 而不是 WHERE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4137614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com