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.
# 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);
SQLTanpa pengaturan apa pun, sqlite3 memakai mode list. Setiap baris hasil query dicetak sebagai satu baris teks, dan nilai-nilainya dipisahkan karakter garis tegak.
# tanpa pengaturan apa pun hasil query berupa daftar nilai dipisah garis tegak
sqlite3 perpustakaan.db "SELECT judul, tahun FROM buku ORDER BY judul;"Anak Sungai|2021
Kisah Kota Tua|2018
Musim di Ujung Jalan|2019Nama 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.
# .headers on menambah baris nama kolom pada keluaran
printf '.headers on\nSELECT judul, tahun FROM buku ORDER BY judul;\n' | sqlite3 perpustakaan.dbjudul|tahun
Anak Sungai|2021
Kisah Kota Tua|2018
Musim di Ujung Jalan|2019Dengan 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.
# .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.dbbuku_id anggota_id pinjam kembali
------- ---------- ---------- ----------
1 1 2026-02-10 2026-02-17
2 2 2026-02-14
3 1 2026-03-01Keluaran 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.
# opsi -header menambah nama kolom pada keluaran mode list
sqlite3 -header perpustakaan.db "SELECT nama, gabung FROM anggota ORDER BY nama;"nama|gabung
Ali|2026-01-12
Budi|2026-02-03Kombinasi -header -column menjadi pilihan lazim untuk pemeriksaan cepat, karena sekali jalan menghasilkan tabel berkolom bernama tanpa skrip tambahan.
# -header -column menghasilkan tabel berkolom nama sekali jalan
sqlite3 -header -column perpustakaan.db "SELECT nama, gabung FROM anggota ORDER BY nama;"nama gabung
---- ----------
Ali 2026-01-12
Budi 2026-02-03Perhatikan 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.
# .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╭──────────────────────┬───────╮
│ judul │ tahun │
╞══════════════════════╪═══════╡
│ Kisah Kota Tua │ 2018 │
│ Musim di Ujung Jalan │ 2019 │
╰──────────────────────┴───────╯Pemilihan mode dapat diringkas sebagai berikut.
| Mode | Bentuk keluaran | Cocok digunakan ketika |
|---|---|---|
| list (bawaan) | satu baris per data, nilai dipisah garis tegak | keluaran akan diolah perintah shell lain |
| column | kolom rata dengan nama kolom | hasil dibaca langsung dengan kolom yang lebar isinya mirip |
| box | tabel berbingkai | hasil dibaca langsung atau disematkan pada dokumentasi |
| csv | nilai dipisah koma | data 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#
- Command Line Shell For SQLite — SQLite — Rujukan seluruh mode keluaran .mode serta opsi baris perintah sqlite3 seperti -header dan -column.
- SELECT — SQLite — Dokumentasi pernyataan SELECT yang keluarannya ditata oleh mode-mode di atas.