Similar presentations:
SQL_ основные конструкции, принципы работы и области применения (2)
1.
Стандарт де-факто для работы с даннымиИмя докладчика
Компания
2025
ы
е
к
о
н
с
т
р
2.
Содержание01
В ведение в SQL
02
Архитект ура
03
Операторы язы ка
История, стандарты и диалекты
Клиент-сервер и типы данных
DDL, DML, DCL, TCL
04
Продв инуты е техники
05
Ры нок и тренды 2024
JOIN, Индексы, Транзакции
SQL vs NoSQL, статистика
3.
Что такое S QL ?S tructured Query Language
Декларативный язык программирования для
взаимодействия с реляционными базами
данных.
"Вы описывает е, ЧТО хот ит е получит ь,
а не эт о сделат ь."
— Ключев ая парадигма
ANS I / IS O S tandard
4.
Краткая история1970
1970
1986
2023+
Рождение теории
Стандартизация
NewSQL и AI
Эдгар Кодд (IBM) публикует статью «A
ANSI принимает SQL как стандарт. Позже
Интеграция с Big Data, поддержка JSON,
Relational Model of Data...». Рождение
утвержден ISO. Начало "Войн баз данных".
векторный поиск для AI моделей.
реляционной модели.
5.
Ключевые диалекты SQLOracle SQL
T-SQL
PostgreSQL
Расширенный PL/SQL для хранимых процедур и
Microsoft SQL Server диалект с расширениями
Стандартизованный SQL с поддержкой JSON и
корпоративных приложений
для транзакций и обработки ошибок
расширенных типов данных
"Понимание различий между диалектами критично для переносимости кода"
6.
Семейства команд (Операторы)Классификация инструкций по назначению
DDL
DML
DCL
TCL
Data Definition Language
Data Manipulation Language
Data Control Language
Transaction Control
Управление правами доступа
Управление транзакциями и
Определение структуры БД:
Работа с данными: чтение,
и безопасностью.
целостностью.
таблицы, схемы, индексы.
вставка, обновление.
SE L E CT
CR E ATE
ALTE R
DR OP
INSE R T
UPDATE
DE LE TE
GR ANT
COMMIT
R E VOKE
R OLLB ACK
7.
Анатомия запроса SELECTПорядок написания vs Порядок выполнения
Важный нюанс
Мы пишем первым, но
движок БД выполняет его
почти в самом конце,
после фильтрации и
8.
Визуализация J OINОбъединение данных из разных таблиц
IJ
LJ
FJ
INNER JOIN
Только совпадения (Пересечение)
LEFT JOIN
Все слева + совпадения справа
FULL JOIN
Все записи из обеих таблиц
9.
Ры нок баз данны х 2024SQL по-прежнему доминирует, но NoSQL растет быстрее
58%
Источник: Mordor Intelligence (Jul 2025)
Доля рынка
Доля Реляционных СУБД
Стабильность и стандарты
18.1%
CAGR NoSQL (2024-2030)
Темп роста нереляционных решений
Прогноз объема ры нка 2030
$292.2 B
x2 роста
Total
100%
Темп роста (CAGR )
10.
Реляционная модель данныхКлючевые принципы
Данные хранятся в таблицах (сущностях)
Таблицы связаны отношениями
Концептуальное представление
Строгая структурированность данных
Клиенты
Нормализация для минимизации избыточности
id, имя, email...
Заказы
id, клиент_id, дата...
11.
Нормализация данныхПроцесс организации данных для минимизации избыточности и зависимостей
1
Первая НФ
2
Вторая НФ
3
Третья НФ
Атомарность значений
Соответствует 1НФ
Соответствует 2НФ
Нет повторяющихся групп
Нет частичных зависимостей
Нет транзитивных зависимостей
"Денормализация — сознательный компромисс между строгостью структуры и производительностью запросов"
12.
Типы данных в SQLЧисловые
Даты и время
INTEGER
±2.14⁹
DATE
Только дата
BIGINT
±9.22¹⁸
TIME
Только время
TIMESTAMP
Дата и время
DECIMAL/NUMERIC
FLOAT/DOUBLE
Фиксированная точность
С плавающей точкой
Строковые
CHAR(n)
VARCHAR(n)
TEXT
INTERVAL
Период времени
Другие типы
Фиксированной длины
BOOLEAN
Переменной длины
BINARY
Большие тексты
TRUE/FALSE
Двоичные данные
JSON
Современные форматы
UUID
Уникальные идентификаторы
13.
DDL: Data Definition LanguageСоздание и управление структурой базы данных
CREATE
Создание новых объектов в БД
ALTER
Изменение существующих объектов
DROP
Удаление объектов из БД
CREATE DATABASE
ALTER TABLE
DROP TABLE
CREATE TABLE
ADD COLUMN
DROP DATABASE
CREATE INDEX
MODIFY COLUMN
DROP INDEX
CREATE VIEW
DROP COLUMN
DROP VIEW
DDL-операции могут быть необратимыми. DROP и некоторые ALTER-операции удаляют данные без возможности
восстановления.
14.
Работа с данными в таблицахSELECT
UPDATE
Извлечение данных из таблиц
Изменение существующих записей
Выборка строк
Обновление значений
Фильтрация (WHERE)
Условное обновление (WHERE)
Сортировка (ORDER BY)
Массовое обновление
Группировка (GROUP BY)
DELETE
INSERT
Добавление новых записей
Удаление записей из таблиц
Условное удаление (WHERE)
Добавление одной строки
Массовое удаление
Массовая вставка
TRUNCATE (полная очистка)
Вставка из запроса
15.
DCL Data Control LanguageTCL Transaction Control Language
Управление правами доступа к объектам БД
Управление транзакциями и целостностью данных
GRANT
COMMIT
Предоставление прав пользователям
Фиксация изменений в базе данных
SELECT, INSERT, UPDATE, DELETE, ALL
ROLLBACK
REVOKE
Отмена всех изменений до последнего COMMIT
Отзыв ранее предоставленных прав
Отмена привилегий, защита данных
SAVEPOINT
Создание точки сохранения в транзакции
Свойства ACID транзакций:
16.
Операторы и выражения SQLАрифметические
Специальные операторы
+
-
*
/
Сложение
Вычитание
Умножение
Деление
Операторы сравнения
=
!=
<>
Равно
Не равно
Не равно
<
>
<=
Меньше
Больше
Меньше или равно
>=
Больше или равно
BETWEEN
LIKE
Проверяет, находится ли
значение в диапазоне
Поиск по шаблону с
использованием % и _
IN
EXISTS
Проверяет наличие значения в
списке
Проверяет наличие записей в
подзапросе
Работа с NULL
IS NULL
Проверяет, является ли значение NULL
17.
Индексы в SQLУскорение доступа к данным
Что такое индекс?
Когда использовать индексы
Индекс — структура данных, ускоряющая поиск информации
в таблице, аналогично указателю в книге.
Столбцы, используемые в условиях WHERE
Столбцы, участвующие в JOIN операциях
Столбцы в условиях ORDER BY, GROUP BY
Без индекса
С индексом
Полное сканирование
таблицы (Table Scan)
Быстрый поиск по индексной
структуре
Большое количество
операций I/O
Минимум операций I/O
Первичные (PRIMARY KEY) и внешние (FOREIGN KEY) ключи
Компромиссы
Преимущества
Типы индексов
Ускорение запросов
SELECT
Недостатки
Замедление
INSERT/UPDATE/DELETE
18.
Функции агрегацииАнализ и обобщение данных
Основные функции
GROUP BY
Группирует строки с одинаковыми значениями в указанных столбцах
COUNT
Подсчитывает количество строк
или непустых значений
AVG
Вычисляет среднее
арифметическое значений
SUM
Вычисляет сумму значений
MIN/MAX
Находит минимальное и
максимальное значения
S E LE CT department, COUNT(*) as emp_ count
F R OM employees
GR OUP B Y department
Каждый столбец в SELECT, не входящий в агрегатную функцию,
должен быть в GROUP BY
HAVING
Расширенные функции
Фильтрует результаты GROUP BY (аналогично WHERE, но для
19.
Подзапросы (Subqueries)Запросы внутри запросов
Что такое подзапрос?
Коррелированные подзапросы
Запрос SQL, вложенный в другой запрос SQL и заключенный
Подзапросы, которые зависят от внешнего запроса и выполняются
в круглые скобки
для каждой его строки
По типу возвращаемых данных:
1
Скалярные подзапросы
2
Подзапросы-списки
3
Табличные подзапросы
Возвращают одно значение
Возвращают столбец значений
Возвращают одну или несколько строк с одним или несколькими
столбцами
SE LE CT e.name, e.salary
FR OM employees e
WHER E e.salary > (
SE LE CT AVG(salary)
FR OM employees
WHER E department = e.department
)
Могут быть медленными, так как выполняются многократно
20.
Представления (Views)Виртуальные таблицы на основе запросов
Что такое представления?
Представление — это сохраненный запрос, который
выглядит и работает как таблица, но не хранит данные
физически
Типы представлений
Стандартные представления
Результат запроса вычисляется при каждом обращении к
представлению
Преимущества представлений
Безопасность
Ограничивают доступ к определенным столбцам и строкам
Материализованные представления
Физически хранят результаты запроса и обновляются по расписанию
Быстрый доступ к предварительно рассчитанным данным
Обновляемые представления
Позволяют выполнять операции INSERT, UPDATE, DELETE при
соблюдении определенных условий
21.
Транзакции в SQLОбеспечение целостности данных
Что такое транзакция?
Логическая единица работы, которая должна быть выполнена
полностью либо не выполнена совсем
B E GIN TR ANS ACTION;
UP DATE accounts S E T balance = balance - 1 00
WHE R E account_ id = 1 ;
UP DATE accounts S E T balance = balance + 1 00
WHE R E account_ id = 2;
COMMIT;
Команды управления транзакциями
BEGIN TRANSACTION
Начинает новую транзакцию
COMMIT
Фиксирует все изменения, сделанные в рамках транзакции
ROLLBACK
Перевод денег между счетами должен быть атомарным
Отменяет все изменения, сделанные в рамках транзакции
SAVEPOINT
Свойства ACID
Создает точку сохранения для частичного отката транзакции
22.
Хранимые процедуры и триггерыПрограммирование на стороне БД
Хранимые процедуры
Триггеры
Подпрограммы, хранимые в БД, которые можно вызывать из
Специальный тип хранимых процедур, которые автоматически
приложений или других SQL-запросов
запускаются при определенных событиях в таблицах
Преимущества:
События запуска триггеров:
Инкапсуляция бизнес-логики
Повышение безопасности (права доступа)
INSERT
UPDATE
DELETE
Уменьшение сетевого трафика
Кэширование плана выполнения
Поддержка транзакций
Типичные применения:
Типы триггеров:
BEFORE
AFTER
Выполняется перед операцией
Выполняется после операции
23.
Оконные функцииПродвинутый анализ данных
Что такое оконные функции?
Функции, которые выполняют вычисления для набора строк,
связанных с текущей строкой, без группировки строк в одну
выходную строку
SELECT
department,
employee_name,
salary,
AVG(salary) OVER (PARTITION BY department) as dept_avg
FROM employees
Типы оконных функций
Функции ранжирования
ROW_NUMBER()
RANK()
Уникальный номер строки
Ранг с пропусками
DENSE_RANK()
NTILE(n)
Ранг без пропусков
Деление на n групп
Агрегатные функции как оконные
• SUM() OVER()
Ключевое отличие от GROUP BY: сохраняется детализация данных
• AVG() OVER()
• COUNT() OVER()
• MIN()/MAX() OVER()
24.
Производительность SQLОптимизация запросов
План выполнения запроса
Дерево операций, которые выполняет СУБД для обработки запроса
Лучшие практики оптимизации
Выбирайте только необходимые столбцы
Избегайте SELECT * кроме случаев, когда нужны все столбцы
Основные операции в планах:
Index Seek — эффективный поиск по индексу
Index Scan — перебор индекса
Фильтруйте данные как можно раньше
Используйте WHERE до GROUP BY и HAVING
Избегайте функций на индексированных полях
WHERE YEAR(date_column) = 2023 → WHERE date_column BETWEEN '202301-01' AND '2023-12-31'
Table Scan — перебор всей таблицы
Sort, Hash Join, Nested Loops и др.
Используйте EXISTS вместо IN для подзапросов
EXISTS останавливается после нахождения первого совпадения
Правильно индексируйте
Изучение плана — ключ к пониманию производительности
Создавайте индексы по часто используемым в WHERE, JOIN, ORDER BY
полям
25.
SQL vs NoSQLВыбор подходящего решения
SQL Реляционные БД
Ключевые характеристики
NoSQL Нереляционные БД
Ключевые характеристики
Структурированные данные
Гибкость схемы данных
Фиксированная схема, табличное представление
Динамическая структура, легкость изменений
ACID-транзакции
Горизонтальное масштабирование
Надежность и целостность данных
Распределение нагрузки между серверами
Мощный язык запросов
Высокая доступность
Стандартизированный SQL
Распределённость, устойчивость к сбоям
Вертикальное масштабирование
Специализация под типы данных
Наращивание мощности сервера
Разные модели для разных задач
Примеры и области применения
Типы и примеры
26.
NewSQL: Будущее баз данныхОбъединение лучшего из SQL и NoSQL
Что такое NewSQL?
Примеры систем NewSQL
Новое поколение реляционных баз данных, сочетающее
согласованность и надежность SQL с масштабируемостью
NoSQL
Google Spanner
Глобально распределенная,
синхронно реплицируемая БД с
TrueTime API
Amazon Aurora
Облачная БД с высокой
доступностью и MySQL/PostgreSQLсовместимостью
Ключевые характеристики:
Полная поддержка SQL и ACID-транзакций
Горизонтальное масштабирование
Отказоустойчивость и высокая доступность
Распределенная архитектура
CockroachDB
Open-source SQL БД для создания
глобальных, масштабируемых
облачных сервисов
Сценарии применения
TiDB
MySQL-совместимая
распределенная СУБД с
горизонтальным масштабированием
27.
Тенденции развития SQL2024-2025
Интеграция с AI
Cloud-Native SQL
Векторные базы данных
Serverless базы данных
Поддержка эмбеддингов для семантического поиска
Автоматическое масштабирование ресурсов
ML-оптимизация запросов
Kubernetes-native операторы
Самообучающиеся планировщики запросов
Декларативное управление и оркестрация
Аномальное обнаружение
Multi-cloud и гибридные развертывания
Автоматический мониторинг производительности
Согласованность данных между облаками
Федеративные запросы
SQL-запросы к данным, распределенным по разным хранилищам и
SQL для потоковых данных
Запросы к данным в реальном времени
форматам
Непрерывные запросы на потоковых данных
28.
Производительность SQLОптимизация запросов
План выполнения запроса
Лучшие практики оптимизации
Дерево операций, которые выполняет СУБД для обработки запроса
Выбирайте только необходимые столбцы
Основные операции в планах:
Index Seek — эффективный поиск по индексу
Index Scan — перебор индекса
Table Scan — перебор всей таблицы
Sort, Hash Join, Nested Loops и др.
Изучение плана — ключ к пониманию производительности
Избегайте SELECT * кроме случаев, когда нужны все столбцы
Фильтруйте данные как можно раньше
Используйте WHERE до GROUP BY и HAVING
Избегайте функций на индексированных полях
WHERE YEAR(date) = 2023 → WHERE date BETWEEN '2023-01-01' AND '2023-12-31'
Используйте EXISTS вместо IN для подзапросов
EXISTS останавливается после нахождения первого совпадения
Правильно индексируйте
Типичные проблемы
Индексы по часто используемым в WHERE, JOIN, ORDER BY полям
Отсутствие нужных индексов
Table Scan вместо Index Seek
Неоптимальные JOIN условия
Продвинутые техники
Картезианские произведения, потеря индексов
Функции в WHERE условиях
Предотвращают использование индексов
Партиционирование
Материализованные
Разделение больших таблиц на части
представления
29.
SQL-инъекции и безопасностьЗащита данных и предотвращение атак
Что такое SQL-инъекции
Атака, при которой вредоносный код внедряется в SQL-запросы через
Методы защиты
Параметризованные запросы (Prepared Statements)
пользовательский ввод для изменения логики запроса.
PreparedStatement stmt = conn.prepareStatement("SELECT * FROM users WHERE username = ?
AND password = ?");
Пример уязвимого кода:Атака: Ввод admin' -- в поле username
stmt.setString(1, username);
stmt.setString(2, password);
String query = "SELECT * FROM users WHERE username = '" + username + "' AND password =
'" + password + "'";
ORM (Object-Relational Mapping)
Использование фреймворков, которые автоматически защищают от
инъекций
SELECT * FROM users WHERE username = 'admin' --' AND password = ''
Комментарий -- игнорирует условие проверки пароля
Проверка и очистка входных данных
Валидация типа, длины и формата данных перед использованием
Принцип минимальных привилегий
Пользователи БД должны иметь только необходимые права
Защитные списки (whitelisting)
Типы SQL-инъекций
Разрешение только определенных значений или шаблонов
Прямые инъекции: Внедрение кода напрямую в поля ввода
Слепые инъекции: Атакующий не видит результат запроса, но определяет
Другие аспекты безопасности SQL
database