Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
区分别名、临时表等[SQL Server]_Sql_Sql Server - Fatal编程技术网

区分别名、临时表等[SQL Server]

区分别名、临时表等[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

在下面的代码中,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 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的第一个解决方案中不需要别名?