Сопоставляй данные из двух таблиц с помощью INNER JOIN, читаемых псевдонимов и точного условия соединения.
Открыть этот урок в KodokonНастоящая база данных никогда не хранит всё в одной таблице: клиенты - в одной, их заказы - в другой. Чтобы попрактиковаться в этом модуле, открой sqliteonline.com в браузере (устанавливать ничего не нужно) или запусти инструмент sqlite3 в терминале. Сначала вставь скрипт ниже: он создаёт две таблицы, которые мы используем в этом уроке.
CREATE TABLE customers (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
city TEXT
);
CREATE TABLE orders (
id INTEGER PRIMARY KEY,
customer_id INTEGER NOT NULL,
amount REAL NOT NULL,
ordered_at TEXT NOT NULL
);
INSERT INTO customers (id, name, city) VALUES
(1, 'Alice', 'Lyon'),
(2, 'Karim', 'Paris'),
(3, 'Mina', 'Nantes');
INSERT INTO orders
(id, customer_id, amount, ordered_at)
VALUES
(1, 1, 49.90, '2026-06-01'),
(2, 1, 15.00, '2026-06-12'),
(3, 2, 120.50, '2026-06-15');INNER JOIN собирает две таблицы строка за строкой по условию совпадения, записанному после ON. Здесь каждый заказ связан с клиентом, чей id равен его customer_id. Строки без совпадения выпадают из результата: Мина, которая ничего не заказала, не появится.
SELECT customers.name, orders.amount
FROM orders
INNER JOIN customers
ON customers.id = orders.customer_id;Повторять полные имена таблиц быстро становится нечитаемо. Псевдоним, объявленный через AS, переименовывает таблицу на время запроса. Всегда добавляй префикс к неоднозначным столбцам: id есть в обеих таблицах, поэтому пиши c.id или o.id, но никогда просто id.
SELECT c.name, o.amount, o.ordered_at
FROM orders AS o
INNER JOIN customers AS c
ON c.id = o.customer_id
WHERE o.amount > 20
ORDER BY o.amount DESC;