Шпаргалка по SQL
Последнее обновление
Выборка данных (SELECT)
Основа SQL: чтение строк из одной или нескольких таблиц.
| Операция | Синтаксис |
|---|---|
| Выбрать все столбцы | SELECT * FROM users; |
| Выбрать определённые столбцы | SELECT id, name FROM users; |
| Переименовать столбец (псевдоним) | SELECT name AS full_name FROM users; |
| Уникальные значения | SELECT DISTINCT country FROM users; |
| Ограничить количество строк | SELECT * FROM users LIMIT 10; |
| Пропустить, затем ограничить (постраничный вывод) | SELECT * FROM users LIMIT 10 OFFSET 20; |
| Подсчитать строки | SELECT COUNT(*) FROM users; |
Фильтрация строк (WHERE)
Сужает набор строк, которые возвращает запрос.
| Операция | Синтаксис |
|---|---|
| Равенство / сравнение | WHERE age >= 18 |
| Несколько условий | WHERE age >= 18 AND country = 'US' |
| Любое из условий | WHERE role = 'admin' OR role = 'owner' |
| Вхождение в набор | WHERE country IN ('US', 'CA', 'MX') |
| В диапазоне | WHERE price BETWEEN 10 AND 50 |
| Совпадение по шаблону | WHERE email LIKE '%@gmail.com' |
| Равно / не равно NULL | WHERE deleted_at IS NULL |
| Отрицание | WHERE status NOT IN ('archived') |
Сортировка и группировка
| Операция | Синтаксис |
|---|---|
| Сортировка по возрастанию (по умолчанию) | ORDER BY created_at |
| Сортировка по убыванию | ORDER BY created_at DESC |
| Сортировка по нескольким столбцам | ORDER BY country, name DESC |
| Группировка строк | SELECT country, COUNT(*) FROM users GROUP BY country; |
| Фильтрация групп | GROUP BY country HAVING COUNT(*) > 100 |
Соединения (JOIN)
Объединяет строки из двух таблиц по совпадающему столбцу.
| Тип соединения | Что возвращает | Синтаксис |
|---|---|---|
| INNER JOIN | Только строки, которые совпадают в обеих таблицах | FROM orders o INNER JOIN users u ON o.user_id = u.id |
| LEFT JOIN | Все строки слева + совпадения (иначе NULL) | FROM users u LEFT JOIN orders o ON o.user_id = u.id |
| RIGHT JOIN | Все строки справа + совпадения | FROM orders o RIGHT JOIN users u ON o.user_id = u.id |
| FULL OUTER JOIN | Все строки с обеих сторон | FROM a FULL OUTER JOIN b ON a.id = b.a_id |
| CROSS JOIN | Все комбинации (декартово произведение) | FROM sizes CROSS JOIN colors |
| Самосоединение | Таблица, соединённая сама с собой | FROM employees e JOIN employees m ON e.manager_id = m.id |
Агрегатные функции
Вычисляют одно значение по группе строк.
| Функция | Что делает |
|---|---|
COUNT(*) | Количество строк |
COUNT(col) | Количество значений, не равных NULL |
SUM(col) | Сумма числового столбца |
AVG(col) | Среднее значение |
MIN(col) / MAX(col) | Наименьшее / наибольшее значение |
STRING_AGG(col, ',') | Объединение значений (Postgres; GROUP_CONCAT в MySQL) |
Оконные функции
Вычисляют значения по набору строк, не схлопывая их в одну.
| Функция | Синтаксис |
|---|---|
| Номер строки | ROW_NUMBER() OVER (ORDER BY score DESC) |
| Ранг (с пропусками) | RANK() OVER (PARTITION BY country ORDER BY score DESC) |
| Плотный ранг | DENSE_RANK() OVER (ORDER BY score DESC) |
| Нарастающий итог | SUM(amount) OVER (ORDER BY created_at) |
| Предыдущая / следующая строка | LAG(score) OVER (ORDER BY date), LEAD(score) OVER (...) |
Изменение данных (INSERT, UPDATE, DELETE)
| Операция | Синтаксис |
|---|---|
| Вставить строку | INSERT INTO users (name, email) VALUES ('Ada', 'ada@x.com'); |
| Вставить несколько строк | INSERT INTO users (name) VALUES ('Ada'), ('Alan'); |
| Обновить строки | UPDATE users SET active = true WHERE id = 1; |
| Удалить строки | DELETE FROM users WHERE active = false; |
| Upsert (Postgres/SQLite) | INSERT ... ON CONFLICT (email) DO UPDATE SET name = EXCLUDED.name; |
Определение таблиц (DDL)
| Операция | Синтаксис |
|---|---|
| Создать таблицу | CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT NOT NULL); |
| Добавить столбец | ALTER TABLE users ADD COLUMN age INTEGER; |
| Удалить столбец | ALTER TABLE users DROP COLUMN age; |
| Удалить таблицу | DROP TABLE users; |
| Создать индекс | CREATE INDEX idx_users_email ON users (email); |
| Внешний ключ | FOREIGN KEY (user_id) REFERENCES users (id) |
Каждый SQL-запрос, конструкция и соединение, которые вам нужны, на одной странице. Эта шпаргалка по SQL - быстрый справочник по выборке и изменению реляционных данных: конструкции SELECT, четыре типа JOIN, агрегация, а также DDL и DML для создания и обновления таблиц.
Здесь приведён стандартный синтаксис ANSI SQL, который работает в PostgreSQL, MySQL, SQLite и SQL Server, если не указано иное. Копируйте нужное или попробуйте каждый запрос вживую в playground для SQL - без установки базы данных.
Часто задаваемые вопросы по шпаргалке SQL
Эта шпаргалка по SQL бесплатна?
Работает ли это для MySQL, PostgreSQL и SQLite?
SELECT, WHERE, JOIN, GROUP BY и DDL, показанный здесь, - это стандартный ANSI SQL, который одинаково работает в MySQL, PostgreSQL, SQLite и SQL Server. Несколько продвинутых возможностей отличаются по диалектам - чаще всего это upsert и агрегация строк - и в соответствующих строках это отмечено.В чём разница между INNER JOIN и LEFT JOIN?
INNER JOIN возвращает только строки, у которых есть совпадение в обеих таблицах. LEFT JOIN возвращает каждую строку из левой (первой) таблицы, подставляя NULL в столбцы из правой таблицы, когда совпадения нет - удобно, когда нужны все пользователи, даже если у некоторых нет заказов.Можно ли практиковать эти команды SQL онлайн?
SELECT до соединений и оконных функций.