当前位置:首页 > AI技术 > 正文内容

AS关键字输出字段名称最佳实践|Duuu笔记

admin6个月前 (03-31)AI技术159

AS别名在SQL中需用引号包裹含空格/特殊字符的名称,ORDER BY可有限使用别名而GROUP BY不可,表别名AS可省略但视图/CTE中必须,别名影响视图接口与下游兼容性。

SELECT 中用

AS

给字段起别名,但别名里不能有空格或特殊字符

直接写

SELECT name AS full name

会报错,因为

full name

被解析成两个标识符。MySQL、PostgreSQL、SQL Server 都一样。

解决方法只有两种:

AS "full name"

(双引号,PostgreSQL/SQL Server 支持)或

AS `full name`

(反引号,MySQL 专用)。SQLite 用双引号,Oracle 用双引号但要求别名全大写才不报错。

别名含空格、连字符、中文时,必须加引号包裹,否则语法错误

别名不含特殊字符时,

AS

可省略,

SELECT name fullname

是合法的,但可读性差,不推荐

别名是临时的,不影响原表结构,也不影响后续

WHERE

GROUP BY

—— 它们只能引用原始列名或表达式,不能用别名(除非在子查询或 CTE 里)

ORDER BY

GROUP BY

中能不能用

AS

别名?

不能直接用 —— 大多数数据库(MySQL 5.7+、PostgreSQL、SQL Server)在

ORDER BY

中允许用别名,但在

GROUP BY

中不行。Oracle 和老版本 MySQL 甚至

ORDER BY

也不认。

比如

SELECT user_id, COUNT(*) AS cnt FROM logs GROUP BY cnt

会报错:

ERROR: column "cnt" does not exist

。因为

GROUP BY

执行早于

SELECT

列计算,别名还没生成。

ORDER BY

是唯一可能“认”别名的地方,但靠不住,建议统一用原始列或位置序号(如

ORDER BY 2

GROUP BY

必须写原始列名、表达式,或重复整个聚合表达式(如

GROUP BY user_id, COUNT(*)

不合法,得写

GROUP BY user_id

想按别名分组?包一层子查询:

SELECT * FROM (SELECT user_id, COUNT(*) AS cnt FROM logs) t GROUP BY t.cnt

AS

给表起别名时,为什么有时候写

JOIN users u

JOIN users AS u

更常见?

因为表别名的

AS

关键字在所有主流 SQL 方言中都是可选的,而且省略后更紧凑。写

FROM orders o JOIN users u ON o.user_id = u.id

是标准实践,加

AS

反而显得冗余。

Action Figure AI

借助Action Figure AI的先进技术,瞬间将照片转化为定制动作人偶。

下载

但注意:如果表名是关键字(比如叫

order

),又用了别名,那

AS

就不能省 ——

FROM order o

会语法报错,必须写

FROM order AS o

或换引号:

FROM `order` o

表别名不用

AS

是惯例,不是规范强制,但团队协作时保持一致更重要

视图或 CTE 中定义别名时,

AS

是必须的,比如

WITH active_users AS (SELECT * FROM users WHERE status = 'active')

嵌套子查询里,别名不可省略,且必须跟在右括号后:

(SELECT id FROM logs) AS sub

,漏掉

AS

在 PostgreSQL 和 SQL Server 会报错

AS

别名在视图和导出场景下的实际影响

创建视图时用

AS

定义的字段名,会成为视图的“公开列名”。下游应用查这个视图时看到的就是别名,不是原始列名。这点容易被忽略,尤其当原始列名带下划线(

created_at

)而别名用驼峰(

createdAt

)时,前端代码可能直接依赖后者。

导出 CSV 或对接 BI 工具时,别名会作为表头输出。但如果用了引号包裹的别名(如

AS "User Name"

),某些旧版工具可能无法识别空格,导致字段错位。

视图中别名一旦定下,就该当作接口契约维护;改别名等于破坏下游兼容性

BI 工具或 ORM 映射时,优先读取列名而非注释,所以别名比注释更关键

别名长度受限:SQL Server 最长 128 字符,MySQL 是 64 字节(中文算多字节),超长会被截断且无警告

别名看着只是改个名字,但它在执行顺序、跨方言兼容、下游消费三个层面都藏着隐性约束。最常踩的坑不是不会写,而是写了之后没意识到它在哪能用、在哪不能用、以及改了会影响谁。

相关文章

【大数据分析 | 深度学习】在Hadoop上实现分布式深度学习

一、Submarine(Hadoop生态系统) (一)Submarine 介绍 (三)Submarine 属于 Hadoop 生态系统 (四)Submarine 官网版...

什么是人工智能 ?

您可以使用 ML 训练 AI,使其精确、快速地执行任务。这可以通过自动化员工感到吃力或厌烦的业务部分来提高运营效率。同样,您可以使用 AI 自动化来腾出员工资源,用于更复杂和更具创造性的工作。...

从入门到精通:前端开发之骡子快跑支持热点借势吗 骡子快跑节日营销文案生成|Duuu笔记

骡子快跑平台提供五步节日营销文案生成路径:一、调用内置32个节日模板库;二、输入热点事件触发动态生成;三、绑定自有素材库实现个性化延展;四、多角色视角协同输出;五、接入微信生态直发并校验合规性。 ☞...

常见的神经网络模型

前馈神经⽹络中包含激活函数( 、tanh函数等)、损失函数(均⽅差损失函数、 等)、优化算法(BP算法)等。常⽤的模型结构有:感知机、 、全连接神经⽹络、卷积神经⽹络、...

前端开发实战详解:骡子快跑如何生成会议纪要 骡子快跑语音转文字整理技巧最佳实践|Duuu笔记

使用听脑AI转写、骡子快跑生成纪要、影子跟读校验、自定义术语词典及EcomGPT-CNN情绪风险分析,五步实现会议纪要高效精准产出。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量...

前端开发高级应用:骡子快跑支持日程安排吗 骡子快跑时间管理助手用法实战案例|Duuu笔记

骡子快跑具备日程安排能力,可通过计算机模式构建长效日程代理、自然语言注入日历事件、绑定外部日历实现双向同步三种方式实现。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 Dee...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。