Статьи

Язык запросов лучше, чем SQL

Леланд Ричардсон , основатель Tech.Pro , недавно опубликовал очень интересную статью о BQL, его видении лучшего языка запросов (чем SQL) . Решающим подвигом его нового языкового предложения является тот факт, что это действительно расширенный набор самого SQL.

SQL — очень богатый и выразительный язык для запросов к реляционным базам данных. Но это неловко во многих аспектах, и многие люди чувствуют, что оно развивается медленно, даже если это не так, учитывая темп стандартов SQL. Но стандарт — это одно, реализации — другое, особенно на предприятии. Когда мы ведем блог о SQL, мы постоянно удивляемся , насколько удивительным является диалект PostgreSQL . Но часто PostgreSQL просто реализует стандарт. Так что есть надежда, что мы куда-то доберемся.

Тем не менее, в статье Леланда есть пара идей, которые стоит рассмотреть. С нашей точки зрения, это в основном:

Гибкость в упорядочении SELECTпредложения и табличного выражения

В 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 .

Неявные ключевые соединения

Эта функция также доступна в jOOQ , используя ON KEYпункт. Обратите внимание, что 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 довольно хорошие . Ясно, что существует большой потенциал в создании «BQL» для SQL, что

Let’s see where this endeavour leads. We’ll certainly be keeping an eye out for BQL’s next steps.