52 слов | 1 минута

PostgreSQL: шпаргалка по SQL-запросам

Справочник часто используемых SQL-конструкций в PostgreSQL с примерами.

Выборка данных

-- DISTINCT — без повторений
SELECT DISTINCT email FROM users ORDER BY email;

-- OFFSET — с определённой позиции
SELECT * FROM users OFFSET 10 LIMIT 100;

-- FETCH — аналог LIMIT (стандарт SQL)
SELECT * FROM users OFFSET 10 FETCH FIRST 100 ROWS ONLY;

-- IN — фильтрация по списку значений
SELECT * FROM users WHERE id IN (1, 2, 5);

-- BETWEEN — диапазон значений
SELECT * FROM users WHERE id BETWEEN 1 AND 100;

-- LIKE — поиск по шаблону
-- iLIKE — без учёта регистра
SELECT * FROM users WHERE email LIKE '%test%';
SELECT * FROM users WHERE email ILIKE '%Test%';

-- COALESCE — замена NULL на значение по умолчанию
SELECT COALESCE(email, 'not found') FROM users;

-- HAVING — условие после GROUP BY
SELECT email, COUNT(*) FROM users
GROUP BY email
HAVING COUNT(*) > 10;

Агрегатные функции

SELECT
    MIN(price),
    MAX(price),
    AVG(price),
    ROUND(AVG(price), 2),
    SUM(price)
FROM products;

Работа с датой и временем

-- Текущая дата и время
SELECT NOW();

-- Прибавить интервал
SELECT NOW() + INTERVAL '1 year';
SELECT NOW() - INTERVAL '30 days';

-- Извлечь часть даты
SELECT EXTRACT(YEAR FROM NOW());
SELECT EXTRACT(MONTH FROM created_at) FROM orders;

-- Возраст (разница между датами)
SELECT AGE(NOW(), created_at) FROM users;

ON CONFLICT DO

-- Ничего не делать при конфликте
INSERT INTO users(id, email) VALUES(1, 'test@test.ru')
ON CONFLICT (id) DO NOTHING;

-- Обновить поле при конфликте (upsert)
INSERT INTO users(id, email) VALUES(1, 'new@test.ru')
ON CONFLICT (id) DO UPDATE SET email = EXCLUDED.email;

RETURNING

Возвращает данные из изменённых строк в одном запросе:

-- Вернуть ID вставленной записи
INSERT INTO clients(name) VALUES('Иван') RETURNING id;

-- Вернуть все удалённые строки
DELETE FROM customers WHERE inactive = true RETURNING *;

Foreign Key

Внешний ключ обеспечивает ссылочную целостность между таблицами:

CREATE TABLE orders (
    id SERIAL PRIMARY KEY,
    user_id INT REFERENCES users(id) ON DELETE CASCADE,
    total NUMERIC
);

Подробнее: Документация PostgreSQL — внешние ключи