如何解决为什么在分配之前可以在SQL中引用标识符?
SELECT A.id FROM table_a A;
这种行为的历史是什么?它与要求您在引用变量之前先分配变量的编程语言有什么关系?
解决方法
您误解了SQL语言的性质。它不是程序语言,而是声明性语言。该语句描述了结果的样子,数据库相应地构建了实际的查询计划-默认情况下,您看不到它。
某些数据库提供了某种过程子语言,可用于编写过程-例如Oracle中的PL / SQL。但是,您在此处显示的是标准SQL SELECT
语句。那里没有变量声明的概念。 A
子句中的FROM
是table_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?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。