Леланд Ричардсон , основатель 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.