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

Язык запросов SQL

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

История

Разработка SQL началась в начале 1970-х годов в исследовательском центре IBM в Сан-Хосе (Калифорния) под руководством Дональда Чемберлина и Рэймонда Бойса. Первоначально язык назывался SEQUEL (Structured English Query Language), но из-за торговых споров был переименован в SQL. Первая коммерческая реализация появилась в 1979 году в СУБД Oracle (тогда Relational Software, Inc.). В 1986 году ANSI принял первый стандарт SQL-86, за которым последовали SQL-89, SQL-92 (SQL2) и SQL:1999 (SQL3), добавивший поддержку объектно-реляционных расширений, рекурсивных запросов и триггеров. Последующие версии (SQL:2003, SQL:2008, SQL:2011, SQL:2016, SQL:2023) вводили оконные функции, JSON, поддержку графов и другие возможности.

Основные компоненты языка

SQL делится на несколько подмножеств по функциональному назначению:

DDL (Data Definition Language)

Язык определения данных — набор команд для создания, изменения и удаления объектов базы данных (таблиц, индексов, схем). Основные операторы:

DML (Data Manipulation Language)

Язык манипулирования данными — команды для работы с содержимым таблиц:

DCL (Data Control Language)

Язык управления доступом — команды для разграничения прав пользователей:

TCL (Transaction Control Language)

Язык управления транзакциями — команды для группировки операций в атомарные блоки:

Структура запроса SELECT

Основная команда SQL — SELECT, которая имеет следующую синтаксическую структуру (в упрощённом виде):

``sql SELECT [DISTINCT] список_столбцов FROM таблица [WHERE условие] [GROUP BY столбцы] [HAVING условие_группы] [ORDER BY столбцы [ASC|DESC]] [LIMIT количество [OFFSET смещение]] ``

Типы данных

SQL поддерживает стандартные типы данных, которые могут различаться в реализациях:

Ограничения целостности

Для обеспечения корректности данных в SQL используются ограничения (constraints):

Соединения таблиц (JOIN)

Для объединения данных из нескольких таблиц используются операторы соединения:

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

Подзапросы (вложенные запросы) позволяют использовать результат одного SELECT внутри другого. Они могут быть:

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

Индексы

Индексы — объекты базы данных, ускоряющие выполнение запросов SELECT и WHERE за счёт создания дополнительной структуры данных (чаще всего B-дерева или хеш-таблицы). Основные типы:

Транзакции и уровни изоляции

Транзакция — логическая единица работы, обладающая свойствами ACID (атомарность, согласованность, изолированность, долговечность). SQL-стандарт определяет четыре уровня изоляции транзакций (по возрастанию строгости):

  1. READ UNCOMMITTED — допускает «грязное» чтение (видны незафиксированные изменения других транзакций).
  2. READ COMMITTED — «грязное» чтение исключено, но возможны неповторяющееся чтение и фантомы.
  3. REPEATABLE READ — гарантирует одинаковое чтение строк в рамках одной транзакции, но возможны фантомные строки.
  4. SERIALIZABLE — полная изоляция, транзакции выполняются так, как если бы они шли последовательно.

Хранимые процедуры, функции и триггеры

Большинство СУБД поддерживают расширения SQL для написания логики на стороне сервера:

Диалекты и реализации

Хотя SQL стандартизирован, каждая СУБД имеет собственные расширения и особенности:

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

Применение

SQL является основным инструментом для работы с реляционными базами данных в самых разных областях: корпоративные информационные системы, веб-приложения, банковские системы, аналитика данных, научные исследования. Знание SQL входит в обязательный набор навыков для разработчиков, аналитиков данных, администраторов баз данных и специалистов по тестированию.

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

На главную BFOmetr →