Skip to content

🧾 Запросы и операторы 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;