区分别名、临时表等[SQL Server]
在下面的代码中,SecondHightSalary是列名还是表名?如果它是一个表的名称,它是临时表还是别名,还是其他什么区分别名、临时表等[SQL Server],sql,sql-server,Sql,Sql Server,在下面的代码中,SecondHightSalary是列名还是表名?如果它是一个表的名称,它是临时表还是别名,还是其他什么 select ( select distinct salary from employee order by salary desc offset 1 rows fetch next 1 rows only ) SecondHighestSalary; select Max(Salary) as SecondHighestSalary from (select Salar
select ( select distinct salary from employee order by salary desc
offset 1 rows fetch next 1 rows only ) SecondHighestSalary;
select Max(Salary) as SecondHighestSalary from
(select Salary,
rank() over (order by Salary desc) as 'rank'
from Employee
) e
where rank = 2
另一个例子如下。什么是e?别名、表、列名或其他内容
select ( select distinct salary from employee order by salary desc
offset 1 rows fetch next 1 rows only ) SecondHighestSalary;
select Max(Salary) as SecondHighestSalary from
(select Salary,
rank() over (order by Salary desc) as 'rank'
from Employee
) e
where rank = 2
“SecondHighestSalary”是一个列名。
“e”是一个派生表名。在这两个示例中,
第二高工资是该列的别名。这避免了数据以(无列名)
e
是该表的别名,这是必需的,以便您可以引用该表,如果没有该别名,则代码将出错。当然SecondHighestSalary
是上述两个示例中的别名,正如第二个示例中的e
一样。在“rank”
中使用“来划分别名是不寻常的,我的名字可能会被删除。在第二个示例中,e是子查询的别名。但这两个问题似乎都太复杂了SecondHighestSalary
是两个查询中该列的别名。为什么需要命名表/query“e”才能从中进行选择?需要一些表名来引用它。可能是e,我的桌子,等等…好的。我原以为您可以从另一个select查询的结果中进行选择。。。不仅SQL Server,而且所有其他SQL数据库都是这样吗?@itstoocold,您必须命名表,因为这是语言要求的一部分,所有表都有名称。在本例中,表可以是匿名的,但数据库供应商尚未实现该功能。我经常想,SQL中各种操作的级联非常冗长,需要提供未使用的别名,但不幸的是,这正是当前的情况。为什么在这个问题中不命名所需的select查询,对于Microsoft SQL Server?请查看此问题的解决方案:为什么Microsoft SQL Server的第一个解决方案中不需要别名?