Шпаргалка по SQL

Основные команды SQL

Выборка определенных данных

SELECT column1, column2 FROM table_name;

Выборка всех данных

SELECT * FROM table_name;

Добавление данных

INSERT INTO table_name (column1, column2) VALUES ('value1', 'value2');

Обновление данных

UPDATE table_name SET column1 = 'value' WHERE condition; 

Удаление данных

DELETE FROM table_name WHERE condition;

Фильтрация данных (WHERE, AND, OR, LIKE, IN, BETWEEN)

Возраст больше 18

SELECT * FROM users WHERE age > 18;

Два условия

SELECT * FROM users WHERE city = 'Москва' AND age > 18;

Начинается с ‘A’

SELECT * FROM users WHERE name LIKE 'A%';

Возраст от 18 до 30

SELECT * FROM users WHERE age BETWEEN 18 AND 30;

Город Москва или Питер

SELECT * FROM users WHERE city IN ('Москва', 'Санкт-Петербург');

Группировка и агрегатные функции (GROUP BY, HAVING, COUNT, SUM, AVG, MAX, MIN)

Количество пользователей в каждом городе

SELECT city, COUNT(*) FROM users GROUP BY city;

Средний возраст > 25

SELECT city, AVG(age) FROM users GROUP BY city HAVING AVG(age) > 25;

Максимальная зарплата

SELECT MAX(salary) FROM employees;

Сумма продаж с 2024 года

SELECT SUM(sales) FROM orders WHERE date >= '2024-01-01';

Сортировка (ORDER BY)

Сортировка по возрасту (по возрастанию)

SELECT * FROM users ORDER BY age ASC;

Сортировка по убыванию

SELECT * FROM users ORDER BY age DESC;

Соединение таблиц (JOIN)

Внутреннее соединение

SELECT users.name, orders.amount
FROM users
JOIN orders ON users.id = orders.user_id;

Левый JOIN (все из users)

SELECT users.name, orders.amount
FROM users
LEFT JOIN orders ON users.id = orders.user_id;

Правый JOIN (все из orders)

SELECT users.name, orders.amount
FROM users
RIGHT JOIN orders ON users.id = orders.user_id; 

Создание и изменение таблиц (CREATE, ALTER, DROP)

Создание таблицы

CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
age INT
); 

Добавление колонки

ALTER TABLE users ADD COLUMN email VARCHAR(100);

Удаление колонки

ALTER TABLE users DROP COLUMN email;

Удаление таблицы

DROP TABLE users;

Работа с индексами (INDEX)

Создание индекса

CREATE INDEX idx_users_name ON users(name);

Удаление индекса

DROP INDEX idx_users_name;

Ограничения (PRIMARY KEY, FOREIGN KEY, UNIQUE, CHECK, DEFAULT)

CREATE TABLE orders (
id SERIAL PRIMARY KEY,
user_id INT REFERENCES users(id),- Внешний ключ
amount DECIMAL(10,2) CHECK (amount > 0), - Ограничение CHECK
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP - Значение по умолчанию 
);

Подзапросы (SUBQUERY)

SELECT * FROM users WHERE id IN (SELECT user_id FROM orders WHERE amount > 1000);

Транзакции (BEGIN, COMMIT, ROLLBACK)

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT; — Завершение транзакции
ROLLBACK; — Откат изменений

От Grizly715