SELECT查询中常量的含义是什么?

时间:2011-07-26 00:32:38

标签: sql tsql

考虑以下2个查询:

1)

USE AdventureWorks
GO
SELECT a.ProductID, a.ListPrice
FROM Production.Product a
WHERE EXISTS (SELECT 1 FROM Sales.SalesOrderDetail b
          WHERE b.ProductID = a.ProductID)

2)

USE AdventureWorks
GO
SELECT a.ProductID, a.Name, b.SalesOrderID
FROM Production.Product a LEFT OUTER JOIN Sales.SalesOrderDetail b
ON a.ProductID = b.ProductID
ORDER BY 1

我唯一的问题是知道这些查询中数字 1 的含义是什么?如果我将它们改为2或其他什么怎么样?

感谢您的帮助

3 个答案:

答案 0 :(得分:7)

在第一种情况下无所谓;你可以选择2或任何东西,因为它是一个存在查询。通常,选择一个常量可以用于存在查询之外的其他事物(它只是将常量放入结果集中的一列),但是存在查询是您最有可能遇到常量的地方。

例如,如果一个名为person的表包含三列,idfirstnamelastnamebirthdate,那么可以< / em>写一个这样的查询:

select firstname, 'YAY'
from person
where month(birthdate) = 6;

这将返回类似

的内容
name     'YAY'
---------------
Ani       YAY
Sipho     YAY
Hiro      YAY

它没用,但有可能。我们的想法是在select语句中选择表达式,它不仅可以是列名,还可以是常量和函数调用。更可能的情况是:

select lastname||','||firstname, year(birthday)
from person;

此处||是字符串连接运算符,year是我编写的函数。

您有时会在查询中看到1的原因是这样的。假设你只想知道是否有一个名字以'H'开头的人,但你不在乎这个人是谁。你可以说

select id
from person
where lastname like 'H%';

但由于我们不需要id,你也可以说

select 1
from person
where lastname like 'H%';

因为你关心的是你是否得到非空结果集。

在第二种情况下,1是列号;这意味着您希望您的结果按第一列中的值排序。将其更改为2将按第二列排序。

顺便说一下,选择常量的另一个地方是从关系数据库转储到高度非规范化的CSV文件,你将在类似NOSQL的系统中进行处理。

答案 1 :(得分:1)

在第二种情况下,1根本不是文字。相反,它是一个序数,表示结果集应按其第一列排序。如果您将1更改为4,则查询将失败并显示错误,因为结果集只有三列。

答案 2 :(得分:0)

BTW,你使用常量如1而不是使用实际列的原因是你避免了实际获取列值的I / O.这可能会提高性能。