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.

SumberUntuk apaTingkat
Tutorial SQL PostgreSQLTur SQL berjenjang: SELECT, JOIN, agregasi, transaksipemula
SQL Language ReferenceHalaman induk semua statement SQL beserta sintaks formalnyamenengah
QueriesSemantik klausa query: FROM, WHERE, GROUP BY, HAVING, JOINmenengah
Functions and OperatorsIndeks fungsi bawaan: string, tanggal, agregasi, JSONmenengah
String Functions and OperatorsOperasi string: substring, trim, regexp_replace, penggabunganmenengah
Date/Time Functions and Operatorsdate_trunc, extract, aritmetika interval, dan format waktumenengah
Window FunctionsROW_NUMBER, RANK, dan rekan-rekannya plus aturan framemenengah
Value ExpressionsEkspresi nilai: operator, CAST, CASE, dan subquery skalarmenengah
Halaman SELECTSintaks SELECT lengkap hingga klausa WINDOW dan ORDER BYmahir

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.

SumberUntuk apaTingkat
SQL Syntax SQLiteIndeks seluruh statement SQL yang didukung SQLitepemula
Halaman SELECT SQLiteDiagram relung sintaks SELECT beserta urutan pemrosesannyamenengah
ExpressionsOperator, literal, dan CASE dalam dialek SQLitemenengah
Core FunctionsFungsi skalar bawaan: coalesce, length, printf, dan lainnyamenengah
Aggregate Functionssum, avg, count, dan group_concatpemula
WITH ClauseCommon Table Expression dan rekursifnya di SQLitemenengah
Date and Time FunctionsFungsi tanggal SQLite dengan aturan format string khasmenengah
Window Functions SQLiteDukungan window function SQLite dari sintaks sampai contohmenengah

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.

SumberUntuk apaTingkat
Pengantar SQL DuckDBIkhtisar dialek DuckDB dan perbedaannya dari PostgreSQLpemula
Statement SELECT DuckDBSintaks SELECT lengkap termasuk QUALIFY dan ASOF JOINmenengah
Function Reference DuckDBIndeks semua fungsi bawaan yang dikelompokkan per kategorimenengah
Window Functions DuckDBDaftar fungsi window plus agregat yang bisa dipakai sebagai windowmenengah

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.

AspekPostgreSQLSQLiteDuckDB
Pencarian case-insensitiveoperator ILIKELIKE bawaan sudah case-insensitive untuk huruf ASCIIoperator ILIKE
Format tanggal jadi stringto_char(...)strftime(...)strftime(...)
Klausa QUALIFY untuk windowbelum tersedia; bungkus dengan subquerybelum tersediatersedia langsung
Operator JSON-> dan ->>-> dan ->>-> dan ->>
Perbandingan null-safeIS NOT DISTINCT FROMIS dan IS NOTIS NOT DISTINCT FROM
Tipe BOOLEANtipe aslitanpa kelas penyimpanan khusus; nilai tersimpan sebagai angkatipe 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 BY mengurutkan 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:

  1. Jalankan EXPLAIN (atau EXPLAIN QUERY PLAN di SQLite) dan pastikan rencana eksekusi memakai index yang diharapkan.
  2. Cocokkan setiap fungsi yang dipakai dengan halaman fungsi resmi engine target, bukan sekadar standar SQL.
  3. Uji dengan tabel kosong dan tabel berisi satu baris — kedua kondisi ini paling sering memicu galat yang tidak terlihat di data besar.
  4. Periksa perlakuan null pada kolom yang difilter atau diagregasi karena perilakunya bisa berbeda antar fungsi.
  5. Catat asumsi urutan data: tanpa ORDER BY, urutan hasil tidak dijamin oleh standar SQL.
  6. Untuk fitur analitik khas seperti ASOF JOIN atau QUALIFY, baca halaman SELECT engine yang dipakai sebelum menyalin contoh dari engine lain.
  7. 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.