列标题之前写了哪些字母

时间:2019-05-10 13:37:34

标签: sql database

我正在使用在线资源来学习SQL语言,但是主要是使用前辈在公司编写的查询。我正在相应地编辑字段以产生正确的结果。但我想了解更多。

我对这段代码有一些疑问。 1.为什么在TrackingNumber之前有一个“ p”,而在其他人前面有oh / cc / im? 选择哪一个似乎很重要,因此我只需要反复尝试就可以运行。 2.为什么需要跟踪号-删除此行时,代码将无法运行!

select 

p.TrackingNumber
,im.Sku
,oh.BusinessUnitCode
,cc.Qty
,oh.ShipCode
,oh.OrigShipCode
,oh.Store
,convert(date,oh.ShipTime) as 'OrderDate'
,oh.ShipToName
,oh.OrderNumber


from dmhost.tblOrderHeader oh

join dmhost.tblContainer c on oh.OrderHeaderID = c.OrderHeaderID
join dmhost.tblPackage p on c.ContainerID = p.ContainerID
join dmhost.tblContainerContents cc on c.ContainerID = cc.ContainerID
join dmhost.tblItemMaster im on im.ItemMasterID = cc.ItemMasterID

where (oh.ShipTime between '04/07/2019' and '05/05/2019')

2 个答案:

答案 0 :(得分:0)

您谈论的字母是指表名(或别名)。

使用别名的示例为:

SELECT c.customerName, o.orderNumber from Customers c 
INNER JOIN Orders o on c.id=o.customerid

没有别名的相同查询:

SELECT Customers.customerName, Orders.orderNumber from Customers  
INNER JOIN Orders on Customers.id=Orders.customerid

或省略表名

SELECT customerName, orderNumber from Customers  
INNER JOIN Orders on Customers.id=Orders.customerid

从不同的表中检索具有相同名称的列时,表名称特别重要。例如,来自客户的ID和来自订单的ID

SELECT c.id as CustomerId, o.id as OrderId from Customers c 
INNER JOIN Orders o on c.id=o.customerid

答案 1 :(得分:0)

您的字段名称中的点(.)之前的位是table aliases。如果您查看此查询的FROM子句,则应该在其中列出的各个表的前面看到这些缩写。他们习惯了

a)减少键入表名和

的繁琐工作

b)清楚地说明了您从哪个表中选择列(这不仅增加了代码的可读性,而且还处理了其中两个表具有相同名称的列的情况)

这是表别名用法的简单示例:

SELECT emp.ID, emp.Name, dep.ID, dep.Name
FROM employees emp
INNER JOIN departments dep ON dep.ID = emp.DepartmentID

在这里您可以看到employee和department表每个都有别名以缩短其名称。在查询中,我们使用别名来引用每个字段。这特别有用,因为两个表都有名为“ ID”和“ Name”的字段。


关于删除p.TrackingNumber时崩溃的原因,可能是因为您还没有从下一行删除逗号(,)。逗号用于标记下一个字段名称的开始位置-它可以在上一行的末尾,而不是下一个字段的开始。显然,您不能使用逗号开头字段列表,因为在它之前没有字段名称-因此会出现语法错误。

本来可以写相同的查询

select 
  p.TrackingNumber,
  im.Sku,
  oh.BusinessUnitCode,
  -- etc

这可能使查看逗号的用法更加容易。