Лекция 6: SQL - язык структурированных запросов

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

Основные категории SQL-команд

1. DDL (Data Definition Language) — язык определения данных:

  • CREATE — создание объектов базы данных (таблиц, индексов, представлений)
  • ALTER — изменение структуры существующих объектов
  • DROP — удаление объектов
  • TRUNCATE — удаление всех данных из таблицы с сохранением структуры

2. DML (Data Manipulation Language) — язык манипулирования данными:

  • SELECT — выборка данных
  • INSERT — вставка новых записей
  • UPDATE — обновление существующих записей
  • DELETE — удаление записей

3. DCL (Data Control Language) — язык управления данными:

  • GRANT — предоставление прав доступа
  • REVOKE — отзыв прав доступа

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

  • COMMIT — фиксация транзакции
  • ROLLBACK — откат транзакции
  • SAVEPOINT — создание точки сохранения внутри транзакции

Создание и изменение структуры базы данных (DDL)

Создание таблиц

CREATE TABLE employees (
    id INT PRIMARY KEY,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    email VARCHAR(100) UNIQUE,
    hire_date DATE DEFAULT CURRENT_DATE,
    salary DECIMAL(10,2) CHECK (salary > 0),
    department_id INT REFERENCES departments(id)
);

Изменение таблиц

-- Добавление нового столбца
ALTER TABLE employees ADD COLUMN phone VARCHAR(15);

-- Удаление столбца
ALTER TABLE employees DROP COLUMN phone;

-- Изменение типа данных столбца
ALTER TABLE employees ALTER COLUMN salary TYPE DECIMAL(12,2);

-- Добавление ограничения
ALTER TABLE employees ADD CONSTRAINT salary_check CHECK (salary < 1000000);

-- Удаление ограничения
ALTER TABLE employees DROP CONSTRAINT salary_check;

Работа с данными (DML)

Вставка данных (INSERT)

-- Вставка с указанием всех столбцов
INSERT INTO employees (id, first_name, last_name, email, hire_date, salary, department_id)
VALUES (1, 'John', 'Doe', 'john.doe@example.com', '2020-01-15', 75000.00, 1);

Выборка данных (SELECT)

-- Простейший запрос
SELECT * FROM employees;

-- Выбор конкретных столбцов
SELECT first_name, last_name, salary FROM employees;

-- Фильтрация строк
SELECT * FROM employees WHERE salary > 70000;

Обновление данных (UPDATE)

-- Обновление всех строк
UPDATE employees SET salary = salary * 1.05;

-- Обновление с условием
UPDATE employees SET salary = salary * 1.10 WHERE department_id = 1;

Удаление данных (DELETE)

-- Удаление всех строк (осторожно!)
DELETE FROM employees;

-- Удаление с условием
DELETE FROM employees WHERE salary < 50000;

Сложные запросы SELECT

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

SELECT 
    COUNT(*) AS employee_count,
    AVG(salary) AS avg_salary,
    MIN(salary) AS min_salary,
    MAX(salary) AS max_salary
FROM employees;

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

-- INNER JOIN
SELECT 
    e.first_name, 
    e.last_name, 
    d.name AS department_name
FROM employees e
INNER JOIN departments d ON e.department_id = d.id;

Подзапросы

-- Подзапрос в WHERE
SELECT * FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);

Заключение

SQL — мощный и выразительный язык для работы с реляционными базами данных, который включает в себя средства для определения структуры данных (DDL), манипулирования данными (DML), управления доступом (DCL) и контроля транзакций (TCL). Основные команды SQL — SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, DROP — позволяют выполнять все необходимые операции с данными.