Membuat Deret dan Urutan
Buat baris dengan rekursi.
Membuat Deret dan Urutan adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.
Apa Itu Deret yang Dihasilkan?
Terkadang Anda memerlukan daftar angka, tanggal, atau nilai berurutan lainnya yang tidak tersedia dalam tabel mana pun. SQL memungkinkan Anda membuatnya secara langsung menggunakan rekursi atau fungsi bawaan.
Dalam pelajaran ini, Anda akan mempelajari cara menghasilkan urutan menggunakan WITH RECURSIVE — alat ampuh yang memungkinkan kueri merujuk pada keluarannya sendiri.
CTE Rekursif Pertama Anda
CTE rekursif (Ekspresi Tabel Umum) memiliki dua bagian yang digabungkan oleh UNION ALL: kasus dasar yang menghasilkan baris pertama, dan langkah rekursif yang merujuk ke CTE itu sendiri untuk menghasilkan baris berikutnya.
Rekursi berhenti ketika langkah rekursif tidak menghasilkan baris apa pun.
WITH RECURSIVE counter(n) AS (
SELECT 1
UNION ALL
SELECT n + 1 FROM counter WHERE n < 5
)
SELECT n FROM counter;Cara Rekursi Berkembang
Membayangkan setiap langkah secara terpisah akan membantu. Kasus dasar menginisialisasi tabel, lalu setiap putaran rekursif menambahkan satu baris lagi hingga kondisi WHERE tidak lagi terpenuhi.
Untuk kueri WHERE n < 5, mesin menghasilkan baris 1, 2, 3, 4, 5, lalu berhenti karena 5 < 5 bernilai salah.
WITH RECURSIVE steps(n, note) AS (
SELECT 1, 'base case'
UNION ALL
SELECT n + 1, 'recursive step'
FROM steps
WHERE n < 4
)
SELECT n, note FROM steps;Menghasilkan Bilangan Genap
Anda dapat mengubah ukuran langkah cukup dengan menambahkan nilai yang lebih besar dari 1 pada bagian rekursif. Cara ini menghasilkan setiap bilangan genap dari 2 hingga 10.
Polanya selalu: nilai berikutnya = nilai saat ini + langkah.
WITH RECURSIVE evens(n) AS (
SELECT 2
UNION ALL
SELECT n + 2 FROM evens WHERE n < 10
)
SELECT n FROM evens;Menghitung Mundur
Rekursi tidak terbatas pada penghitungan naik. Kurangi, bukan tambahkan, untuk mendapatkan urutan menurun. Pastikan kondisi penghentian menggunakan >, bukan <, agar tidak terjadi perulangan tak terbatas.
WITH RECURSIVE countdown(n) AS (
SELECT 10
UNION ALL
SELECT n - 1 FROM countdown WHERE n > 1
)
SELECT n FROM countdown;Membuat Rentang Tanggal
Salah satu penggunaan CTE rekursif yang paling praktis adalah membuat deret tanggal. Anda memulai dari tanggal tertentu, lalu terus menambahkan satu hari hingga mencapai tanggal akhir.
Cara ini sangat berguna untuk mengisi celah dalam laporan — setiap tanggal tetap muncul meskipun tidak ada data untuk hari tersebut.
WITH RECURSIVE dates(d) AS (
SELECT DATE '2024-01-01'
UNION ALL
SELECT d + INTERVAL '1 day'
FROM dates
WHERE d < DATE '2024-01-07'
)
SELECT d FROM dates;Mengisi Celah Laporan dengan Deret Tanggal
Bayangkan tabel sales yang hanya memiliki baris pada hari ketika terjadi penjualan. Dengan menggabungkan deret tanggal yang dihasilkan ke tabel penjualan menggunakan LEFT JOIN, Anda mendapatkan setiap hari dalam rentang tersebut, dengan NULL untuk hari tanpa penjualan.
WITH RECURSIVE cal(d) AS (
SELECT DATE '2024-03-01'
UNION ALL
SELECT d + INTERVAL '1 day' FROM cal WHERE d < DATE '2024-03-05'
),
sales(sale_date, amount) AS (
VALUES
(DATE '2024-03-01', 100),
(DATE '2024-03-03', 250),
(DATE '2024-03-05', 180)
)
SELECT cal.d, COALESCE(sales.amount, 0) AS amount
FROM cal
LEFT JOIN sales ON cal.d = sales.sale_date
ORDER BY cal.d;Membuat Tabel Perkalian
CTE rekursif dapat membawa beberapa kolom, sehingga Anda dapat membuat keluaran yang lebih kaya. Di sini, indeks baris dan nilai hasil perhitungan dilacak secara bersamaan.
WITH RECURSIVE mult(n, result) AS (
SELECT 1, 1 * 7
UNION ALL
SELECT n + 1, (n + 1) * 7
FROM mult
WHERE n < 10
)
SELECT n, result AS seven_times_n FROM mult;Bilangan Fibonacci
Fibonacci adalah urutan klasik yang setiap bilangannya merupakan jumlah dari dua bilangan sebelumnya: 0, 1, 1, 2, 3, 5, 8 …
CTE rekursif melacak nilai saat ini a dan nilai berikutnya b, lalu menukarnya pada setiap langkah.
WITH RECURSIVE fib(a, b) AS (
SELECT 0, 1
UNION ALL
SELECT b, a + b FROM fib WHERE a < 100
)
SELECT a AS fibonacci FROM fib;Menggunakan generate_series di PostgreSQL
PostgreSQL menyediakan pintasan bawaan bernama generate_series() yang menghasilkan urutan tanpa perlu menulis CTE rekursif. Fungsi ini menerima nilai awal, nilai akhir, dan langkah opsional.
Ini adalah cara paling ringkas untuk menghasilkan rentang angka atau tanggal di PostgreSQL.
SELECT gs AS num
FROM generate_series(1, 10, 2) AS gs;Membuat Interval Bulanan
Berikan interval '1 month' kepada generate_series() untuk membuat kalender bulanan. Cara ini sempurna untuk membuat judul laporan bulanan atau memeriksa bulan mana yang tidak memiliki data.
SELECT gs::DATE AS month_start
FROM generate_series(
'2024-01-01'::DATE,
'2024-06-01'::DATE,
INTERVAL '1 month'
) AS gs;Uji Pengetahuan
Uji pemahaman Anda tentang pembuatan deret dengan CTE rekursif.
Rangkuman: Membuat Deret dan Urutan
Dalam pelajaran ini, Anda mempelajari cara menghasilkan urutan angka dan tanggal tanpa tabel sumber apa pun:
- WITH RECURSIVE — kasus dasar ditambah langkah rekursif yang digabungkan dengan UNION ALL; berhenti ketika langkah rekursif tidak menghasilkan baris apa pun.
- Ukuran langkah fleksibel — tambahkan atau kurangkan nilai apa pun untuk menghitung naik, menghitung mundur, atau melewati nilai tertentu.
- Rentang tanggal — tambahkan interval untuk menghasilkan deret kalender harian, bulanan, atau khusus.
- CTE dengan banyak kolom — bawa status tambahan melewati setiap iterasi untuk menghasilkan keluaran yang lebih kaya, seperti Fibonacci.
- generate_series() — fitur bawaan PostgreSQL untuk membuat urutan angka dan tanggal secara paling ringkas.
Deret yang dihasilkan sangat penting untuk mengisi celah dalam laporan, membuat data pengujian, dan menangani situasi apa pun yang memerlukan rentang nilai lengkap, terlepas dari isi datanya.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Membuat Deret dan Urutan” gratis?
Ya — teks lengkap “Membuat Deret dan Urutan” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Membuat Deret dan Urutan”?
Buat baris dengan rekursi. Kamu berlatih SQL Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai SQL Academy?
Tidak diperlukan pengalaman sebelumnya. SQL Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Membuat Deret dan Urutan” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Academy ini?
Ya. Setiap pelajaran SQL Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Cara Kerja CTE Rekursif
- Menelusuri Pohon Kategori
- Membuat Deret dan Urutan
- Menghindari Perulangan Tak Terbatas