SQL (Structured Query Language) — язык структурированных запросов для управления реляционными базами данных. Декларативность означает: разработчик описывает что нужно получить, а СУБД сама определяет как выполнить запрос (план выполнения). SQL работает с данными в виде таблиц, строк и столбцов.
Основные команды
SQL делится на несколько подъязыков.
DDL (Data Definition Language) — создание структуры: CREATE TABLE, ALTER TABLE, DROP TABLE.
DML (Data Manipulation Language) — работа с данными: SELECT, INSERT, UPDATE, DELETE.
DCL (Data Control Language) — управление правами: GRANT, REVOKE.
TCL (Transaction Control Language) — транзакции: BEGIN, COMMIT, ROLLBACK.
Пример запроса с JOIN:
SELECT u.name, COUNT(o.id) AS order_count
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
WHERE u.created_at > '2024-01-01'
GROUP BY u.id
ORDER BY order_count DESC
LIMIT 10;
История
Реляционная модель данных разработана Эдгаром Коддом (IBM) в 1970 году. SEQUEL (предшественник SQL) создан Дональдом Чемберленом и Рэймондом Бойсом в IBM в 1974 году. Первый SQL-стандарт ANSI принят в 1986 году, ISO — в 1987-м. Последующие стандарты: SQL-92, SQL:1999, SQL:2003, SQL:2011, SQL:2016, SQL:2023.
Популярные СУБД
- MySQL / MariaDB — наиболее распространены в LAMP-стеке.
- PostgreSQL — расширенный SQL, поддержка JSONB, оконные функции, полнотекстовый поиск.
- Percona Server — оптимизированный форк MySQL.
- SQLite — встраиваемая СУБД без сервера, для мобильных и desktop-приложений.
- Microsoft SQL Server — корпоративная СУБД на Windows.
Связь с хостингом
На хостинге MySQL или MariaDB — обязательный компонент LAMP/LEMP-стека. Виртуальный хостинг предоставляет базы данных через phpMyAdmin или ISPmanager. На VPS СУБД устанавливается отдельно и администрируется вручную. Производительность SQL-запросов напрямую влияет на скорость сайта: отсутствие индексов на больших таблицах увеличивает время запроса с миллисекунд до секунд.
Основные операторы SQL
DDL (Data Definition Language): CREATE, ALTER, DROP — структура. DML (Data Manipulation Language): SELECT, INSERT, UPDATE, DELETE — данные. DCL (Data Control Language): GRANT, REVOKE — права. TCL (Transaction Control): BEGIN, COMMIT, ROLLBACK — транзакции. ACID: Atomicity, Consistency, Isolation, Durability.
Оптимизация SQL-запросов
EXPLAIN / EXPLAIN ANALYZE — план выполнения запроса. Индексы: B-Tree (по умолчанию), Hash (точное совпадение), GIN/GiST (полнотекстовый поиск в PostgreSQL). N+1 проблема: вместо цикла SELECT в цикле — JOIN или IN-запрос.
SQL в контексте хостинга
MySQL/MariaDB — стандарт для WordPress, Bitrix. PostgreSQL — для сложных запросов, JSON-данных, геоинформации. SQLite — для мелких приложений на VPS. Оптимальный innodb_buffer_pool_size для MySQL: 60–80% доступной RAM.