SQL (Structured Query Language) — это стандартизированный язык программирования, предназначенный для работы с реляционными базами данных. SQL позволяет создавать, читать, обновлять и удалять данные, а также управлять структурой самой базы данных и контролировать доступ к информации.
Декларативный язык
В отличие от императивных языков (например, Python или Java), SQL описывает что нужно получить, а не как это сделать. СУБД сама оптимизирует выполнение запроса.
Стандартизация
Существуют стандарты ANSI SQL и ISO SQL, но большинство СУБД (PostgreSQL, MySQL, Oracle) имеют свои диалекты с дополнительными возможностями.
Многофункциональность
SQL позволяет:
Операции для работы с данными:
-- SELECT (получение данных)
SELECT name, email FROM users WHERE age > 25 ORDER BY name;
-- INSERT (добавление данных)
INSERT INTO products (name, price) VALUES ('Smartphone', 599.99);
-- UPDATE (изменение данных)
UPDATE employees SET salary = salary * 1.1 WHERE department = 'Engineering';
-- DELETE (удаление данных)
DELETE FROM logs WHERE created_at < '2023-01-01';
Операции для управления структурой БД:
-- CREATE (создание объектов)
CREATE TABLE customers (
id INT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE
);
-- ALTER (изменение структуры)
ALTER TABLE products ADD COLUMN description TEXT;
-- DROP (удаление объектов)
DROP TABLE temp_data;
Управление доступом:
-- GRANT (предоставление прав)
GRANT SELECT, INSERT ON employees TO hr_manager;
-- REVOKE (отзыв прав)
REVOKE DELETE ON customers FROM support_team;
Транзакции
Группа операций, выполняемых как единое целое:
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
Индексы
Ускоряют поиск данных, но замедляют вставку:
CREATE INDEX idx_customer_name ON customers(name);
Соединения (JOINs)
Позволяют комбинировать данные из нескольких таблиц:
SELECT o.order_id, c.name
FROM orders o
JOIN customers c ON o.customer_id = c.id;
SELECT
d.name AS department,
COUNT(e.id) AS employee_count,
AVG(e.salary) AS avg_salary
FROM
employees e
JOIN
departments d ON e.department_id = d.id
WHERE
e.hire_date > '2020-01-01'
GROUP BY
d.name
HAVING
COUNT(e.id) > 5
ORDER BY
avg_salary DESC;
SQL — это мощный и универсальный язык для работы с реляционными базами данных, который сочетает в себе простоту декларативного синтаксиса с богатыми возможностями для манипуляции данными. Понимание SQL является обязательным навыком для любого специалиста, работающего с данными, от аналитиков до backend-разработчиков. Современные СУБД расширяют стандартный SQL, добавляя специализированные функции для работы с JSON, геоданными и другими сложными типами данных.