SELECT Membaca Baris dari Tabel
Setiap pertanyaan yang kamu ajukan ke database SQLite dimulai dengan SELECT. Artinya: berikan kolom-kolom ini, dari tabel ini, untuk baris yang memenuhi kondisi ini. Hari ini kita fokus pada dua bagian pertama: kolom dan tabel. Memfilter baris dibahas di dokumen berikutnya.
Query paling sederhana:
SELECT * berarti "semua kolom." FROM products menyebutkan tabelnya. Hasilnya satu baris per data, dengan keempat kolomnya. Titik koma mengakhiri pernyataannya.
Itulah seluruh bentuknya: SELECT <columns> FROM <table>;.
Memilih Kolom Tertentu
* praktis saat kamu sedang bereksplorasi. Di kode sungguhan, kamu hampir selalu ingin menyebutkan kolom yang benar-benar kamu perlukan:
Kamu mendapatkan dua kolom, dengan urutan sesuai yang kamu minta. Urutan di daftar SELECT menentukan urutan di hasilnya; tidak harus sama dengan urutan kolom di tabel.
Kenapa ini lebih baik daripada SELECT *? Ada dua alasan. Pertama, data yang dikirim (atau dibaca dari file) lebih sedikit, dan itu penting saat tabelnya punya banyak kolom. Kedua, query-mu tetap stabil saat bulan depan ada orang yang menambahkan kolom ke tabel. SELECT * diam-diam mulai mengembalikan lebih banyak data, yang bisa merusak kode aplikasi yang membongkar baris berdasarkan posisi.
SELECT Bisa Menghitung, Bukan Hanya Mengambil
Kolom di daftar SELECT tidak harus berupa nama kolom mentah. Kolom itu bisa berupa ekspresi apa pun: aritmetika, pemanggilan fungsi, penggabungan string, konstanta. SQLite menghitung ekspresinya untuk setiap baris.
Kolom keempat tidak ada di tabel; SQLite menghitungnya baris demi baris. Kamu bisa melakukan hal yang sama dengan fungsi string, tanggal, ekspresi kondisi, apa saja. Daftar SELECT adalah tempat untuk membentuk data, bukan hanya mengambilnya.
Kamu bahkan bisa melakukan SELECT tanpa klausa FROM, memakai SQLite sebagai kalkulator:
Satu baris, tiga kolom. Berguna untuk menguji hasil sebuah ekspresi sebelum memasukkannya ke query sungguhan.
Memberi Alias pada Kolom dengan AS
Saat kamu menghitung sebuah kolom, SQLite memilih nama default untuknya, sering kali ekspresinya sendiri, seperti price * stock. Itu jelek dan tidak stabil. Beri kolom itu nama yang layak dengan AS:
Alias itu adalah nama kolom di hasil query. Hal ini penting untuk keterbacaan saat kamu membaca output, dan sangat penting untuk kode aplikasi yang mengambil nilai berdasarkan nama kolom (row["inventory_value"], bukan row[1]).
Kata kunci AS itu opsional, price * stock inventory_value bekerja dengan cara yang sama, tapi tuliskan saja. Maksudnya lebih jelas, dan itu menghindarkan pembaca dari salah mengira koma yang terlupa sebagai alias.
Memberi Alias pada Tabel Juga
Kamu juga bisa memberi tabelnya alias yang pendek. Dengan satu tabel, ini tidak terlalu berguna, tapi kebiasaan ini sangat membantu begitu kamu mulai melakukan join:
p sekarang menjadi pengganti products. Bentuk bertitik p.name menyatakan dengan jelas dari tabel mana sebuah kolom berasal. Dengan satu tabel, itu hanya menambah gangguan; dengan tiga tabel yang di-join, hanya itulah yang menjaga query tetap terbaca.
Literal dan Konstanta di Hasil
Kamu bisa mencampur kolom sungguhan dengan nilai konstan. Berguna saat kamu ingin menandai baris atau mengisi nilai penampung:
Setiap baris mendapat 'USD' dan 1 yang sama. Pola ini muncul saat kamu menggabungkan hasil dari beberapa query dengan UNION dan butuh kolom penanda untuk membedakan sumbernya.
Sedikit tentang NULL
Beberapa kolom kosong: tidak ada nilai yang dimasukkan, atau kolomnya tidak punya default. SQLite merepresentasikan "tidak ada nilai" sebagai NULL, dan NULL muncul di hasil SELECT sebagai kolom kosong atau tulisan NULL, tergantung tool yang kamu pakai.
Lihat baris kedua. price bernilai NULL, dan price * 2 juga NULL: aritmetika apa pun yang melibatkan NULL menghasilkan NULL. Ini salah satu sumber paling umum dari hasil SQL yang membingungkan, dan topik ini punya halamannya sendiri nanti. Untuk sekarang, perhatikan saja bahwa NULL menular lewat ekspresi.
Yang Perlu Kamu Ingat
SELECT <columns> FROM <table>;adalah bentuk setiap query.- Tuliskan kolom secara eksplisit di kode sungguhan; simpan
SELECT *untuk eksplorasi. - Daftar
SELECTbisa berisi ekspresi apa pun, bukan hanya nama kolom. - Pakai
ASuntuk memberi nama yang layak pada kolom hasil perhitungan dan tabel yang diberi alias. NULLmenular lewat aritmetika, jadi ingat hal itu saat hasilnya terlihat janggal.
Selanjutnya: Memfilter dengan WHERE
Sejauh ini setiap query mengembalikan semua baris di tabel. Klausa WHERE adalah cara mempersempitnya: memilih baris berdasarkan harga, nama, tanggal, atau ekspresi apa pun yang bernilai benar atau salah. Itulah dokumen berikutnya.
Pertanyaan yang sering diajukan
Bagaimana sintaks dasar SELECT di SQLite?
SELECT <columns> FROM <table>;. Kolomnya bisa berupa daftar yang dipisahkan koma (SELECT name, email FROM users), * untuk semua kolom, atau ekspresi apa pun seperti price * quantity. Klausa FROM menyebutkan tabel yang dibaca, dan titik koma mengakhiri pernyataannya.
Sebaiknya memakai SELECT * di SQLite atau tidak?
Tidak masalah saat kamu sedang melihat-lihat isi tabel di CLI. Di kode aplikasi, tuliskan kolom yang benar-benar kamu butuhkan. SELECT * mengikat kodemu ke skema saat ini: tambahkan satu kolom besok, dan setiap query diam-diam mengembalikan lebih banyak data, yang bisa merusak kode yang membongkar baris berdasarkan posisi.
Bagaimana cara mengganti nama kolom di hasil SELECT?
Gunakan AS untuk memberi alias pada kolom atau ekspresi: SELECT price * quantity AS total FROM orders. Alias itu menjadi nama kolom di hasil query, yang penting untuk keterbacaan dan untuk kode yang membaca hasil berdasarkan nama kolom. Kata kunci AS opsional, tapi layak dipertahankan supaya jelas.