🧾 Запросы и операторы SQL / PostgreSQL
1. 🔍 Основные запросы (DML)
SELECT
SELECT столбцы FROM таблица WHERE условие;
SELECT *
— выбрать все столбцыSELECT name, age
— выбрать конкретные столбцы
WHERE
WHERE условие_фильтрации
Пример:
SELECT * FROM users WHERE age > 25;
ORDER BY
Сортировка:
ORDER BY столбец [ASC | DESC]
Пример:
SELECT * FROM users ORDER BY salary DESC;
LIMIT / OFFSET
Ограничение выборки:
LIMIT количество
OFFSET пропустить_записей
Пример:
SELECT * FROM users LIMIT 10 OFFSET 5;
DISTINCT
Уникальные значения:
SELECT DISTINCT столбец
Пример:
SELECT DISTINCT country FROM users;
2. ✏️ Вставка, обновление и удаление (DML)
INSERT INTO
Вставка данных:
INSERT INTO таблица (столбцы) VALUES (значения);
Пример:
INSERT INTO users (name, age) VALUES ('Alice', 30);
UPDATE
Обновление записей:
UPDATE таблица SET столбец = значение WHERE условие;
Пример:
UPDATE users SET age = 31 WHERE name = 'Alice';
DELETE
Удаление записей:
DELETE FROM таблица WHERE условие;
Пример:
DELETE FROM users WHERE id = 5;
3. 🔄 Агрегатные функции
Функция | Описание |
---|---|
COUNT() |
Считает количество строк |
SUM() |
Сумма значений |
AVG() |
Среднее значение |
MIN() |
Минимальное значение |
MAX() |
Максимальное значение |
Пример:
SELECT COUNT(*) FROM users;
SELECT AVG(age) FROM users WHERE gender = 'female';
GROUP BY
Группировка:
SELECT страна, COUNT(*)
FROM пользователи
GROUP BY страна;
HAVING
Фильтр после группировки:
SELECT country, COUNT(*)
FROM users
GROUP BY country
HAVING COUNT(*) > 10;
4. 🔗 Объединение таблиц (JOIN)
Тип JOIN | Описание |
---|---|
INNER JOIN |
Пересечение (общие записи) |
LEFT JOIN |
Все из левой таблицы + совпадения справа |
RIGHT JOIN |
Все из правой таблицы + совпадения слева |
FULL JOIN |
Все строки из обеих таблиц |
CROSS JOIN |
Декартово произведение |
Пример:
SELECT users.name, orders.total
FROM users
LEFT JOIN orders ON users.id = orders.user_id;
5. 📁 Управление базами данных и таблицами (DDL)
CREATE TABLE
Создание таблицы:
CREATE TABLE имя (
столбец тип [ограничения]
);
Пример:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
age INT
);
ALTER TABLE
Изменение структуры:
ALTER TABLE имя ADD COLUMN имя_столбца тип;
Пример:
ALTER TABLE users ADD COLUMN email TEXT;
DROP TABLE
Удаление таблицы:
DROP TABLE имя;
6. 🔐 Ограничения (Constraints)
Ограничение | Описание |
---|---|
PRIMARY KEY |
Уникальный ключ (NOT NULL) |
FOREIGN KEY |
Связь с другой таблицей |
UNIQUE |
Уникальные значения |
NOT NULL |
Не может быть пустым |
CHECK(условие) |
Проверка условия |
DEFAULT значение |
Значение по умолчанию |
Пример:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
email TEXT UNIQUE NOT NULL,
age INT CHECK (age >= 0)
);
7. 🧮 Операторы сравнения и условия
Оператор | Описание |
---|---|
= |
Равно |
<> или != |
Не равно |
< , > |
Меньше, больше |
<= , >= |
Меньше/равно, больше/равно |
BETWEEN |
В диапазоне |
IN |
В списке |
LIKE |
Поиск по шаблону |
ILIKE |
Регистронезависимый LIKE |
IS NULL |
Проверка на NULL |
Примеры:
SELECT * FROM users WHERE age BETWEEN 20 AND 30;
SELECT * FROM users WHERE name IN ('Alice', 'Bob');
SELECT * FROM users WHERE name LIKE 'A%';
SELECT * FROM users WHERE name ILIKE 'alice';
8. 🧠 Подзапросы
Подзапрос в скобках:
SELECT * FROM users WHERE id IN (SELECT user_id FROM orders WHERE total > 100);
9. 📅 Работа с датами и временем
Функция / Выражение | Описание |
---|---|
CURRENT_DATE |
Сегодняшняя дата |
CURRENT_TIME |
Текущее время |
NOW() |
Текущая дата и время |
EXTRACT(YEAR/MONTH/DAY FROM date) |
Извлечение части даты |
AGE(date1, date2) |
Разница между датами |
Пример:
SELECT EXTRACT(YEAR FROM birthdate) AS year FROM users;
SELECT AGE(NOW(), birthdate) FROM users;
10. 🧩 Полезные функции и выражения
Функция | Описание |
---|---|
COALESCE(a, b) |
Возвращает первое не-NULL значение |
NULLIF(a, b) |
Возвращает NULL, если a = b |
CASE WHEN ... END |
Условие "если-то-иначе" |
CONCAT(str1, str2) |
Склеивает строки |
Пример:
SELECT COALESCE(phone, 'Нет телефона') FROM users;
SELECT name,
CASE WHEN age < 18 THEN 'Молодой'
ELSE 'Взрослый'
END AS category
FROM users;
11. 🛠 Индексы и производительность
Создать индекс:
CREATE INDEX idx_name ON таблица (столбец);
Пример:
CREATE INDEX idx_email ON users (email);
12. 🧩 CTE и оконные функции
CTE (Common Table Expression):
WITH cte_name AS (
SELECT ...
)
SELECT * FROM cte_name;
Оконные функции:
ROW_NUMBER() OVER (PARTITION BY ... ORDER BY ...)
RANK()
DENSE_RANK()
Пример:
SELECT name, salary,
RANK() OVER (ORDER BY salary DESC) AS ranking
FROM employees;
13. 📦 Прочие полезности
- UNION — объединяет результаты двух запросов
- INTERSECT — пересечение результатов
- EXCEPT — вычитание результатов
Пример:
SELECT name FROM table1
UNION
SELECT name FROM table2;