【问题标题】:With what groupings am I supposed to think about joins? [closed]我应该考虑加入哪些分组? [关闭]
【发布时间】:2015-12-25 23:01:14
【问题描述】:

我在看例子

SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers
ON Orders.CustomerID=Customers.CustomerID;

来自 W3Schools,我想知道我应该如何在我的脑海中对条款进行分组。据我了解,每个 SQL 查询都返回一个表,查询中的子句本身可能返回一个表。所以我想到了整体

Orders INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID

作为一个表,我通过将SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate 应用于它来返回它的子表。这是思考问题的正确方式吗?

【问题讨论】:

  • 你说:as being a table and I'm returning a sub-table of it by applying SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate第一部分是正确的。但我不会说你要从中返回一个子表。你只是抓住你想要的列
  • 是的。可视化它的最佳方法是在数据库和select * from 两个表中一一创建表并查看数据。然后使用连接以及它如何改变你的输出。在所有这些列中,只需查看您需要的列。如果您的系统上没有安装任何数据库,请在网页上使用 Head first SQL 手或 sqlfiddle.com 。一旦您开始选择表并开始放置 where 条件和连接并直观地查看输出,那么您将有更好的理解。

标签: sql join database-design inner-join


【解决方案1】:

您可以将每个查询想象成一个带有您想要的结果的新临时表。这一个从OrdersCustomers 获取行,根据两个表中的CustomerID 字段(连接的on 子句)匹配它们,然后只返回来自Orders 的几个字段(@987654326 @ 和 OrderDate) 以及来自 Customers (CustomerName) 的一个字段。

【讨论】:

    【解决方案2】:

    基本上,您将返回一个包含 SELECT 语句中所有列的新表。如果您将查询简化为:

    SELECT OrderID, OrderDate
    FROM Orders
    

    您将获得整个 Orders 表的打印输出,但只有您指定的两列。

    通过您的 INNER JOIN,您将过滤掉结果以仅包含具有与具有相同 CustomerID 的客户表中的类似行匹配的 CustomerID 的订单。通过您的 SELECT 语句,您将添加一列,显示与这些订单匹配的客户名称。

    因此,INNER JOIN 的 ON 部分只是将客户与他们各自的订单进行匹配。 SELECT 部分是您使用您感兴趣的三列创建新输出表的地方。

    这有帮助吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 2021-12-19
      相关资源
      最近更新 更多