繁体   English   中英

SQL 左连接和右连接 — 哪个表是左还是右?

[英]SQL LEFT JOIN & RIGHT JOIN — WHICH TABLE IS LEFT OR RIGHT?

我在 sql 中搜索左连接和右连接。 并且解释说左连接开始从左表中选择数据。 它将 x 列中的值与右表中 y 列中的值进行比较。 下面有 2 个查询使用左/右连接。

这个产品是哪家公司生产的? (查询1)

如果我们想用左连接回答这个查询。那么左表是产品,右表是公司。

这家公司生产什么产品? (查询 2)

如果我们想用右连接来回答这个查询。那么左表是公司,右表是产品。

我对上述查询进行了解释。我不确定它是否属实。 有一个“产品”表,该表包括“Pname”、“Product_no”、“Cname”、“Company_no”列。

Query 1
SELECT P."Pname" AS "Product_name",
       C."Cname" AS "Company_name"
FROM "Products" AS P 
LEFT JOIN "Products" AS C
ON P."Company_no" = C."Product_no"

Query 2
SELECT C."Cname" AS "Company_name",
       P."Pname" AS "Product_name"         
FROM "Products" AS P 
RIGHT JOIN "Products" AS C
ON P."Company_no" = C."Product_no"

我的问题是:

  1. 我们如何确定两张表中的哪一张是左表或右表?

  2. 在同一张表上进行左连接/右连接时,我们如何确定哪个是左表或右表? (自我加入——在查询 1 和查询 2 中)

  3. 左连接和右连接之间的确切区别是什么?

谢谢...

“左”和“右”在这里基本上意味着“第一个”和“第二个”:想象一下在一行中编写您的 SQL 查询,您提到的第一个表将在左侧,下一个在其右侧。 左连接表示左边的表是强制性的,右边的表是可选的,右连接表示相反。

顺序实际上对最终结果没有影响:任何可以用右连接编写的查询都可以用左连接来编写,而不是通过以不同的顺序提及表(可能有例外,但我我从来没有遇到过)。

在实践中,您几乎总是使用左连接,因为如果您先放置必填表,然后放置可选表,通常更容易遵循。

最后,您的示例没有多大意义: P."Company_no" = C."Product_no"将匹配彼此不相关的事物。 如果您有“父子”关系,例如“OwnedByCompanyNo”,则您将表连接到自身的主要时间。 然后,您可能有一个左连接,其中左(强制)表是特定城镇中的所有公司,而右(可选)表是拥有它们的公司,如果有的话。 同样,将其翻转为右连接只是以其他顺序提及表的情况。

  1. 您定义“加入”的表是您的正确表。

左加入“产品”为 C ON P."Company_no" = C."Product_no"

重要的东西是:“C ON P”左边是C,右边是P

  1. 区别是..让我们看看这些比较:

Left Join: C ON P (C Joins on P) 与 Right Join: P ON C (C Joins on P) 相同

不同之处在于 JOIN 的方向。

也许这对你有帮助: https://www.dofactory.com/img/sql/sql-joins.png

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM