Изучаем SQL — быстрый минимум

Основы

Что такое SQL

SQL — язык для работы с реляционными базами данных. Данные хранятся в таблицах (как Excel). Каждая таблица — строки и столбцы.

Представим таблицу users:

id name city age
1 Анна Москва 28
2 Иван СПб 34
3 Мария Москва 22

SELECT — читать данные

SELECT * FROM users; -- все столбцы 
SELECT name, city FROM users; -- только нужные

Символ * означает «все столбцы». Всегда заканчивай запрос точкой с запятой ;

ORDER BY — сортировка

SELECT name, age FROM users 
ORDER BY age DESC; -- DESC = по убыванию, ASC = по возрастанию

LIMIT — ограничение строк

SELECT * FROM users LIMIT 10; -- первые 10 строк

Фильтрация

WHERE — фильтрация

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

Операторы сравнения

Оператор Смысл Пример
= равно age = 25
!= / <> не равно city != 'СПб'
> < >= <= больше/меньше age >= 18
BETWEEN диапазон age BETWEEN 20 AND 30
IN из списка city IN ('Москва','СПб')
LIKE поиск по шаблону name LIKE 'Ан%'
IS NULL пустое значение city IS NULL

AND / OR / NOT

SELECT * FROM users WHERE city = 'Москва' AND age > 25; 
SELECT * FROM users WHERE city = 'Москва' OR city = 'СПб';

LIKE 'Ан%' — имена начинающиеся на «Ан». % = любые символы.

Агрегация

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

Функция Что делает
COUNT(*) количество строк
SUM(col) сумма значений
AVG(col) среднее значение
MAX(col) максимум
MIN(col) минимум

GROUP BY — группировка

SELECT city, COUNT(*) AS кол_во 
FROM users 
GROUP BY city; 
-- Результат: 
-- Москва | 2 
-- СПб | 1

AS задаёт псевдоним (alias) — новое имя столбца в результате.

HAVING — фильтр после группировки

SELECT city, COUNT(*) AS n 
FROM users 
GROUP BY city 
HAVING COUNT(*) > 1;

WHERE фильтрует строки до группировки, HAVING  после.

Соединения

JOIN объединяет строки из двух таблиц по общему столбцу.

users
id name
1 Анна
2 Иван
orders
id user_id сумма
1 1 500
2 1 200
3 2 800

INNER JOIN — только совпадения

SELECT users.name, orders.сумма 
FROM users 
INNER JOIN orders ON users.id = orders.user_id;

Вернёт только тех пользователей, у которых есть заказы.

LEFT JOIN — все строки из левой таблицы

SELECT users.name, orders.сумма 
FROM users 
LEFT JOIN orders ON users.id = orders.user_id;

Вернёт всех пользователей — даже тех, у кого нет заказов (там будет NULL).

Типы JOIN

Тип Что возвращает
INNER JOIN только совпадающие строки
LEFT JOIN все из левой + совпадения из правой
RIGHT JOIN все из правой + совпадения из левой
FULL JOIN все строки из обеих таблиц

Изменение данных

INSERT — добавить строку

INSERT INTO users (name, city, age) 
VALUES ('Сергей', 'Казань', 30);

UPDATE — изменить данные

UPDATE users 
SET city = 'Новосибирск' 
WHERE id = 2;

Всегда указывай WHERE при UPDATE — иначе изменятся все строки!

DELETE — удалить строку

DELETE FROM users 
WHERE id = 3;

Всегда указывай WHERE при DELETE — иначе удалишь все данные!

CREATE TABLE — создать таблицу

CREATE TABLE products ( 
 id INT PRIMARY KEY, 
 name VARCHAR(100), 
 price DECIMAL(10,2) 
);

ШПАРГАЛКА

Порядок ключевых слов

SELECT столбцы 
FROM таблица 
JOIN другая_таблица ON условие 
WHERE условие_фильтра 
GROUP BY столбец 
HAVING условие_для_групп 
ORDER BY столбец ASC/DESC LIMIT n;

Порядок важен — SQL принимает только такую последовательность.

Пример: всё вместе

SELECT u.name, COUNT(o.id) AS заказов, SUM(o.сумма) AS итого 
FROM users u 
LEFT JOIN orders o ON u.id = o.user_id 
WHERE u.city = 'Москва' 
GROUP BY u.name 
HAVING SUM(o.сумма) > 100 
ORDER BY итого DESC 
LIMIT 5;

Типы данных

Тип Пример
INT целые числа: 1, 42, -5
VARCHAR(n) строка до n символов
TEXT длинный текст
DECIMAL(p,s) число с запятой: 19.99
DATE дата: 2024-01-15
BOOLEAN true / false

 

 

 

Оцените статью
Репост в TG и VK
Алготрейдинг шаг за шагом. Создай торгового робота на Python с нуля по нашим урокам. Автоматизируй торговлю на бирже по собственной стратегии.