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 — внешние ключи