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:
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:
SELECT nama, harga
FROM produk
WHERE harga > 5000
ORDER BY harga DESC;- Baris
SELECT nama, harga— daftar kolom yang ingin ditampilkan pada hasil. - Baris
FROM produk— tabel sumber data, yaituproduk. - Baris
WHERE harga > 5000— kondisi filter; hanya baris denganhargadi atas 5000 yang lolos. - Baris
ORDER BY harga DESC— urutkan hasil berdasarkan kolomharga, 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:
| Keluarga | Kepanjangan | Statement utama | Tugas |
|---|---|---|---|
| DDL | Data Definition Language | CREATE TABLE, ALTER TABLE, DROP TABLE | Membangun dan mengubah struktur |
| DML | Data Manipulation Language | INSERT, UPDATE, DELETE | Menambah, mengubah, menghapus baris |
| DQL | Data Query Language | SELECT | Membaca 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.