Tech.Pro的创始人Leland Richardson最近发表了一篇有关BQL的非常有趣的文章,他对更好的查询语言(比SQL)的愿景表示满意 。 他的新语言提案的决定性壮举是事实,它实际上是SQL本身的超集。
SQL是查询关系数据库的一种非常丰富且富有表现力的语言。 但是它在很多方面都很尴尬,而且考虑到SQL标准的发展步伐,即使这不是真的,很多人也认为它发展缓慢。 但是标准是一回事,而实现又是一回事-特别是在企业中。 当我们撰写有关SQL的博客时, 我们不断感到惊讶 , PostgreSQL方言真是太棒了 。 但是通常,PostgreSQL实际上只是实现了标准。 因此,希望我们能有所建树。
但是,在Leland的文章中,有两个想法值得借鉴。 从我们的角度来看,这些主要是:
灵活
在SQL中, SELECT
始终是第一个关键字。 它必须在表表达式之前表示。 我们在上一篇文章中已经表明,这对于许多SQL用户来说是相当混乱的 。 尽管现有语法应该继续存在,但是能够反转SELECT
子句和表表达式将是很好的。
FROM table
WHERE predicate
GROUP BY columns
SELECT columns
请记住,表表达式包含FROM
, WHERE
, GROUP BY
子句,以及特定于供应商的CONNECT BY
子句和其他:
<query specification> ::=
SELECT [ <set quantifier> ]
<select list> <table expression>
顺便说一下,此语言功能已在LINQ中提供。
隐式键联接
使用ON KEY
子句在jOOQ中也可以使用此功能。 请注意, Sybase还支持ON KEY
连接 :
from post
key join user
key join comment
select *
命名投影
这是我们真正希望SQL语言具有的功能之一。 但是,我们不会指望使用专用语法指定投影。 我们宁可使用对表表达式语法的扩展,允许一个表产生如下的“边表”:
from dbo.users
with projection as (
firstName, lastName, phoneNumber, email
)
select projection.*
在上面的示例中, projection
实际上只是从users
表派生的另一个表表达式。 从SQL语法的语义来看,这将非常强大,因为这样的投影将继承常规表的所有语法功能。 当我们称该功能为“公共列表达式”时,我们已经在此进行过博客撰写 。
结论
利兰还有很多其他想法。 他只是项目的开始,仍然需要大量改进。 但是,他在reddit上获得的反馈是相当不错的 。 显然,为SQL创建“ BQL”有很多潜力
让我们看看这项努力的目的。 当然,我们将密切注意BQL的后续步骤。
翻译自: https://www.javacodegeeks.com/2014/03/a-better-query-language-than-sql.html