Lembar Contekan SQL Joins
Referensi SQL joins yang bisa dicari dan dicetak: inner, left, right, full, anti, dan semi join, self join, ON vs WHERE, dan LATERAL. Gratis.
Basic join types
9SELECT * FROM a INNER JOIN b ON a.id = b.a_id;
SELECT * FROM a LEFT JOIN b ON a.id = b.a_id;
SELECT * FROM a RIGHT JOIN b ON a.id = b.a_id;
SELECT * FROM a FULL OUTER JOIN b ON a.id = b.a_id;
JOIN = INNER JOIN
LEFT OUTER JOIN = LEFT JOIN
LEFT JOIN ... UNION ... RIGHT JOIN ...
ON a.id = b.a_id AND a.type = b.type
ON a.qty BETWEEN p.min_qty AND p.max_qty
Anti-joins (no match)
8LEFT JOIN b ON a.id = b.a_id WHERE b.a_id IS NULL
WHERE NOT EXISTS (SELECT 1 FROM b WHERE b.a_id = a.id)
WHERE a.id NOT IN (SELECT a_id FROM b)
WHERE a.id NOT IN (SELECT a_id FROM b WHERE a_id IS NOT NULL)
RIGHT JOIN a ... WHERE a.id IS NULL
SELECT id FROM a EXCEPT SELECT a_id FROM b;
users without orders = LEFT JOIN + IS NULL
Prefer NOT EXISTS over NOT IN
Semi-joins (has a match)
8WHERE EXISTS (SELECT 1 FROM b WHERE b.a_id = a.id)
WHERE a.id IN (SELECT a_id FROM b)
JOIN b ... GROUP BY a.id
SELECT DISTINCT a.* FROM a JOIN b ON ...
EXISTS stops at the first match
EXISTS (SELECT 1 ...) vs (SELECT * ...)
IN: uncorrelated / EXISTS: correlated
users WITH orders = EXISTS subquery
Self joins
8FROM emp e JOIN emp m ON e.manager_id = m.id
FROM emp e LEFT JOIN emp m ON e.manager_id = m.id
SELECT e.name, m.name AS manager FROM ...
ON a.id < b.id
ON a.id <> b.id
ON b.day = a.day + INTERVAL 1 DAY
ON a.city = b.city AND a.id <> b.id
WITH RECURSIVE tree AS (... UNION ALL ...)
Cross & multi-table joins
8SELECT * FROM sizes CROSS JOIN colors;
FROM sizes, colors
FROM users u JOIN orders o ON ... JOIN items i ON ...
JOIN dates d CROSS JOIN users u LEFT JOIN ...
u LEFT JOIN o ON ... LEFT JOIN i ON i.o_id = o.id
u LEFT JOIN o ... INNER JOIN i ON i.o_id = o.id
FROM a JOIN (b LEFT JOIN c ON ...) ON ...
Written order is logical, not execution order
ON vs WHERE (the gotcha)
8LEFT JOIN b ON a.id = b.a_id AND b.status = 1
LEFT JOIN b ON a.id = b.a_id WHERE b.status = 1
WHERE b.a_id IS NULL OR b.status = 1
LEFT JOIN b ON ... AND a.type = 'x'
WHERE a.type = 'x'
INNER JOIN: ON and WHERE are equivalent
COALESCE(b.total, 0)
COUNT(b.id) vs COUNT(*)
USING, NATURAL & set ops
9JOIN b USING (user_id)
USING outputs ONE shared column
NATURAL JOIN b
Avoid NATURAL JOIN in production
SELECT ... UNION SELECT ...
UNION ALL
JOIN adds columns, UNION adds rows
INTERSECT
UNION needs same column count and types
LATERAL & performance
9CROSS JOIN LATERAL (SELECT ... WHERE b.a_id = a.id LIMIT 3) t
LEFT JOIN LATERAL (...) t ON TRUE
CROSS APPLY / OUTER APPLY
LATERAL sees columns of preceding tables
CREATE INDEX idx ON orders (user_id);
EXPLAIN SELECT ...;
Filter early: join the smallest set first
ON DATE(a.created_at) = b.day
Join on same-type, same-collation columns
Tidak ada entri yang cocok dengan “:q”.
Tentang Lembar Contekan SQL Joins
Contekan SQL joins ini melakukan satu hal secara menyeluruh: menjelaskan setiap cara menggabungkan tabel. Delapan bagian mencakup jenis join dasar, anti-join untuk baris tanpa kecocokan, semi-join untuk baris yang memang memiliki kecocokan, self join, cross join dan join multi-tabel, jebakan klasik ON versus WHERE, USING, NATURAL dan operasi set, serta LATERAL join dengan catatan performa.
Join adalah tempat hasil SQL diam-diam menjadi salah: LEFT JOIN yang difilter di klausa WHERE diam-diam berubah menjadi INNER JOIN, dan NOT IN dengan NULL tidak mengembalikan apa pun. Jebakan tersebut mendapat barisnya sendiri di sini, berdampingan dengan pola yang benar untuk digunakan sebagai gantinya.
Seperti setiap contekan dalam grup ini, gratis dan berjalan di sisi klien: filter baris secara langsung dengan kotak pencarian, berpindah antar bagian dengan daftar isi yang menempel, salin statement apa pun dengan satu klik dan cetak halaman untuk referensi di meja kerja Anda.
Cara menggunakan Lembar Contekan SQL Joins
- Buka contekan dan tinjau bagian-bagiannya, dari Basic join types hingga LATERAL & performance.
- Cari kata kunci seperti LEFT JOIN, EXISTS atau NOT IN untuk memfilter setiap baris secara langsung.
- Baca bagian ON vs WHERE sebelum men-debug LEFT JOIN yang mengembalikan terlalu sedikit baris.
- Klik statement atau ikon salinnya untuk menyalin SQL ke clipboard Anda.
- Gunakan Cetak untuk salinan kertas dari referensi join lengkap.