将SQL查询转换为绝对的初学者(我)

时间:2014-01-03 23:07:19

标签: sql join

我正在尝试从w3schools教程中了解JOIN命令,并且有一个示例。 你可以把它“翻译”给我,它到底是做什么的吗?我已经知道这些点是做什么的,但INNER JOIN,ON等等搞砸了我?

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

它是否在我的SQL数据库中创建了一个新表,或者它只是创建(让我们称之为...)“虚拟”表,我可以在当下使用它

4 个答案:

答案 0 :(得分:1)

此处的点符号表示表格的列。

Table.Column

因此SELECT正在检索每个表中指定的列。 JOIN根据ON之后显示的条件匹配表格 此查询根据具有相同CustomerID的条件将客户连接到订单。

有关联接的详情,请查看http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html

答案 1 :(得分:0)

也许首先要理解的是“点符号”。当您看到类似Orders.CustomerID的值时,SQL将读取它以表示Orders表中的CustomerID列。

INNER JOIN正在寻找您使用ON子句指定的记录的完全匹配...

因此,在此示例中,SQL将首先查找Orders表中的所有记录,这些记录的CustomerID与Customers表中的CustomerID相匹配。

然后,它将查看SELECT子句并向您显示OrderID(来自Orders表),CustomerName(来自Customers表)和Orders表中的OrderDate。

如果您正在使用SQL Server Management Studio(SSMS)或其他类似工具,它应该显示您的结果 - 有点像虚拟表......但它实际上并不创建表。

希望有所帮助,

罗素

答案 2 :(得分:0)

有内部和外部联接。我认为这篇文章很好地总结了这些差异。

What is the difference between "INNER JOIN" and "OUTER JOIN"?

就概念本身而言,您通过根据每个表中的共享值查找它们之间的共同点来“加入”表。如果您曾经使用Microsoft Excel进行过vlookup,那么您就熟悉这个概念了。在您发布的查询中,您正在从订单和客户表中选择值。您可以通过前缀Orders告诉您正在从哪个表中选择值。或客户。然后,您可以通过点后面的值(即OrderID,CustomerName,OrderDate。

)来确定哪一列

查询知道拉取联合字段的方式是CustomerID字段是否匹配。

一步一步

您正在选择

SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate

从表格订单

FROM Orders

您希望从客户中提取相应的值。每种方法都有很多连接方法和逻辑,但您已选择上面链接中解释的INNER JOIN。

INNER JOIN Customers

加入的标准是CustomerID

ON Orders.CustomerID=Customers.CustomerID;

使用近似的Excel Vlookup类比

Lookup_value是CustomerID

Table数组是ORDERS

范围查找是您正在执行的联接类型

答案 3 :(得分:0)

SELECT语句返回数据,它不会创建任何表甚至不是虚拟表(如果在执行SELECT语句后看到任何表,那只是返回数据的表示方式) 。当SELECT是DML(数据操作语言)[reference]之一时,使用DDL(数据定义语言)语句创建和修改表。

Join声明非常清楚地解释了here,从基本用途到更高级的插图。