TGViewer
LEFT JOIN LEFT JOIN @leftjoin · 41.8K subscribers
Post #748 11.3K
🌀 Критика критики SQL (Запутались? Сейчас будем разбираться!) 📚
Язык SQL впервые появился в 1974 году как часть базы данных IBM System R. Прошло почти 50 лет, и SQL де-факто является языком для работы с большинством баз данных (реляционных, конечно же).
Карлин Энг работал инженером и аналитиков данных 12 лет и у него накопилось много вопросов к SQL. В статье он, как настоящий аналитик, структурированно изложил, что именно его не устраивает. Конечно, он был не первым критиком SQL, а лишь прокомментировал идеи, описанные в книге 1984 года выпуска «Критика языка баз данных SQL» математика Си Джей Дейта. Дейт был бывшим сотрудником IBM, известным исследователем баз данных и другом Э. Ф. Кодда. Однако, те замечания, которые были описаны в его книге, частично устарели и ниже будет краткая выжимка из рассуждения Карлина (которое я рекомендую прочесть в оригинале).

🤔 Что не так с SQL по версии Си Джей Дейта?
Для начала разберемся с тем, что такое ортогональность. Суть ортогональности по мнению автора в следующем: конструкции языка подобны блокам Lego — небольшое количество базовых частей можно рекомбинировать простыми и интуитивно понятными способами. Отсутствие ортогональности означает, что в языке есть много исключений в том, как компоненты могут быть объединены, что делает его сложным для изучения.

1. Отсутствие ортогональности выражений
Раньше использование FROM в SELECT было ограничено указанием только имен таблиц или представлений, а не подзапросов или общих табличных выражений (CTE). Однако, современный SQL предоставляет возможность ссылаться на CTE или подзапрос в операторе FROM.

2. Отсутствие ортогональности функций
Автор приводит множество конкретных примеров этого критического замечания, которые возникают при разном написании запроса. Один из них – оператор HAVING, которое мы разбирали в предыдущем посте. Спойлер: использование HAVING и GROUP BY теперь гораздо проще и шире, чем, например, в SQL 1983 года.

3. Отсутствие ортогональности в целом
Это замечание касается ряда небольших проблем, например, ограничение для «длинных» полей (строки больше 254 символов): на «длинное» поле нельзя было сослаться в предложении WHERE или GROUP BY. Конечно, современные системы баз данных больше не имеют этих ограничений.

4. Ключи
SQL образца 1983 года мог легко игнорировать первичные ключи, а внешних ключей даже не существовало. Хотя SQL образца 2022 допускает внешние ключи, и многие базы данных обеспечивают ссылочную целостность, последняя версия языка по-прежнему не полностью понимает семантику первичных и внешних ключей.

5. Домены или типы данных
В первоначальном SQL были только примитивные типы (int, char, float и т. д.). Сегодня Postgres обеспечивает поддержку пользовательских типов произвольной сложности, однако, большинство хранилищ данных OLAP не поддерживают определяемые пользователем типы, и SQL тут бессилен.

6. Назначение отношений
Критика здесь заключалась в следующем: Ограниченная форма присваивания отношения поддерживается через INSERT ... SELECT, но эта операция не перезаписывает предыдущее содержимое таблицы, а источником присваивания не может быть произвольное алгебраическое выражение (или эквивалент SELECT). Это уже не так. Назначение отношения может быть выполнено с помощью CREATE OR REPLACE TABLE AS. Для подзапросов и CTE источником может быть любое произвольное алгебраическое выражение.

7. Явные операторы JOIN, INTERSECT и DIFFERENCE
SQL 1983 года их не поддерживал, но в современном SQL это уже давно исправлено.

💭 Выводы
Хотя многие критические замечания в отношении SQL были исправлены обновлениями стандарта ANSI, некоторые из них все еще присутствуют, например, отсутствие ортогональности. Несмотря на несовершенство SQL, его доминирование на рынке означает, что каждый начинающий аналитик и программист должен его изучить. Однако, мне кажется, что при всех известных недостатках и попытках регулярно улучшить язык, SQL остается очень удобным и интутитивно понятным языком для работы с данными.

А вы что думаете — удобнее писать SELECT к табличке 💯или обработать массив с помощью pandas 🤡?
Carlineng Carlin Eng Homepage of Carlin Eng
  • 💯 35
  • 👍 16
  • 🔥 12
  • 🤡 4
More from @leftjoin
  1. Oct 14, 2026Claude помог обнаружить новую планету Наверное. Пользователь reddit проанализировал данные…
  2. Oct 12, 20264 уровня ИИ-осведомленности Еще в апреле Андрей Карпаты (автор термина «вайбкодинг», если…
  3. Oct 9, 2026Anthropic представила Claude Dashboards и Claude Motion И вот опять ИИ отбирает работу у а…
  4. Oct 7, 2026Состоялся релиз Polars 2.0 Polars — Python-библиотека для работы с данными и популярная ал…
  5. Oct 5, 2026Physical AI: следующий этап развития ИИ Рано или поздно ИИ выйдет за пределы интернета в р…
  6. Sep 30, 2026Что было на OpenAI Dev Day? Вообще-то много чего — больше 20 релизов и анонсов. Пройдемся…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →