เชื่อมโยงข้อมูลจากสองตารางด้วย 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 ของมัน แถวที่ไม่มีคู่ที่ตรงกันจะถูกตัดออกจากผลลัพธ์ Mina ที่ไม่ได้สั่งซื้ออะไรเลยจึงไม่ปรากฏ
SELECT customers.name, orders.amount
FROM orders
INNER JOIN customers
ON customers.id = orders.customer_id;การเขียนชื่อตารางเต็ม ๆ ซ้ำ ๆ จะทำให้อ่านยากอย่างรวดเร็ว นามแฝง (alias) ที่ประกาศด้วย 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;c.id แทน id ในคิวรีที่เชื่อม customers กับ orders?