gpt4 book ai didi

sql - 选择*与选择*

转载 作者:行者123 更新时间:2023-11-29 11:26:55 24 4
gpt4 key购买 nike

昨天一位同事向我展示了以下 postgres 查询。我们都对它的工作感到惊讶:

SELECT* FROM mytable;

由于我最近为另一种语言编写了解析器,所以我试图更深入地了解为什么此查询“编译”并返回与 SELECT * FROM mytable; 相同的结果。

大概这被认为是一个有效的查询,因为在词法分析期间,postgres 从输入中读取 SELECT 作为标记,然后搜索下一个标记,它找到了 *,等等 - 这或多或少是这里发生的事情吗?

此外,postgres 词法分析器/解析器是否恰好足够强大以理解此查询,或者其他数据库是否可以理解类似的 SELECT* 查询?

最佳答案

通常词法分析器会向当前标记添加字符,直到它找到一个不属于当前标记的字符,然后它退出并从之前无法继续的地方重新开始。

所以这里发生的事情是词法分析器吞噬了 SELECT 并看到下一个字符是 * ,因为它正在收集一个词,所以不属于使用 SELECT。所以它停下来,分析原来是关键字的 SELECT,然后从它识别的 * 开始,等等。这与在其他编程语言中从 2*22 * 2 得到 4 的原因相同。

至于能不能在其他数据库上运行,就看词法分析器的细节和语法规则了。

关于sql - 选择*与选择*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6968084/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com