考虑以下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)
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
我唯一的问题是知道这些查询中数字1的含义是什么?如果我将它们改为2或其他什么怎么样?
谢谢你的帮助
在第一种情况下它并不重要; 你可以选择2或任何东西,因为它是一个存在查询.通常,除了存在查询之外,选择常量可以用于其他事物(它只是将常量放入结果集中的列中),但是存在查询是您最有可能遇到常量的地方.
例如,给定一个名为表person包含三列,id,firstname,lastname,和birthdate,你可以写这样的查询:
select firstname, 'YAY'
from person
where month(birthdate) = 6;
Run Code Online (Sandbox Code Playgroud)
这将返回类似的东西
name 'YAY'
---------------
Ani YAY
Sipho YAY
Hiro YAY
Run Code Online (Sandbox Code Playgroud)
它没用,但它是可能的.我们的想法是在select语句中选择表达式,它不仅可以是列名,还可以是常量和函数调用.更可能的情况是:
select lastname||','||firstname, year(birthday)
from person;
Run Code Online (Sandbox Code Playgroud)
这||是字符串连接运算符,year是我编写的函数.
您有时会看到1存在查询的原因是这样的.假设你只想知道是否有一个名字以'H'开头的人,但你不在乎这个人是谁.你可以说
select id
from person
where lastname like 'H%';
Run Code Online (Sandbox Code Playgroud)
但既然我们不需要id,你也可以说
select 1
from person
where lastname like 'H%';
Run Code Online (Sandbox Code Playgroud)
因为你关心的是你是否得到非空结果集.
在第二种情况下,1是列号; 这意味着您希望您的结果按第一列中的值排序.将其更改为2将按第二列排序.
顺便说一句,选择常量的另一个地方是从关系数据库转储到高度非规范化的CSV文件时,您将在类似NOSQL的系统中进行处理.
| 归档时间: |
|
| 查看次数: |
275 次 |
| 最近记录: |