Основы и SELECT
SQL для новичков: основы и SELECT¶
Понятный старт по SQL: как читать данные, фильтровать, сортировать и ограничивать выдачу.
Кому подойдет¶
- Если вы никогда не писали SQL или писали пару SELECT.
- Если хотите понимать запросы на работе и не бояться JOIN и GROUP BY.
- Если используете PostgreSQL / MySQL / SQLite / SQL Server: база везде одинаковая.
Что такое SQL простыми словами¶
SQL (Structured Query Language) — язык, с помощью которого мы просим базу данных:
- показать данные (
SELECT), - добавить/изменить/удалить (
INSERT,UPDATE,DELETE), - создать структуру (
CREATE TABLE), - настроить доступы (
GRANT) и т.д.
SQL — декларативный: вы говорите что хотите получить, а не как это делать пошагово.
Мини-набор данных (будем использовать в примерах)¶
Скопируйте блоки ниже в любую SQL-СУБД. Мелкие отличия в типах дат возможны, но суть та же.
Таблицы¶
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
created_at TIMESTAMP NOT NULL
);
CREATE TABLE products (
id INT PRIMARY KEY,
name VARCHAR(80) NOT NULL,
price DECIMAL(10,2) NOT NULL
);
CREATE TABLE orders (
id INT PRIMARY KEY,
user_id INT NOT NULL,
status VARCHAR(20) NOT NULL,
created_at TIMESTAMP NOT NULL
);
CREATE TABLE order_items (
order_id INT NOT NULL,
product_id INT NOT NULL,
qty INT NOT NULL,
price DECIMAL(10,2) NOT NULL,
PRIMARY KEY (order_id, product_id)
);
Данные¶
INSERT INTO users (id, name, email, created_at) VALUES
(1, 'Анна', 'anna@example.com', '2026-01-10 10:00:00'),
(2, 'Борис', 'boris@example.com', '2026-01-11 12:30:00'),
(3, 'Хлоя', 'chloe@example.com', '2026-01-12 09:15:00');
INSERT INTO products (id, name, price) VALUES
(1, 'Клавиатура', 49.90),
(2, 'Мышь', 19.90),
(3, 'Монитор', 199.00),
(4, 'Кабель USB-C', 9.90);
INSERT INTO orders (id, user_id, status, created_at) VALUES
(1001, 1, 'paid', '2026-01-20 14:00:00'),
(1002, 1, 'new', '2026-01-22 18:10:00'),
(1003, 2, 'canceled', '2026-01-23 09:05:00');
INSERT INTO order_items (order_id, product_id, qty, price) VALUES
(1001, 1, 1, 49.90),
(1001, 2, 2, 19.90),
(1002, 3, 1, 199.00),
(1003, 4, 3, 9.90),
(1003, 2, 1, 19.90);
Таблица = колонки (поля) + строки (записи).
SELECT: выбрать данные из таблицы¶
Самый базовый запрос:
SELECT— что выбратьFROM— из какой таблицы*— все колонки
Совет новичку: в реальных проектах лучше не злоупотреблять SELECT *, а явно указывать поля — так понятнее и безопаснее.
Псевдонимы (alias) для читаемости¶
AS можно часто опускать: FROM users u.
WHERE: фильтруем строки¶
1) Равно / не равно / больше / меньше¶
2) AND / OR / NOT¶
То же проще через BETWEEN:
BETWEENвключает границы диапазона.
3) IN: значение входит в список¶
ORDER BY: сортировка¶
ASC— по возрастанию (по умолчанию)DESC— по убыванию
Сортировка по нескольким полям:
LIMIT / OFFSET: показать кусочек¶
Пагинация:
В SQL Server используется другая форма, но идея та же: ограничить выдачу.
DISTINCT: убрать дубликаты¶
Например, список статусов заказов:
NULL: нет значения (это не ноль и не пустая строка)¶
Так нельзя:
Правильно:
И наоборот:
Логический порядок выполнения SELECT¶
Мы пишем запрос сверху вниз, но логически он выполняется в другом порядке.
FROM/JOIN → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT.
Это важно, когда кажется, что SELECT "не видит" WHERE или HAVING — просто вспомните порядок.