Menjalankan Query

Mengatur bentuk keluaran sqlite3 dengan .mode, .headers, dan opsi baris perintah.

Daftar isi

Hasil query pada sqlite3 dapat ditampilkan dalam beberapa bentuk yang dipilih sesuai keperluan. Topik ini membahas mode bawaan bernama list, mode column yang menata nilai dalam kolom, mode box yang menggambar tabel berbingkai, serta opsi sekali jalan dari shell untuk mengatur keduanya. Mode yang dipilih hanya mengubah tampilan, sehingga query yang sama menghasilkan keluaran dengan isi identik pada semua mode.

Mode list, mode bawaan#

Basis data contoh dibuat terlebih dahulu, kini dilengkapi tabel peminjaman yang mencatat setiap peminjaman buku beserta tanggal pinjam dan tanggal kembalinya.

bash
# membuat basis data perpustakaan.db beserta tabel dan datanya
sqlite3 perpustakaan.db <<'SQL'
CREATE TABLE buku (
  id      INTEGER PRIMARY KEY,
  judul   TEXT NOT NULL,
  penulis TEXT NOT NULL,
  tahun   INTEGER
);
CREATE TABLE anggota (
  id     INTEGER PRIMARY KEY,
  nama   TEXT NOT NULL,
  gabung DATE
);
CREATE TABLE peminjaman (
  id         INTEGER PRIMARY KEY,
  buku_id    INTEGER NOT NULL REFERENCES buku(id),
  anggota_id INTEGER NOT NULL REFERENCES anggota(id),
  pinjam     DATE NOT NULL,
  kembali    DATE
);
INSERT INTO buku (judul, penulis, tahun) VALUES
  ('Kisah Kota Tua', 'Sari Wulandari', 2018),
  ('Anak Sungai', 'Rahmat Hidayat', 2021),
  ('Musim di Ujung Jalan', 'Lina Marlina', 2019);
INSERT INTO anggota (nama, gabung) VALUES
  ('Ali', '2026-01-12'),
  ('Budi', '2026-02-03');
INSERT INTO peminjaman (buku_id, anggota_id, pinjam, kembali) VALUES
  (1, 1, '2026-02-10', '2026-02-17'),
  (2, 2, '2026-02-14', NULL),
  (3, 1, '2026-03-01', NULL);
SQL

Tanpa pengaturan apa pun, sqlite3 memakai mode list. Setiap baris hasil query dicetak sebagai satu baris teks, dan nilai-nilainya dipisahkan karakter garis tegak.

bash
# tanpa pengaturan apa pun hasil query berupa daftar nilai dipisah garis tegak
sqlite3 perpustakaan.db "SELECT judul, tahun FROM buku ORDER BY judul;"
text Keluaran
Anak Sungai|2021
Kisah Kota Tua|2018
Musim di Ujung Jalan|2019

Nama list merujuk pada bentuknya yang berupa daftar teks, satu baris hasil untuk satu baris layar. Mode ini juga menjadi keadaan awal setiap sesi baru, karena pengaturan mode kembali ke bawaan setiap kali sqlite3 dipanggil lagi. Nama kolom tidak ikut tampil pada mode bawaan ini. Bentuk demikian punya kelebihan di sisi pengolahan, karena pemisahnya tunggal dan konsisten, sehingga keluaran mudah dipotong per kolom oleh cut atau disaring oleh grep. Kelemahannya baru terasa ketika kolom yang ditampilkan lebih dari dua, sebab pembaca harus menghitung pemisah untuk mengetahui nilai itu milik kolom mana.

Dalam mode list, nilai NULL pun dicetak sebagai teks kosong di antara dua pemisah, sehingga susunan baris dengan data yang belum lengkap tetap terbaca. Keluaran berupa teks murni juga membuat mode ini aman disalurkan ke berkas melalui pengalihan shell sebelum diproses lebih lanjut.

Nama kolom dengan .headers on#

Baris nama kolom dapat ditambahkan dengan perintah titik .headers on. Pengaturan ini berlaku pada keluaran yang dicetak per baris, seperti mode list.

bash
# .headers on menambah baris nama kolom pada keluaran
printf '.headers on\nSELECT judul, tahun FROM buku ORDER BY judul;\n' | sqlite3 perpustakaan.db
text Keluaran
judul|tahun
Anak Sungai|2021
Kisah Kota Tua|2018
Musim di Ujung Jalan|2019

Dengan satu pengaturan, baris pertama keluaran berupa nama kolom yang dipisahkan garis tegak sama seperti datanya. Pengaturan .headers bersifat bertahan selama sesi berlangsung dan dimatikan kembali dengan .headers off.

Mode column mengubah bentuk keluaran sepenuhnya. Setiap nilai dicetak di dalam kolom dengan lebar yang menyesuaikan isi terpanjang, lengkap dengan nama kolom dan garis pemisah di bawahnya.

bash
# .mode column menata keluaran dalam kolom berjudul
printf '.mode column\n.headers on\nSELECT buku_id, anggota_id, pinjam, kembali FROM peminjaman;\n' | sqlite3 perpustakaan.db
text Keluaran
buku_id  anggota_id    pinjam     kembali
-------  ----------  ----------  ----------
      1           1  2026-02-10  2026-02-17
      2           2  2026-02-14
      3           1  2026-03-01

Keluaran di atas memperlihatkan dua hal sekaligus. Kolom kembali pada baris kedua dan ketiga tampil kosong karena nilainya masih NULL, penanda bahwa buku yang bersangkutan belum dikembalikan. Selain itu, pada sqlite3 3.54 mode column dan mode box selalu menggambar nama kolom beserta garis pemisahnya tanpa memandang pengaturan .headers, sehingga .headers on pada contoh tidak mengubah tampilan kolom. Pengaturan tersebut tetap diperlukan untuk mode list dan mode csv, dan nilainya bertahan sampai diubah kembali.

Opsi sekali jalan dari shell#

Pengaturan yang sama dapat diberikan sebagai opsi baris perintah tanpa perlu mengirim perintah titik. Opsi -header menambahkan baris nama kolom pada keluaran mode list.

bash
# opsi -header menambah nama kolom pada keluaran mode list
sqlite3 -header perpustakaan.db "SELECT nama, gabung FROM anggota ORDER BY nama;"
text Keluaran
nama|gabung
Ali|2026-01-12
Budi|2026-02-03

Kombinasi -header -column menjadi pilihan lazim untuk pemeriksaan cepat, karena sekali jalan menghasilkan tabel berkolom bernama tanpa skrip tambahan.

bash
# -header -column menghasilkan tabel berkolom nama sekali jalan
sqlite3 -header -column perpustakaan.db "SELECT nama, gabung FROM anggota ORDER BY nama;"
text Keluaran
nama    gabung
----  ----------
Ali   2026-01-12
Budi  2026-02-03

Perhatikan perbedaan penulisannya. Opsi shell memakai bentuk tunggal -header, sedangkan perintah titiknya memakai bentuk jamak .headers. Opsi baris perintah hanya berlaku pada satu pemanggilan sqlite3, sedangkan perintah titik .mode dan .headers bertahan selama sesi itu berlangsung. Karena itu, opsi cocok untuk query inspeksi sekali jalan, sedangkan perintah titik cocok untuk sesi kerja panjang dengan banyak query. Mode lain juga tersedia dalam bentuk opsi dengan pola yang sama, misalnya -box untuk keluaran berbingkai dan -csv untuk nilai dipisah koma, sehingga seluruh pengaturan pada topik ini dapat dipanggil sekali jalan tanpa membuka sesi interaktif.

Mode box dan pemilihan mode#

Mode box menggambar hasil query sebagai tabel berbingkai dengan karakter garis. Batas antarkolom dan antarbaris menjadi jelas tanpa perlu membaca pemisah, sehingga mode ini nyaman untuk membaca hasil langsung di terminal maupun untuk menyematkannya pada dokumentasi.

bash
# .mode box menggambar tabel berbingkai lengkap dengan nama kolom
printf '.mode box\nSELECT judul, tahun FROM buku WHERE tahun < 2020 ORDER BY judul;\n' | sqlite3 perpustakaan.db
text Keluaran
╭──────────────────────┬───────╮
│        judul         │ tahun │
╞══════════════════════╪═══════╡
│ Kisah Kota Tua       │  2018 │
│ Musim di Ujung Jalan │  2019 │
╰──────────────────────┴───────╯

Pemilihan mode dapat diringkas sebagai berikut.

ModeBentuk keluaranCocok digunakan ketika
list (bawaan)satu baris per data, nilai dipisah garis tegakkeluaran akan diolah perintah shell lain
columnkolom rata dengan nama kolomhasil dibaca langsung dengan kolom yang lebar isinya mirip
boxtabel berbingkaihasil dibaca langsung atau disematkan pada dokumentasi
csvnilai dipisah komadata dipindahkan ke pengolah lembar kerja

Semua mode di atas hanya mengatur tampilan. Urutan baris, jumlah baris, dan nilai hasil tidak tersentuh sedikit pun, begitu pula kecepatan eksekusi query. Pemilihan mode murni persoalan keterbacaan dan keperluan lanjutan, sehingga query yang sama boleh ditampilkan ulang dalam mode lain kapan saja tanpa risiko mengubah data.

Ringkasan#

  • Mode bawaan list mencetak setiap baris hasil sebagai nilai dipisah garis tegak, dan .headers on menambah baris nama kolom.
  • .mode column menata hasil dalam kolom berlebar otomatis, sedangkan .mode box menggambarnya sebagai tabel berbingkai.
  • Opsi -header dan -column menerapkan pengaturan serupa sekali jalan dari shell, dengan bentuk tunggal -header sebagai lawan kata .headers jamak.
  • Mode hanya memengaruhi tampilan, bukan data, urutan baris, maupun kecepatan eksekusi.

Referensi#