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 の後ろに書かれた一致条件にしたがって、二つのテーブルを一行ずつ組み合わせます。ここでは、各注文が、その customer_id と id が等しい顧客に結びつけられます。一致しない行は結果から除かれます。何も注文していないMinaは現れません。
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;