gpt4 book ai didi

SQL - 何时以及如何使用 JOIN 进行过滤

转载 作者:行者123 更新时间:2023-11-29 12:02:12 35 4
gpt4 key购买 nike

假设我有两个表.. 一个是客户,另一个是订单。 Orders 有一个连接到 customers 表的外键。我应该如何从两个表返回数据:

  1. 过滤订单表中的字段,

  2. 过滤客户表中的字段?

使用 WHERE 在我的 SELECT 语句中的 JOIN 之后进行过滤是正确的方法,还是在 JOIN 中放入 AND陈述?我是否必须对上述情况之一使用一种方法,而对另一种情况使用另一种方法?

例如,

SELECT customers.customer_type, orders.grant_date

FROM orders

JOIN customers ON customers.customer_id = orders.customer_id

WHERE orders.order_id = 3;

SELECT customers.customer_type, orders.grant_date

FROM orders

JOIN customers ON customers.customer_id = orders.customer_id

AND orders.order_id = 3;

我想我可以将我的问题总结为:

一个。我应该将哪个表与我的 FROM 语句配对?它应该是具有外键的那个,即订单吗?还是视情况而定?

我应该如何过滤数据?使用 WHEREANDJOIN?一个与另一个有何不同,即在我的两种情况下,我什么时候应该使用一个而不是另一个?

最佳答案

做不做不重要

FROM orders
JOIN customers ON customers.customer_id = orders.customer_id

FROM customers 
JOIN orders ON customers.customer_id = orders.customer_id

第一张 table 由您决定。在这里,我会将 orders 作为第一个表,因为您在结果中显示的是订单及其客户信息。

对于内部联接,无论您是将标准放在 WHERE 子句中还是 ON 子句中,都没有区别。

但是,以订单为条件加入客户看起来很奇怪:

JOIN customers ON customers.customer_id = orders.customer_id AND orders.order_id = 3

这不是 ON 子句的工作方式。所以要么:

FROM orders
JOIN customers ON customers.customer_id = orders.customer_id
WHERE orders.order_id = 3

FROM customers
JOIN orders ON customers.customer_id = orders.customer_id
WHERE orders.order_id = 3

FROM customers
JOIN orders ON customers.customer_id = orders.customer_id AND orders.order_id = 3

与倒数第二个查询相比,许多人更喜欢最后一个查询,因为您可以轻松地将内部联接转换为外部联接。所以一般的建议是:将条件放在 WHERE 中的第一个表中,并将条件放在 ON 中的其他表中。将此作为经验法则。

关于SQL - 何时以及如何使用 JOIN 进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51957438/

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