Введение в язык SQL

SQL (Structured Query Language) — это язык запросов, используемый для работы с реляционными базами данных. Он позволяет создавать, изменять, извлекать и управлять данными в базах данных. Все операторы языка SQL можно разделить на две большие группы:

  • Операторы DDL (Data Definition Language) - язык определения данных. Позволяет создавать, изменять и удалять объекты БД, такие как таблицы, домены, хранимые представления и т.п.

  • Операторы DML (Data Manipulation Language) - язык манипулирования данными. Позволяет добавлять, модифицировать и удалять данные в объектах БД. Одним из самых сложных операторов DML является оператор выборки данных. С его помощью можно строить самые разнообразные запросы и производить вычисления.

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

Для получения общего представления о языке и дальнейшего более глубокого его изучения, давайте рассмотрим простейшие примеры самых распространенных операторов.

Основные команды DDL

  • CREATE TABLE — создание новой таблицы.

    CREATE TABLE table_name (
        column1 datatype,
        column2 datatype,
        ...
    );
    

    Пример:

    CREATE TABLE users (
        id INT PRIMARY KEY,
        name VARCHAR(50),
        age INT
    );
    
  • ALTER TABLE — изменение структуры таблицы (добавление, удаление или изменение столбцов).

    ALTER TABLE table_name ADD column_name datatype;
    

    Пример:

    ALTER TABLE users ADD email VARCHAR(100);
    
  • DROP TABLE — удаление таблицы.

    DROP TABLE table_name;
    

    Пример:

    DROP TABLE users;
    

Пример базы данных

CREATE TABLE users (
    id INT NOT NULL PRIMARY KEY,
    name VARCHAR(50),
    age INT
);

-- Мужские имена
INSERT INTO users (id, name, age) VALUES (1, 'Александр', 28);
INSERT INTO users (id, name, age) VALUES (2, 'Дмитрий', 34);
INSERT INTO users (id, name, age) VALUES (3, 'Иван', 22);
INSERT INTO users (id, name, age) VALUES (4, 'Сергей', 30);

-- Женские имена
INSERT INTO users (id, name, age) VALUES (5, 'Анна', 25);
INSERT INTO users (id, name, age) VALUES (6, 'Екатерина', 29);
INSERT INTO users (id, name, age) VALUES (7, 'Ольга', 31);
INSERT INTO users (id, name, age) VALUES (8, 'Мария', 19);

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

idnameage
1Александр28
2Дмитрий34
3Иван22
4Сергей30
5Анна25
6Екатерина29
7Ольга31
8Мария19

Основные команды DML

  • SELECT — извлечение данных из таблицы.

    SELECT column1, column2 FROM table_name;
    

    Пример:

    SELECT name, age FROM users;
    

    вернет

    nameage
    Александр28
    Дмитрий34
    Иван22
    Сергей30
    Анна25
    Екатерина29
    Ольга31
    Мария19
  • INSERT INTO — добавление новых данных в таблицу.

    INSERT INTO table_name (column1, column2) VALUES (value1, value2);
    

    Пример:

    INSERT INTO users (id, name, age) VALUES (9, 'Алиса', 25);
    
    idnameage
    1Александр28
    2Дмитрий34
    3Иван22
    4Сергей30
    5Анна25
    6Екатерина29
    7Ольга31
    8Мария19
    9Алиса25
  • UPDATE — обновление существующих данных.

    UPDATE table_name SET column1 = value1 WHERE condition;
    

    Пример:

    UPDATE users SET age = 26 WHERE name = 'Алиса';
    
    idnameage
    1Александр28
    2Дмитрий34
    3Иван22
    4Сергей30
    5Анна25
    6Екатерина29
    7Ольга31
    8Мария19
    9Алиса26
  • DELETE — удаление данных из таблицы.

    DELETE FROM table_name WHERE condition;
    

    Пример:

    DELETE FROM users WHERE name = 'Алиса';
    
    idnameage
    1Александр28
    2Дмитрий34
    3Иван22
    4Сергей30
    5Анна25
    6Екатерина29
    7Ольга31
    8Мария19

Фильтрация данных

  • WHERE — фильтрация строк по условию.

    SELECT * FROM users WHERE age > 25;
    
    idnameage
    1Александр28
    2Дмитрий34
    4Сергей30
    6Екатерина29
    7Ольга31
  • AND, OR, NOT — логические операторы для комбинирования условий.

    SELECT * FROM users WHERE age > 20 AND name = 'Алиса';
    
    idnameage
    7Ольга31
  • LIKE — поиск по шаблону.

    SELECT * FROM users WHERE name LIKE 'А%';  -- Начинается с "А"
    
    idnameage
    1Александр28
    5Анна25
  • IN — проверка наличия значения в списке.

    SELECT * FROM users WHERE age IN (20, 25, 30);
    
    idnameage
    4Сергей30
    5Анна25
  • BETWEEN — выбор значений в диапазоне.

    SELECT * FROM users WHERE age BETWEEN 20 AND 30;
    
    idnameage
    1Александр28
    3Иван22
    4Сергей30
    5Анна25
    6Екатерина29

Сортировка и группировка

  • ORDER BY — сортировка результатов.

    SELECT * FROM users ORDER BY age DESC;  -- По убыванию
    
    idnameage
    2Дмитрий34
    7Ольга31
    4Сергей30
    6Екатерина29
    1Александр28
    9Алиса25
    5Анна25
    3Иван22
    8Мария19
  • GROUP BY — группировка данных.

    SELECT age, COUNT(*) FROM users GROUP BY age;
    

    Для таблицы

    idnameage
    2Дмитрий34
    7Ольга34
    4Сергей29
    6Екатерина29
    1Александр29
    9Алиса25
    5Анна25
    3Иван22
    8Мария19

    запрос вернет

    agecount
    342
    293
    252
    221
    191
  • HAVING — фильтрация результатов группировки.

    SELECT age, COUNT(*) FROM users GROUP BY age HAVING COUNT(*) > 1;
    

    Для таблицы

    idnameage
    2Дмитрий34
    7Ольга34
    4Сергей29
    6Екатерина29
    1Александр29
    9Алиса25
    5Анна25
    3Иван22
    8Мария19

    запрос вернет

    agecount
    342
    293
    252

Агрегатные функции

  • COUNT() — подсчет строк.

    SELECT COUNT(*) FROM users;
    

    Для таблицы

    idnameage
    2Дмитрий34
    7Ольга34
    4Сергей29
    6Екатерина29
    1Александр29
    9Алиса25
    5Анна25
    3Иван22
    8Мария19

    запрос вернет

    count
    9
  • SUM() — сумма значений.

    SELECT SUM(age) FROM users;
    

    Для таблицы

    idnameage
    2Дмитрий34
    7Ольга34
    4Сергей29
    6Екатерина29
    1Александр29
    9Алиса25
    5Анна25
    3Иван22
    8Мария19

    запрос вернет

    count
    246
  • AVG() — среднее значение.

    SELECT AVG(age) FROM users;
    

    Для таблицы

    idnameage
    2Дмитрий34
    7Ольга34
    4Сергей29
    6Екатерина29
    1Александр29
    9Алиса25
    5Анна25
    3Иван22
    8Мария19

    запрос вернет

    count
    27,33
  • MIN() и MAX() — минимальное и максимальное значение.

    SELECT MIN(age), MAX(age) FROM users;
    

    Для таблицы

    idnameage
    2Дмитрий34
    7Ольга34
    4Сергей29
    6Екатерина29
    1Александр29
    9Алиса25
    5Анна25
    3Иван22
    8Мария19

    запрос вернет

    minmax
    1934

Контрольные вопросы

  1. Для чего предназначены операторы DDL?
  2. Для чего предназначены операторы DML?
  3. Назовите основные команды DDL и приведите примеры?
  4. Назовите основные команды DML и приведите примеры?
  5. Приведите примеры запросов для фильтрации данных?
  6. Приведите примеры агрегирующих операторов?