SQL adalah bahasa deklaratif yang relatif terstandar, tetapi setiap engine punya dialek, daftar fungsi, dan batasan sendiri. Course ini memakai tiga engine: PostgreSQL sebagai acuan dialek yang paling lengkap, SQLite untuk lingkungan ringan tanpa server, dan DuckDB untuk beban kerja analitik berbasis kolom. Saat menulis query untuk produksi, kita perlu halaman referensi yang tepat untuk engine yang menjalankan query tersebut — bukan hasil pencarian umum yang mencampur dialek. Chapter ini mengumpulkan halaman-halaman resmi yang paling sering dibuka saat bekerja dengan SQL, ditutup ringkasan perbedaan dialek yang paling sering menjegal migrasi antar engine.
Referensi SQL PostgreSQL #
Dokumentasi PostgreSQL menyimpan materi SQL di dua tempat: tutorial berjenjang untuk belajar, dan SQL Language Reference untuk pencarian sintaks. Keduanya saling melengkapi — tutorial menjelaskan alur berpikirnya, sedangkan reference menjawab detail klausa. Pola praktisnya: baca tutorial sekali untuk konsep, lalu bekerja sepenuhnya di halaman reference.
| Sumber | Untuk apa | Tingkat |
|---|---|---|
| Tutorial SQL PostgreSQL | Tur SQL berjenjang: SELECT, JOIN, agregasi, transaksi | pemula |
| SQL Language Reference | Halaman induk semua statement SQL beserta sintaks formalnya | menengah |
| Queries | Semantik klausa query: FROM, WHERE, GROUP BY, HAVING, JOIN | menengah |
| Functions and Operators | Indeks fungsi bawaan: string, tanggal, agregasi, JSON | menengah |
| String Functions and Operators | Operasi string: substring, trim, regexp_replace, penggabungan | menengah |
| Date/Time Functions and Operators | date_trunc, extract, aritmetika interval, dan format waktu | menengah |
| Window Functions | ROW_NUMBER, RANK, dan rekan-rekannya plus aturan frame | menengah |
| Value Expressions | Ekspresi nilai: operator, CAST, CASE, dan subquery skalar | menengah |
| Halaman SELECT | Sintaks SELECT lengkap hingga klausa WINDOW dan ORDER BY | mahir |
Referensi SQL SQLite #
Dokumentasi SQLite memakai satu halaman besar per topik. Halaman SQL Syntax adalah induk seluruh statement dan klausa yang didukung SQLite, sehingga menjadi titik masuk utamanya. Struktur datanya datar dan tanpa banyak lapisan, jadi mencari lewat kolom pencarian peramban sering kali lebih cepat daripada menelusuri tautan.
| Sumber | Untuk apa | Tingkat |
|---|---|---|
| SQL Syntax SQLite | Indeks seluruh statement SQL yang didukung SQLite | pemula |
| Halaman SELECT SQLite | Diagram relung sintaks SELECT beserta urutan pemrosesannya | menengah |
| Expressions | Operator, literal, dan CASE dalam dialek SQLite | menengah |
| Core Functions | Fungsi skalar bawaan: coalesce, length, printf, dan lainnya | menengah |
| Aggregate Functions | sum, avg, count, dan group_concat | pemula |
| WITH Clause | Common Table Expression dan rekursifnya di SQLite | menengah |
| Date and Time Functions | Fungsi tanggal SQLite dengan aturan format string khas | menengah |
| Window Functions SQLite | Dukungan window function SQLite dari sintaks sampai contoh | menengah |
Referensi SQL DuckDB #
DuckDB menerapkan dialek yang dekat dengan PostgreSQL, lalu menambahkan fungsi analitik seperti ASOF JOIN. Dokumentasinya terbagi rapi per kategori sehingga cepat dipindai. Saat memindahkan query dari PostgreSQL ke DuckDB, sebagian besar klausa berjalan tanpa perubahan — periksa hanya fungsi dan fitur khusus di halaman-halaman berikut.
| Sumber | Untuk apa | Tingkat |
|---|---|---|
| Pengantar SQL DuckDB | Ikhtisar dialek DuckDB dan perbedaannya dari PostgreSQL | pemula |
| Statement SELECT DuckDB | Sintaks SELECT lengkap termasuk QUALIFY dan ASOF JOIN | menengah |
| Function Reference DuckDB | Indeks semua fungsi bawaan yang dikelompokkan per kategori | menengah |
| Window Functions DuckDB | Daftar fungsi window plus agregat yang bisa dipakai sebagai window | menengah |
Perbedaan Dialek yang Sering Menjegal #
Ketiga engine memakai standar SQL yang sama untuk bagian intinya, tetapi lima hal berikut adalah sumber kejutan paling umum saat query dipindahkan antar engine. Tabel ini menjadi alasan kuat untuk selalu membuka dokumentasi engine target sebelum menyalin query dari engine lain.
| Aspek | PostgreSQL | SQLite | DuckDB |
|---|---|---|---|
| Pencarian case-insensitive | operator ILIKE | LIKE bawaan sudah case-insensitive untuk huruf ASCII | operator ILIKE |
| Format tanggal jadi string | to_char(...) | strftime(...) | strftime(...) |
Klausa QUALIFY untuk window | belum tersedia; bungkus dengan subquery | belum tersedia | tersedia langsung |
| Operator JSON | -> dan ->> | -> dan ->> | -> dan ->> |
| Perbandingan null-safe | IS NOT DISTINCT FROM | IS dan IS NOT | IS NOT DISTINCT FROM |
Tipe BOOLEAN | tipe asli | tanpa kelas penyimpanan khusus; nilai tersimpan sebagai angka | tipe asli |
Perbedaan seperti ini tidak terlihat saat query diuji dengan satu baris data, lalu muncul sebagai galat produksi setelah pipeline berjalan. Kebiasaan amannya: uji query di engine target dengan data yang merepresentasikan nilai tepi — string kosong, null, tanggal kabisat — sebelum query dipromosikan.
Aturan praktisnya: query yang akan berjalan di lebih dari satu engine sebaiknya menyimpan dialek paling konservatif, lalu memakai view terpisah untuk fitur khas tiap engine. Dengan begitu, perpindahan engine tidak menuntut penulisan ulang besar.
Cara Mencari di Dokumentasi SQL #
Efisiensi mencari jawaban SQL sangat bergantung pada pemilihan jenis halaman. Gunakan pemetaan berikut sebelum mengetik kata kunci:
- Sintaks sebuah statement (misalnya bagaimana menulis
INSERT ... ON CONFLICT) — buka halaman statement di SQL Language Reference, bukan halaman tutorial. - Detail sebuah fungsi (apa argumen
date_trunc) — buka halaman kategori fungsi: string, tanggal, agregasi, atau window. - Perilaku klausa (apakah
GROUP BYmengurutkan hasil) — buka halaman Queries atau Language Reference; jawabannya ada di penjelasan semantik, bukan di daftar fungsi. - Fungsi window — tiap engine punya halaman khusus; buka baris Window Functions pada tabel engine terkait di atas.
- Contoh siap pakai — halaman tutorial dan how-to tiap engine menyediakan contoh teruji yang bisa langsung diadaptasi.
Dengan pemetaan ini, satu pencarian yang biasanya memakan beberapa menit di mesin pencari umum sering kali selesai dalam satu lompatan ke halaman yang benar.
Sebelum Query Naik ke Produksi #
Gunakan daftar periksa berikut setiap kali sebuah query baru akan dijadwalkan di pipeline:
- Jalankan
EXPLAIN(atauEXPLAIN QUERY PLANdi SQLite) dan pastikan rencana eksekusi memakai index yang diharapkan. - Cocokkan setiap fungsi yang dipakai dengan halaman fungsi resmi engine target, bukan sekadar standar SQL.
- Uji dengan tabel kosong dan tabel berisi satu baris — kedua kondisi ini paling sering memicu galat yang tidak terlihat di data besar.
- Periksa perlakuan null pada kolom yang difilter atau diagregasi karena perilakunya bisa berbeda antar fungsi.
- Catat asumsi urutan data: tanpa
ORDER BY, urutan hasil tidak dijamin oleh standar SQL. - Untuk fitur analitik khas seperti ASOF JOIN atau QUALIFY, baca halaman SELECT engine yang dipakai sebelum menyalin contoh dari engine lain.
- Simpan query di version control bersama pipeline agar perubahan selalu terlacak.
Seluruh konsep di atas dipraktikkan langsung di section Dasar SQL, terutama chapter Window Functions, Common Table Expressions, dan Optimasi Query Dasar. Sisi operasionalnya — indexing, query plan, transaksi — kita kumpulkan di Referensi Database.