Открыть сервис

SQL

SQL (Structured Query Language, язык структурированных запросов) — это декларативный язык программирования, предназначенный для управления данными в реляционных системах управления базами данных (СУБД). SQL позволяет выполнять операции по определению, манипулированию, контролю доступа и администрированию данных, хранящихся в виде взаимосвязанных таблиц. Стандартизирован международными организациями ISO и ANSI.

История

Истоки SQL восходят к реляционной модели данных, предложенной Эдгаром Коддом в 1970 году в работе «A Relational Model of Data for Large Shared Data Banks». Первая реализация языка, получившая название SEQUEL (Structured English Query Language), была разработана в исследовательской лаборатории IBM (Сан-Хосе) в рамках проекта System R в начале 1970-х годов.

В 1979 году компания Relational Software, Inc. (позже переименованная в Oracle) выпустила первую коммерческую реализацию SQL — Oracle V2. Это стало поворотным моментом, так как IBM выпустила свои первые коммерческие продукты с поддержкой SQL (SQL/DS и DB2) только в начале 1980-х годов.

В 1986 году Американский национальный институт стандартов (ANSI) принял первый стандарт SQL-86. За ним последовали:

Несмотря на стандартизацию, все основные СУБД (Oracle Database, Microsoft SQL Server, PostgreSQL, MySQL, SQLite) имеют собственные диалекты и расширения SQL, что создаёт проблемы с переносимостью кода между системами.

Архитектура и основные компоненты

SQL представляет собой не процедурный, а декларативный язык: пользователь описывает, какие данные необходимо получить или изменить, не указывая алгоритм их обработки. СУБД самостоятельно строит оптимальный план выполнения запроса.

Подъязыки SQL

Стандарт SQL разделяет команды на категории по функциональному назначению:

Классификация и диалекты

Основное различие между реализациями SQL касается:

По степени соответствия стандарту можно условно выделить:

Основные конструкции и синтаксис

Команда SELECT

Ключевая конструкция SQL — запрос на выборку. Базовая структура:

``sql SELECT [DISTINCT] список_столбцов FROM источник_данных (таблица, представление, подзапрос) [WHERE условие_фильтрации] [GROUP BY столбцы_для_группировки] [HAVING условие_для_групп] [ORDER BY столбцы_для_сортировки [ASC|DESC]] [LIMIT количество_строк] [OFFSET смещение]; ``

Подзапросы и общие табличные выражения (CTE)

Подзапрос (вложенный запрос) — SELECT внутри другого запроса. Может использоваться в WHERE, FROM, HAVING и даже как вычисляемое поле.

Общие табличные выражения (Common Table Expressions) — временный именованный набор результатов, определяемый с помощью WITH:

``sql WITH SalesCTE AS ( SELECT ProductID, SUM(Quantity) AS TotalSales FROM Sales GROUP BY ProductID ) SELECT p.ProductName, c.TotalSales FROM Products p JOIN SalesCTE c ON p.ProductID = c.ProductID; ``

CTE особенно полезны для рекурсивных запросов (например, для иерархических структур данных, таких как дерево категорий или организационная структура).

Индексы

Индекс — структура, создаваемая для ускорения поиска данных. Основные типы:

Применение

SQL является основным инструментом для работы с реляционными базами данных практически во всех сферах:

Распространение в России и СНГ

На российском рынке корпоративных баз данных до 2022 года доминировали Oracle Database и Microsoft SQL Server. После ухода западных вендоров активно развиваются отечественные решения, совместимые с SQL:

Критика и ограничения

Несмотря на широкое распространение, SQL имеет ряд исторически сложившихся недостатков:

Интересные факты

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →