Memasukkan Data — SQL

Setelah membuat tabel, kamu bisa memasukkan data dengan perintah INSERT INTO. Syntax: INSERT INTO nama_tabel (kolom1, kolom2, ...) VALUES (nilai1, nilai2…

Tabel yang baru dibuat masih kosong. Perintah INSERT INTO menambah baris baru ke dalamnya. Bayangin mengisi formulir pendaftaran dari pelajaran sebelumnya: kamu menulis isian mana yang kamu isi (daftar kolom), lalu isinya dengan urutan yang sama (nilai), dan petugas memberi nomor pendaftarannya sendiri (id). Tiap formulir yang masuk jadi satu baris di tabel.

🧪 Tebakan cepat: INSERT INTO students (name, grade, city) VALUES (90, 'Dewi', 'Jakarta');. Nama dan nilainya ketuker. SQLite menolak, atau menerima? Tebak dulu, jawabannya ada di bagian "Urutan nilai harus sama dengan urutan kolom".

Bentuk INSERT INTO

Tabelnya students dari pelajaran Membuat Tabel, masih kosong:

INSERT INTO students (name, grade, city) VALUES ('Dewi', 90, 'Jakarta');

Isi tabelnya sekarang:

id name grade city
1 Dewi 90 Jakarta

Jalankan perintah yang sama sekali lagi, dan Dewi kedua masuk dengan id 2. INSERT selalu menambah, gak pernah menimpa.

Banyak baris sekaligus

Satu INSERT bisa membawa banyak baris. Tiap baris dalam kurungnya sendiri, dipisah koma, dan titik koma cuma satu di akhir:

INSERT INTO students (name, grade, city) VALUES
  ('Dewi', 90, 'Jakarta'),
  ('Rizky', 85, 'Bandung'),
  ('Maya', 92, 'Surabaya');

Di tabel yang masih kosong, hasilnya 3 baris:

id name grade city
1 Dewi 90 Jakarta
2 Rizky 85 Bandung
3 Maya 92 Surabaya

Satu perintah itu semua atau gak sama sekali. Kalau satu nilai saja salah, misalnya Surabaya lupa dikutip, SQLite menjawab no such column: Surabaya dan gak ada satu baris pun yang masuk.

Urutan nilai harus sama dengan urutan kolom

Nilai dipasangkan ke kolom berdasarkan urutannya, bukan maknanya. Perintah di tebakan tadi diterima SQLite tanpa protes:

id name grade city
1 90 Dewi Jakarta

name berisi 90 dan grade berisi Dewi. Database gak tahu maksudmu, jadi datanya yang rusak. Itu jawaban tebakannya. MySQL (dengan pengaturan bawaannya) dan PostgreSQL menolak teks 'Dewi' di kolom angka, tapi SQLite longgar soal tipe. Jadi cocokkan urutannya sendiri.

Tanpa daftar kolom

Daftar kolom boleh dihilangkan, tapi nilainya harus untuk semua kolom, sesuai urutan di tabel, termasuk id:

INSERT INTO students VALUES ('Dewi', 90, 'Jakarta');
Error: table students has 4 columns but 3 values were supplied

Versi yang diterima memberi NULL untuk id, supaya database tetap mengisinya: INSERT INTO students VALUES (NULL, 'Dewi', 90, 'Jakarta');. Lebih aman selalu menulis daftar kolomnya.

Satu lagi yang sering salah: VALUES (name = 'Dewi', grade = 90). VALUES gak memakai tanda sama dengan. SQLite membacanya sebagai perbandingan dan menjawab no such column: name. Nama kolom ditulis di daftar kolom, nilainya di VALUES.

⚠️ Jebakan yang sering ketemu

TL;DR: INSERT INTO tabel (kolom1, kolom2) VALUES (nilai1, nilai2); menambah baris. Nilai dipasangkan ke kolom berdasarkan urutan, jadi urutannya harus sama. Teks pakai kutip tunggal, angka tanpa kutip. Banyak baris sekaligus: VALUES (...), (...), (...);, dan satu perintah itu semua atau gak sama sekali. Kolom id yang AUTOINCREMENT gak perlu diisi. Tanpa daftar kolom, semua kolom wajib diberi nilai; dan VALUES gak memakai tanda sama dengan.

Yang akan kamu pelajari