微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么在分配之前可以在SQL中引用标识符?

如何解决为什么在分配之前可以在SQL中引用标识符?

SQL查询中,可以在声明名称之前引用该名称

SELECT A.id FROM table_a A;

这种行为的历史是什么?它与要求您在引用变量之前先分配变量的编程语言有什么关系?

解决方法

您误解了SQL语言的性质。它不是程序语言,而是声明性语言。该语句描述了结果的样子,数据库相应地构建了实际的查询计划-默认情况下,您看不到它。

某些数据库提供了某种过程子语言,可用于编写过程-例如Oracle中的PL / SQL。但是,您在此处显示的是标准SQL SELECT语句。那里没有变量声明的概念。 A子句中的FROMtable_a的别名,又名标识符,您可以使用<table identifier>.<column name>这样的表达式来引用表的列。

,

为什么在分配之前可以引用SQL中的标识符?

它是表的别名。但是这里的关键是不要从上至下阅读SQL。

SELECT A.id 
FROM table_a A;

实际上执行起来更像:

FROM table_a A
SELECT A.id;

现在这很合理了。


进一步:

SELECT A.id + 1 AS c 
FROM table_a A
WHERE c = 10;
-- error,we cannot use c,even if it was defined 2 lines before

因为顺序如下:

FROM table_a A
WHERE c = 10       -- here C is not defined
SELECT A.id + 1 c;

即使在SELECT中处于同一级别,也无法重用已定义的别名:

 SELECT a + 1 AS b,b + 1 AS c,c + 1 AS d
 FROM tab
 -- error
 -- (some databases allow to use lateral column aliasing)

相关阅读:

Why do “linq to sql” queries starts with the FROM keyword unlike regular SQL queries?

Lexical and logical SELECT clause order

All-at-once rule

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。