Database yang sudah terpasang di komputer kita masih benda mati: engine SQLite bisa menyimpan data, tetapi belum tahu data apa yang kita inginkan. Jembatan antara kita dan engine adalah SQL — bahasa yang khusus dirancang untuk mendeskripsikan data. Chapter ini membedah cara berpikir SQL, memperkenalkan keluarga statement intinya, lalu mencicipi query pertama secara langsung.

Mencicipi SQL Langsung #

Kita mulai dari praktik, biar teorinya punya tempat bertumpu. Buat database latihan baru bernama toko.db — database untuk sebuah toko kecil — lalu jalankan sqlite3 toko.db. Statement pertama membuat tabel, statement kedua mengisinya, lalu statement ketiga membacanya kembali:

text
sqlite> CREATE TABLE produk (
   ...>   id INTEGER PRIMARY KEY,
   ...>   nama TEXT NOT NULL,
   ...>   harga INTEGER NOT NULL
   ...> );
sqlite> INSERT INTO produk (nama, harga) VALUES
   ...>   ('Pensil', 3000),
   ...>   ('Buku Tulis', 5500),
   ...>   ('Tas Sekolah', 85000);
sqlite> SELECT nama, harga FROM produk WHERE harga > 5000 ORDER BY harga DESC;
Tas Sekolah|85000
Buku Tulis|5500
sqlite>

Rangkaian statement ini adalah siklus hidup data dalam miniatur: CREATE TABLE menyiapkan struktur, INSERT mengisinya, SELECT membaca kembali. Detail setiap statement dibahas tuntas pada chapter-chapter berikutnya; untuk sekarang, cukup jalankan dan amati. Query terakhir menjawab sebuah kebutuhan nyata — “tampilkan produk dengan harga di atas 5000, urut dari yang termahal” — dan jawaban itu datang dalam bentuk tiga baris SQL.

Bahasa yang Mendeskripsikan Hasil #

Mari kita tanggalkan satu per satu bagian query terakhir:

sql
SELECT nama, harga
FROM produk
WHERE harga > 5000
ORDER BY harga DESC;
  1. Baris SELECT nama, harga — daftar kolom yang ingin ditampilkan pada hasil.
  2. Baris FROM produk — tabel sumber data, yaitu produk.
  3. Baris WHERE harga > 5000 — kondisi filter; hanya baris dengan harga di atas 5000 yang lolos.
  4. Baris ORDER BY harga DESC — urutkan hasil berdasarkan kolom harga, dari nilai terbesar (DESC, descending).

Yang menonjol dari bentuk ini: statement SQL tidak berisi langkah apa pun. Tidak ada “baca baris pertama”, “bandingkan angka”, atau “pindahkan hasil ke wadah” — semuanya kita serahkan ke engine. Inilah yang disebut bahasa deklaratif: kita menyatakan hasil apa yang ingin diperoleh, bukan langkah apa yang harus dijalankan untuk memperolehnya.

Dalam bahasa imperatif seperti Python atau C, kebutuhan yang sama menuntut rangkaian langkah manual: siapkan wadah hasil, buka penunjuk ke tabel, ulangi setiap baris, bandingkan harga, salin baris yang lolos, lalu urutkan. Dalam SQL, seluruh instruksi itu runtuh menjadi empat baris — dan engine SQLite yang memutuskan bagaimana membaca tabel, membandingkan angka, dan mengurutkan hasil seefisien mungkin.

Tiga Keluarga Statement #

Statement SQL dikelompokkan berdasarkan tugasnya. Tiga keluarga berikut menutupi hampir seluruh materi Section SQL Dasar ini:

KeluargaKepanjanganStatement utamaTugas
DDLData Definition LanguageCREATE TABLE, ALTER TABLE, DROP TABLEMembangun dan mengubah struktur
DMLData Manipulation LanguageINSERT, UPDATE, DELETEMenambah, mengubah, menghapus baris
DQLData Query LanguageSELECTMembaca dan memfilter data

SQLite juga mengenal keluarga keempat untuk transaksi — BEGIN, COMMIT, dan ROLLBACK — yang membungkus beberapa statement menjadi satu kesatuan sukses-atau-gagal. Keluarga ini dibahas tuntas pada Section Transaksi dan Konsistensi.

SQL dan Engine SQLite #

Ketika kita mengetik statement pada prompt sqlite>, shell sqlite3 hanya bertindak sebagai penerus: shell membaca teks hingga titik koma, mengirimkannya ke engine SQLite, lalu mencetak baris hasil yang dikembalikan engine. Engine yang mem-parsing teks SQL, menyusun rencana eksekusi, dan menjalankannya — alur ini sudah kita bedah pada Chapter Arsitektur SQLite.

Satu hal yang membuat SQL layak dipelajari serius: SQL adalah bahasa yang distandarisasi. SQLite mengimplementasikan bagian besar standar SQL, sehingga keahlian SELECT, INSERT, dan kawan-kawannya tetap terpakai saat kita pindah ke PostgreSQL, MySQL, atau SQL Server. Detail kecil antar database memang berbeda — dan pada Section ini kita akan melihat beberapa ciri khas SQLite, mulai dari kefleksibelan tipenya — tetapi pola dasarnya sama.

Dengan pemahaman ini, kita siap menyusun tabel yang sesungguhnya. Chapter Membuat Tabel dengan CREATE TABLE membedah statement DDL paling penting itu baris per baris.