CTE

Common Table Expression

Menengah

CTE (Common Table Expression) adalah cara nulis query sementara yang dikasih nama pakai klausa WITH di awal query, supaya SQL yang panjang jadi lebih terstruktur dan gampang dibaca. Anggap aja kayak ngasih nama ke potongan logika SQL yang bisa kamu referensiin di query utama.

Apa Itu CTE?

CTE, atau Common Table Expression, adalah cara mendefinisikan query sementara yang bisa kamu beri nama dan gunakan dalam query utama di bawahnya. Ditulis dengan klausa WITH di bagian paling atas query SQL kamu.

Bayangkan kamu lagi nulis query panjang yang punya beberapa tahap logika - misalnya hitung dulu rata-rata penjualan per kategori, terus filter kategori yang nilainya di atas rata-rata, terus join dengan tabel produk buat detail. Tanpa CTE, semua itu harus kamu masukkan dalam satu blok besar yang susah dibaca. Dengan CTE, setiap tahap logika bisa kamu pisahkan dan beri nama yang deskriptif.

Cara Kerja CTE

Sintaks CTE dimulai dengan keyword WITH, diikuti nama CTE-nya, terus definisi query-nya dalam tanda kurung. Setelah itu baru query utama yang bisa merujuk ke nama CTE tersebut seperti merujuk ke tabel biasa.

Kamu juga bisa mendefinisikan lebih dari satu CTE dalam satu query - cukup pisahkan dengan koma antara satu CTE ke CTE berikutnya sebelum query utama.

CTE vs Alternatif Lainnya

MetodeCara KerjaKelebihanKekurangan
CTEDefinisi sementara di WITH clauseReadable, mudah di-debug, bisa dirujuk berkali-kaliHanya berlaku dalam scope query yang sama
SubqueryQuery bersarang dalam query lainLangsung inline, nggak perlu deklarasi terpisahSusah dibaca kalau berlapis-lapis
Temp TableTabel sementara yang disimpan di sesiBisa dipakai berulang lintas query berbedaPerlu CREATE dan DROP eksplisit
ViewTersimpan permanen di databaseBisa dipakai siapa aja yang punya aksesPerlu hak akses DDL buat membuat atau mengubah

Kapan Pakai CTE?

Query yang punya beberapa tahap logika. Daripada nulis subquery berlapis yang bikin pusing, pisahkan setiap tahap jadi CTE dengan nama yang jelas. Hasilnya jauh lebih mudah di-review dan di-debug.

Kalkulasi yang dirujuk lebih dari sekali. Tanpa CTE, kamu harus duplikat subquery yang sama di beberapa tempat. Dengan CTE, definisi sekali dan bisa dipakai berkali-kali dalam query yang sama.

Recursive CTE. Ini fitur khusus yang membedakan CTE dari subquery biasa - kamu bisa nulis query yang memanggil dirinya sendiri buat traversal struktur hierarki kayak org chart atau kategori bersarang.

CTE dan Keterbacaan Kode

Salah satu alasan utama data analyst suka pakai CTE adalah keterbacaan. SQL yang panjang tapi terstruktur dengan CTE bernama jelas jauh lebih gampang di-review, di-maintain, dan di-debug dibanding satu blok besar tanpa struktur.

Kalau kamu kerja dalam tim atau kode SQL-mu bakal dibaca orang lain, investasi waktu buat naming CTE dengan baik itu worth it. Nama kayak sales_by_category, top_performers, atau monthly_summary jauh lebih informatif daripada cte1, cte2, cte3.

Secara performa, database modern biasanya punya dua cara memperlakukan CTE: ada yang materialisasi (eksekusi sekali, hasilnya disimpan sementara) dan ada yang inline (diperlakukan kayak subquery biasa, dioptimasi bersama query utama). Perilaku defaultnya tergantung database yang kamu pakai - PostgreSQL, BigQuery, dan Snowflake punya pendekatan yang berbeda.

Lanjut Latihan

Udah paham CTE? Lanjut latihan SQL dan Excel yuk!

Latihan interaktif, langsung di browser.

Mulai Latihan →