暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

梧桐数据库(WuTongDB):DML之From子句表和列别名

原创 鲁鲁 2024-06-12
703

表和列别名

你可以给表或复杂的表引用起一个临时的 表别名 ,以便被其余的查询引用。

要创建一个表别名,可以这样:

FROM table_reference AS alias

或:

FROM table_reference alias

AS关键字没啥特别的含义。alias可以是任意标识符。

表别名的典型应用是给长表名赋予比较短的标识,好让连接子句更易读一些。比如:

SELECT * FROM some_very_long_table_name s JOIN another_fairly_long_name a ON s.id = a.num;

取了别名之后就不允许再用最初的名字了。因此,这是不合法的:

SELECT * FROM my_table AS m WHERE my_table.a > 5;

在WuTongDB中,如果add_missing_from环境变量是off(缺省时),会抛出一个错误。如果是on,一个隐含的表引用将会被加到FROM子句里,所以这个查询可以写成这样:

SELECT * FROM my_table AS m, my_table AS my_table WHERE my_table.a > 5;

这样通常会导致交叉连接,但通常不是想要的结果。

表别名主要是为了方便标记,但对于自连接却是必须的。比如:

SELECT * FROM people AS mother JOIN people AS child ON mother.id = child.mother_id;

另外,要引用子查询的结果也必须使用别名(参见 子查询 )。

圆括弧用于解决歧义。下面的第一个语句把别名b赋予第二个my_table表; 而第二个语句则把别名b赋予了连接的结果。

SELECT * FROM my_table AS a CROSS JOIN my_table AS b ...
SELECT * FROM (my_table AS a CROSS JOIN my_table) AS b ...

另外一种形式的表别名除了给表赋予别名外,还给该表的列也赋予了别名:

FROM table_reference [AS] alias ( column1 [, column2 [, ...]] )

如果声明的列别名比表里实际的列少,那么后面的列就没有别名。 这个语法对于自连接或子查询特别有用。

如果用这些形式中的任何一种给一个JOIN子句的输出结果附加了一个别名, 那么该别名就在JOIN里隐藏了其原始的名字。比如:

SELECT a.* FROM my_table AS a JOIN your_table AS b ON ...

是合法 SQL ,但是:

SELECT a.* FROM (my_table AS a JOIN your_table AS b ON ...) AS c

是不合法的:别名a在别名c的外面是看不到的。

最后修改时间:2024-08-05 09:13:22
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论