SQL Structured Query Language

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

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

  • создание новой таблицы;
  • добавление записей в таблицу;
  • изменение содержимого записей;
  • удаление записей из таблицы;
  • чтение записей из одной или нескольких таблиц;
  • изменение структур таблиц.

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

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

SQL состоит из четырех отдельных частей:

  1. DDL (Data Definition Language) - язык определения данных; используется для определения структур хранящихся в БД данных. Операторы DDL позволяют создавать, изменять и удалять объекты в БД. Допустимые типы объектов зависят от используемой СУБД и обычно включают базы данных, пользователей, таблицы, представления, хранимые процедуры и ряд более вспомогательных объектов типа роли и индексы. Список некоторых операторов :
    • Операторы DDL (Data Definition Language) - операторы определения объектов базы данных
    • CREATE SCHEMA - создать схему БД;Ц
    • DROP SHEMA - удалить схему БД;
    • CREATE TABLE - создать таблицу;
    • ALTER TABLE - изменить структуру таблицы;
    • DROP TABLE - удалить таблицу;
    • CREATE DATABASE - создать базу данных;
    • DROP DATABASE - удалить базу данных;
    • CREATE SEQUENCE - создать последовательность;
    • DROP SEQUENCE - удалить последовательность;
    • CREATE VIEW - создать представление;
    • DROP VIEW - удалить представление;
    • CREATE INDEX - создать индекс;
    • DROP INDEX - удалить индекс;
    • CREATE CONSTRAINT - создать ограничение (Primary Key, Foreign Key);
    • DROP CONSTRAINT - удалить ограничение (Primary Key, Foreign Key).
  2. DML (Data Manipulation Language) - язык манипуляции данными; используется для извлечения, вставки, изменения и удаления данных в таблицах. Операторы DML :
    • SELECT - чтение инфомации (из одной или нескольких таблиц);
    • INSERT - добавить строки в таблицу;
    • UPDATE - изменить строки в таблице;
    • DELETE - удалить строки в таблице;
  3. DCL (Data Control Language) - язык определения доступа к данным; используется для контроля доступа к информации БД. Операторы DCL определяют привилегии пользователя и позволяют выдавать и отбирать права на использование DDL и DML определенных операторов к определенным объектам БД.
    • GRANT - предоставление доступа пользователю или приложению на манипулирование объектами;
    • DENY — явный запрет доступа для пользователя;
    • REVOKE - отмена запрета или разрешения пользователя.
  4. TCL (Transaction Control Language) - язык управления транзакциями; используется для контроля обработки транзакций в БД. Операторы TCL включают, как правило, оператор commit для сохранения изменений, сделанных в ходе транзакции, и rollback для их отмены. Оператор savepoint можно использовать для разбиения транзакции на несколько частей, и, в зависимости от определенных условий, часть из них "откатить".
    • BEGIN TRANSACTION — начать транзакцию;
    • COMMIT - зафиксировать внесенные изменения;
    • ROLLBACK - откатить внесенные изменения.

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

Примеры запросов SQL

Data Definition Language DDL

/* Создание таблицы students с полями id, name, group. ID — первичный ключ.
   Сравнение в utf8, движок InnoDB. */
CREATE TABLE students (
  id     INT UNSIGNED NOT NULL AUTO_INCREMENT,
  name   VARCHAR(255) NOT NULL,
  group  VARCHAR(255) NULL DEFAULT NULL,
  PRIMARY KEY (id)
)
COMMENT='Список студентов'
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
 
/* Добавление в таблицу students поля "date birth" после поля ID с 
   разрешением не заполненных значений. */
ALTER TABLE students
  ADD COLUMN date_birth DATE NULL;
 
-- Удаление таблицы studets.
DROP TABLE studets;

Data Manipulation Language DML

-- Вставка строки в таблицу books
INSERT INTO books (title, author, description) 
    VALUES ('12 стульев', 'Ильф, Петров', 'Книга о преприимчивом авантюристе');
 
-- Чтение заголовка и описания книг из таблицы books
SELECT title, description 
    FROM books;
 
-- Изменение строки с ID равным 4
UPDATE books 
    SET author = 'Ильф и Петров'
        WHERE id = 4;

-- Удаление записи с ID равным 12
DELETE FROM books 
    WHERE  id = 12;

Data Control Language DCL

-- Предоставление права чтения таблицы students пользователю alex.
GRANT SELECT ON students TO alex;

-- Запрет права выборки из таблицы orders пользователя alex.
DENY SELECT ON orders TO alex;
 
-- Отменить запрет.
REVOKE SELECT ON total FROM piter;

Transaction Control Language TCL

-- Добавление новой строки в таблицу books. Удаление записи. Откатить все изменения.
BEGIN TRANSACTION;
INSERT INTO books (id, title, author, year, description) 
    VALUES ('О вреде алкоголя', 'Лев Медведев', 2001, 'Никто не выжил');
ROLLBACK;
 
-- Добавление новой строки в таблицу books. Принять изменения.
BEGIN TRANSACTION;
INSERT INTO books (id, title, author, year, description) 
    VALUES ('О вреде алкоголя', 'Лев Медведев', 2003, 'Размышления о мире сквозь призму стакана.');
DELETE FROM books WHERE id=3;
COMMIT;
  Рейтинг@Mail.ru