Язык SQL

SQL – это язык программирования декларативного типа. В отличие от привычных нам процедурных языков, в которых есть условия, циклы и функции, в декларативных языках подобных алгоритмических конструкций почти нет. Декларативные выражения представляют собой скорее запросы, описание того, что хочет получить человек.

В случае SQL человек формулирует запрос на извлечение или модификацию данных, а алгоритм его выполнения почти полностью ложится на плечи конкретной СУБД. Хотя если один и тот же результат может быть получен с помощью разных запросов, программисту лучше выбрать тот, который создаст меньшую нагрузку на СУБД. То есть программисту желательно иметь представление о том, как работает СУБД.

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

Язык SQL предназначен для создания и изменения реляционных баз данных, а также извлечения из них данных. Другими словами, SQL – это инструмент, с помощью которого человек управляет базой данных. При этом ключевыми операциями являются создание таблиц, добавление записей в таблицы, изменение и удаление записей, выборка записей из таблиц, изменение структуры таблиц.

Однако в процессе развития языка SQL в нем появились новые средства. Стало возможно описывать и хранить такие объекты как индексы, представления, триггеры и процедуры. То есть в современных диалектах SQL есть элементы процедурных языков.

Язык SQL и СУБД обычно не используются сами по себе, а выполняют функцию промежуточного встроенного компонента, обеспечивающего связь между прикладным ПО или программой, которую пишет программист, и базой данных. В языках программирования существуют свои библиотеки, обеспечивающие API для различных СУБД.

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

Операторы делятся на:

  1. операторы определения данных (Data Definition Language, DDL)

    • CREATE создаёт объект БД (базу данных, таблицу, представление, пользователя и т. д.)

    • ALTER изменяет объект

    • DROP удаляет объект

  2. операторы манипуляции данными (Data Manipulation Language, DML)

    • SELECT выбирает данные, удовлетворяющие заданным условиям

    • INSERT добавляет новые данные

    • UPDATE изменяет существующие данные

    • DELETE удаляет данные

  3. операторы определения доступа к данным (Data Control Language, DCL)

    • GRANT предоставляет пользователю или группе разрешения на определённые операции с объектом

    • REVOKE отзывает ранее выданные разрешения

    • DENY задаёт запрет, имеющий приоритет над разрешением

  4. операторы управления транзакциями (Transaction Control Language, TCL)

    • COMMIT применяет транзакцию

    • ROLLBACK откатывает все изменения, сделанные в контексте текущей транзакции

    • SAVEPOINT делит транзакцию на более мелкие участки

Стандарты SQL позволяют обеспечить переносимость баз данных между разными СУБД. На самом деле это весьма условно. Разные СУБД используют свои диалекты SQL. Например, SQLite не понимает ряд типов данных.

В разных СУБД есть свои расширения для придания SQL "процедурности". Это хранимые процедуры (stored procedures) и процедурные языки-надстройки. Так в Oracle Database используется PL/SQL, в PostgreSQL – PL/pgSQL.

Несмотря на наличие диалектов, запросы, содержащие только DDL и DML, обычно переносимы между разными СУБД.