比SQL更好的查询语言

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

请记住,表表达式包含FROMWHEREGROUP 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值