Study
SQL

Self-JOIN & CTE (WITH)

Penjelasan

Self-JOIN adalah JOIN biasa, tapi tabelnya di-JOIN dengan DIRINYA SENDIRI — dipakai kalau satu tabel punya relasi ke tabel itu sendiri (mis. kolom `manager_id` di tabel `employees` yang merujuk ke `id` di tabel yang sama). Wajib pakai alias berbeda untuk membedakan "peran" tabel di kedua sisi JOIN. CTE (Common Table Expression, ditulis dengan `WITH nama AS (...)`) mendefinisikan query sementara yang bisa dipakai seperti tabel biasa di query utama — berguna untuk memecah query kompleks jadi bagian-bagian yang lebih mudah dibaca, dibanding menumpuk subquery bersarang.

Contoh Konsep

-- Self-JOIN: cari nama karyawan beserta nama manajernya
SELECT e.name AS karyawan, m.name AS manajer
FROM employees AS e
LEFT JOIN employees AS m ON e.manager_id = m.id;

-- CTE: pecah query kompleks jadi lebih terbaca
WITH ringkasan_kategori AS (
    SELECT category, COUNT(*) AS jumlah
    FROM products
    GROUP BY category
)
SELECT * FROM ringkasan_kategori
WHERE jumlah > 10;

Praktikum

Diberikan tabel 'categories' dengan kolom id, name, parent_id (merujuk ke id kategori induk di tabel yang sama). Tulis query self-JOIN untuk menampilkan nama kategori beserta nama kategori induknya.

Editor Latihan

Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.

Tips

Pakai CTE (`WITH`) kalau sebuah subquery dipakai BERKALI-KALI di query yang sama, atau kalau query-nya sudah terlalu bersarang untuk dibaca nyaman — CTE membuatnya terbaca dari atas ke bawah seperti langkah-langkah, bukan dari dalam ke luar.