SQL представляет собой декларативный язык программирования. В отличие от процедурных языков, характеризующихся наличием условий, циклов и функций, декларативные языки практически свободны от подобных алгоритмических конструкций. Их выражения выполняют роль запросов, описывающих, какое конкретное действие требуется совершить.
При использовании SQL пользователь формирует запросы для получения или изменения данных, а сама реализация таких запросов в основном осуществляется непосредственно выбранной СУБД. В различных ситуациях одно и то же действие может быть выполнено посредством разных конструкций языка, и программисту необходимо подобрать вариант, оптимизирующий нагрузку на систему. Следовательно, понимание сущности и принципов работы СУБД играет важную роль.
Запросы к базе данных выполняются по отношению к таблицам, и итог выполнения также возвращает таблицу, которую, если это требуется, можно сохранить.
SQL изначально создавался для разработки, изменения и доступа к данным в реляционных базах данных, представляя собой инструмент администрирования базы. Среди основных операций можно выделить: создание таблиц, добавление, изменение и удаление данных, выборку нужной информации и доработку структуры таблиц.
Тем временем SQL значительно расширился и включает в себя возможность описания и управления такими сущностями, как индексы, представления, триггеры и процедуры. В современных диалектах SQL уже присутствуют компоненты процедурных языков.
Язык SQL и СУБД чаще всего не действуют в одиночку, а служат промежуточными компонентами, обеспечивая взаимодействие между прикладным программным обеспечением или написанной программистом программой и базой данных. Для этого разные языки программирования предоставляют свои библиотеки и API для работы с различными СУБД.
SQL включает в себя операторы, различные инструкции и вычисляемые функции. Операторы, представляющие собой зарезервированные слова, обычно пишутся заглавными буквами, хотя использование строчных не приведёт к ошибкам.
Операторы SQL можно разделить на такие группы:
-
операторы определения данных (Data Definition Language, DDL)
- CREATE создает объект в базе данных, будь то БД, таблица, представление, пользователь и т.д.
- ALTER изменяет структуру существующего объекта
- DROP позволяет удалить существующий объект
-
операторы манипуляции данными (Data Manipulation Language, DML)
- SELECT извлекает данные, соответствующие введенным критериям
- INSERT добавляет новые данные в таблицу
- UPDATE обновляет уже существующие записи
- DELETE удаляет ненужные данные
-
операторы управления доступом к данным (Data Control Language, DCL)
- GRANT предоставляет конкретному пользователю или группе права на выполнение операций
- REVOKE отнимает ранее выданные права
- DENY накладывает запрет, который имеет приоритет над выданными разрешениями
-
операторы управления транзакциями (Transaction Control Language, TCL)
- COMMIT фиксирует изменения в рамках транзакции
- ROLLBACK отменяет все уже внесённые изменения в текущей транзакции
- SAVEPOINT позволяет разбить транзакцию на более мелкие части
Стандарты SQL позволяют переносить базы данных между различными СУБД, однако на практике это не всегда получается. Каждая СУБД использует свои собственные специфические диалекты SQL. Например, в SQLite некоторые типы данных не поддерживаются.
В зависимости от используемой СУБД в нее могут быть добавлены расширения для улучшения процедурности SQL. К таким элементам относятся хранимые процедуры и языки-надстройки. Например, в Oracle Database используется PL/SQL, а в PostgreSQL – PL/pgSQL.
Несмотря на существование различных диалектов, запросы, включающие только DDL и DML, остаются, как правило, независимыми от конкретной СУБД.