Sebelum kita membuat database dan tabel pertama, kita perlu bisa membaca perintah SQL dengan benar, sama seperti belajar membaca kalimat sebelum menulis surat. Setiap perintah SQL punya tata bahasa yang tetap: ada kata yang disediakan bahasanya, ada nama yang kita pilih sendiri, dan ada nilai data yang kita isi. Pada chapter ini kita membedah anatomi sebuah perintah SQL, membedakan kata kunci dari identifier, memahami peran titik koma, dan mengenali kategori-kategori perintah yang akan kita pakai sepanjang course ini.
Anatomi Satu Perintah SQL #
Perintah SQL dibangun dari empat unsur pokok: kata kunci (kata yang artinya sudah ditetapkan oleh SQL), identifier (nama objek yang kita pilih sendiri), literal (nilai data mentah), dan tanda baca seperti koma serta titik koma. File berikut memperlihatkan ketiganya sekaligus dalam tiga perintah kecil — membuat tabel, mengisi data, lalu membacanya kembali:
CREATE TABLE pelanggan (
id integer PRIMARY KEY,
nama text NOT NULL,
kota text
);
INSERT INTO pelanggan (id, nama, kota)
VALUES
(1, 'Budi', 'Jakarta'),
(2, 'Siti', 'Bandung');
SELECT nama, kota
FROM pelanggan
WHERE kota = 'Jakarta';Output yang Dihasilkan:
CREATE TABLE
INSERT 0 2
nama | kota
------+---------
Budi | Jakarta
(1 row)Mari kita bedah file di atas bagian demi bagian:
CREATE TABLE pelanggan (...):CREATEdanTABLEadalah kata kunci yang memerintahkan server membuat tabel baru;pelangganadalah identifier — nama tabel yang kita pilih sendiri. Di dalam tanda kurung, tiap baris mendefinisikan satu kolom: nama kolom (id,nama,kota), tipe datanya (integer,text), dan aturan tambahan (PRIMARY KEY,NOT NULL) yang kita bahas tuntas di chapter Membuat Tabel.INSERT INTO ... VALUES ...: perintah ini menyimpan dua baris data ke tabel. Angka1dan teks'Budi'adalah literal — nilai mentah yang ditulis apa adanya; teks selalu dibungkus kutip satu.SELECT ... FROM ... WHERE ...: perintah ini membaca kembali baris yang kolomkota-nya bernilai'Jakarta'. Kata kunciFROMmenunjuk tabel sumber, sedangkanWHEREmenyaring baris.- Titik koma di akhir tiap perintah: penanda bahwa perintah sudah selesai dan siap dikirim ke server.
Ada satu sifat penting yang langsung terlihat dari contoh di atas: SQL tidak peduli bagaimana perintah dipecah menjadi beberapa baris. Perintah SELECT terakhir ditulis empat baris, tetapi server membacanya sebagai satu perintah utuh. Spasi, tab, dan pergantian baris hanya berfungsi memisahkan satu kata dari kata lain — sisanya urusan keterbacaan manusia. Itulah sebabnya perintah panjang lazim ditata beberapa baris dengan indentasi, seperti pada VALUES di atas.
Kata Kunci, Identifier, dan Aturan Namanya #
Kata kunci adalah kosakata milik SQL itu sendiri: SELECT, FROM, CREATE, TABLE, WHERE, dan ratusan lainnya. Identifier adalah nama yang kita berikan untuk objek buatan kita — nama tabel, nama kolom, nanti juga nama database dan schema. Keduanya tidak boleh tertukar: kita bebas menamai tabel pelanggan atau pelanggan_langganan, tetapi kita tidak boleh menamainya select tanpa perlakuan khusus.
Aturan penulisan identifier tanpa tanda kutip di PostgreSQL ringkas saja:
- Dimulai dengan huruf atau garis bawah (
_), dilanjutkan huruf, angka, atau garis bawah. - Panjang maksimum 63 karakter.
- Ditulis dalam huruf kecil — PostgreSQL mengubah semua identifier tanpa kutip menjadi huruf kecil (case folding).
Aturan terakhir itulah yang membuat kutip dua (") berguna. Identifier yang dibungkus kutip dua mempertahankan huruf besar-kecilnya persis seperti ditulis. File berikut membuat tabel dengan nama kapital di tiap kata:
CREATE TABLE "LaporanBulanan" (
"NamaToko" text,
"JumlahTransaksi" integer
);
INSERT INTO "LaporanBulanan" ("NamaToko", "JumlahTransaksi")
VALUES ('Toko Maju Jaya', 152);
SELECT "NamaToko", "JumlahTransaksi"
FROM "LaporanBulanan";Output yang Dihasilkan:
CREATE TABLE
INSERT 0 1
NamaToko | JumlahTransaksi
----------------+-----------------
Toko Maju Jaya | 152
(1 row)Perintah-perintah di atas berhasil karena setiap identifier bercampur huruf besar-kecil konsisten dibungkus kutip dua: "LaporanBulanan", "NamaToko", "JumlahTransaksi". Begitu kutip dua itu hilang, nama berubah wujud. Perintah berikut mencoba membaca tabel yang sama tanpa kutip dua:
SELECT * FROM LaporanBulanan;Output yang Dihasilkan:
psql:tanpa-kutip-dua.sql:1: ERROR: relation "laporanbulanan" does not exist
LINE 1: SELECT * FROM LaporanBulanan;
^Server menolak perintah tersebut karena LaporanBulanan tanpa kutip dua dilipat menjadi laporanbulanan — dan tabel bernama laporanbulanan memang tidak ada; yang ada hanya "LaporanBulanan". Kesalahan kecil seperti ini sangat umum dijumpai pemula yang baru pindah dari database yang menghormati huruf besar-kecil pada nama objek.
Karena kutip dua menuntut ketelitian ekstra dan mudah salah tulis, praktik yang paling nyaman untuk sepanjang course ini: namai semua objek dengan huruf kecil dan garis bawah (pelanggan, kode_pos, total_harga), lalu biarkan semuanya berjalan tanpa kutip dua. Kita akan mengikuti kebiasaan itu di seluruh contoh berikutnya.
Titik Koma: Penanda Akhir Perintah #
Ketika kita mengetik beberapa perintah dalam satu file (atau satu sesi psql), server perlu tahu di mana satu perintah berakhir dan perintah berikutnya dimulai. Titik koma itulah penandanya. psql mengumpulkan teks sampai bertemu titik koma, lalu mengirim satu perintah utuh ke server untuk diproses.
File kecil berikut sengaja menghilangkan titik koma pada perintah pertama. Akibatnya, psql menganggap kedua baris sebagai satu perintah panjang yang salah susun:
SELECT 'tes'
SELECT 'tes';Output yang Dihasilkan:
psql:lupa-titik-koma.sql:2: ERROR: syntax error at or near "'tes'"
LINE 2: SELECT 'tes';
^Parser server menemukan kata SELECT kedua di posisi yang tidak diharapkan — persis di tempat perintah pertama seharusnya ditutup titik koma — dan menghentikan proses dengan syntax error. Di mode interaktif psql, gejalanya berbeda: menekan Enter tanpa titik koma membuat psql menampilkan prompt lanjutan (postgres-#) karena psql masih menunggu sisa perintah. Kalau kita menyadari kesalahan di tengah jalan, tekan Ctrl+C untuk membatalkan dan mulai dari awal.
Kategori Perintah SQL #
Ratusan perintah SQL dikelompokkan menjadi empat keluarga berdasarkan tugasnya:
| Kategori | Kepanjangan | Tugas utama | Contoh perintah |
|---|---|---|---|
| DDL | Data Definition Language | Membuat, mengubah, menghapus struktur objek | CREATE TABLE, ALTER TABLE, DROP TABLE |
| DML | Data Manipulation Language | Mengolah isi data di dalam tabel | SELECT, INSERT, UPDATE, DELETE |
| DCL | Data Control Language | Mengatur hak akses pengguna | GRANT, REVOKE |
| TCL | Transaction Control Language | Mengendalikan transaksi | BEGIN, COMMIT, ROLLBACK |
Section Dasar SQL yang sedang kita jalani ini hampir seluruhnya bermain di keluarga DDL: kita akan membuat database, schema, dan tabel, lalu mengubah serta menghapusnya kembali. Isi tabel — dunia DML dengan SELECT, INSERT, UPDATE, dan DELETE — menjadi fokus Section Manipulasi Data. DCL dan TCL menyusul jauh setelah fondasi ini berdiri.
Satu pengecualian kecil: contoh-contoh kita sudah sempat memakai INSERT dan SELECT sebagai alat bantu. Keduanya akan dibahas tuntas nanti; untuk sekarang cukup kenali wujudnya.
Dengan tata bahasa yang kini kita pahami, kita siap menjalankan perintah DDL pertama yang sesungguhnya: membuat database baru untuk berlatih. Itulah topik chapter Membuat Database.
Referensi #
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
anatomi.sql
Unduh berkasCREATE TABLE pelanggan (
id integer PRIMARY KEY,
nama text NOT NULL,
kota text
);
INSERT INTO pelanggan (id, nama, kota)
VALUES
(1, 'Budi', 'Jakarta'),
(2, 'Siti', 'Bandung');
SELECT nama, kota
FROM pelanggan
WHERE kota = 'Jakarta';
kutip-dua.sql
Unduh berkasCREATE TABLE "LaporanBulanan" (
"NamaToko" text,
"JumlahTransaksi" integer
);
INSERT INTO "LaporanBulanan" ("NamaToko", "JumlahTransaksi")
VALUES ('Toko Maju Jaya', 152);
SELECT "NamaToko", "JumlahTransaksi"
FROM "LaporanBulanan";
lupa-titik-koma.sql
Unduh berkasSELECT 'tes'
SELECT 'tes';
tanpa-kutip-dua.sql
Unduh berkasSELECT * FROM LaporanBulanan;