Belajar dengan membaca secara berurutan

SELECT — Mengambil Data dari Tabel

Pelajari pernyataan SQL SELECT dari dasar. Mencakup pemilihan semua kolom dan kolom tertentu, alias AS, penyaringan baris dengan WHERE, serta kombinasi operator pembanding dengan AND / OR — semuanya berjalan langsung di browser kamu.

Tentang SQL yang dipelajari di kursus ini

Kursus ini mengajarkan sintaks SQL universal yang berjalan di RDBMS utama — MySQL, Oracle, PostgreSQL, SQL Server, dan lainnya. Dasar-dasar seperti CREATE TABLE / SELECT / WHERE / JOIN / GROUP BY ditulis dengan cara yang sama, tidak peduli database mana yang kamu pakai.

Karena alasan teknis, konsol di browser ini menjalankan SQLite, tapi setiap kali ada fitur yang berbeda antar database (penegakan panjang pada tipe, cara menampilkan daftar tabel, dll.), kamu akan menemukan catatan berdampingan seperti Di MySQL kamu akan menulis... supaya kamu tahu apa yang dipakai di tempat lain.

SELECT — ambil semua kolom

Untuk mengambil data dari tabel, kamu memakai pernyataan SELECT. SELECT adalah konstruksi yang paling banyak dipakai di SQL: pembuatan laporan, render layar, analisis data, batch processing — hampir semua operasi yang "membaca" data dimulai dengan SELECT.

Mari mulai dengan bentuk yang mengambil semua kolom dari tabel apa adanya. * (asterisk) di SELECT * adalah simbol untuk "semua kolom," dan FROM nama_tabel yang mengikutinya menentukan tabel mana yang diambil.

-- Ambil semua kolom dan semua baris dari tabel user
SELECT * FROM user;
Struktur pernyataan SELECT
SELECTFROMWHEREDaftar kolom* / name, ageNama tabeluserKondisi barisage >= 30Pilih kolomTabel targetSaring baris
SELECT menentukan kolom mana yang diambil, FROM menentukan tabel mana yang diambil datanya, dan WHERE menentukan baris mana yang dipertahankan. Rasakan posisi dan peran masing-masing.

Ambil semua kolom dan semua baris dari tabel user yang disiapkan di awal artikel. (Jalankan dengan benar dan penjelasannya akan muncul.)

① Tulis dan jalankan SELECT * FROM user;.

② Pastikan hasilnya mengembalikan 5 baris dengan empat kolom id / name / age / city.

SQL Editor

Jalankan query untuk melihat hasil

Mengambil hanya kolom tertentu

SELECT * praktis, tapi di aplikasi sungguhan sering lebih baik mengambil hanya kolom yang kamu butuhkan. Volume data yang dikirim dan diterima berkurang, hanya kolom yang ingin kamu tampilkan yang kembali, dan pemrosesan setelahnya jadi lebih sederhana.

Untuk memilih kolom, daftar nama kolom yang dipisah koma tepat setelah SELECT. Urutan yang kamu tulis adalah urutan tampilannya di hasil.

Semua kolom vs kolom tertentu — pilihan kolom mengubah volume data
SELECT *SELECT name, age4 kolom(id / name / age / city)2 kolom(name / age)Semua kolom muncul di hasilHanya kolom yang dibutuhkanLihat data sekilasAplikasi produksi & laporanPersempit kolomPersempit outputPilih sesuai kebutuhan
SELECT mengembalikan setiap kolom (bagus untuk inspeksi), dan daftar kolom hanya mengembalikan apa yang kamu butuhkan (bagus untuk produksi). Panah di setiap baris membandingkan "kiri (SELECT ) vs kanan (SELECT name, age)" pada dimensi yang sama.
-- Ambil hanya name dan age (2 kolom)
SELECT name, age FROM user;

-- Kamu juga bisa mengubah urutan kolom
SELECT city, name FROM user;

Bayangkan layar daftar pengguna yang hanya perlu menampilkan "nama dan umur."

① Dari tabel user, ambil hanya kolom name dan age dengan urutan itu.

② Pastikan hasilnya 5 baris × 2 kolom dan id serta city tidak disertakan.

SQL Editor

Jalankan query untuk melihat hasil

AS — memberi alias pada kolom

Secara default, header kolom di hasil SELECT menampilkan nama kolom asli. Dengan kolom AS alias kamu bisa mengubah nama kolom di sisi hasil menjadi apa pun yang kamu mau. Ini tidak mengubah nama kolom di tabel asli — itu hanyalah "apa yang harus kolom ini disebut di hasil SELECT ini."

Alias juga berguna saat kamu ingin memberi nama pada ekspresi. Aritmetika seperti age + 1 atau hasil fungsi agregat seperti SUM(price) tidak punya nama kolom default, jadi tanpa AS, header akan menjadi ekspresi mentahnya — tidak nyaman ditampilkan atau dipakai dari kode aplikasi kamu.

Cara kerja AS — menulis ulang header kolom hasil
Pernyataan SELECTHeader hasilContoh nilaiSELECT name FROM username(nama asli)Alice / Bob /...SELECT name AS user_name FROM useruser_name(alias)Alice / Bob /...(nilai tidak berubah)SELECT age + 1 AS next_year FROM usernext_year(nama untuk ekspresi)31 / 26 /...(age + 1)Hanya header jadi aliasBeri nama pada ekspresi
AS hanya mengubah header di sisi hasil; nama kolom asli di tabel tidak berubah. Hasil aritmetika dan fungsi agregat tidak punya nama default, jadi memberi nama dengan AS adalah pendekatan standar.
-- Beri alias pada kolom
SELECT name AS user_name, age AS user_age FROM user;

-- Beri alias pada ekspresi (menghitung umur tahun depan)
SELECT name, age + 1 AS next_year_age FROM user;

AS bisa dihilangkan

SELECT name AS user_name FROM user; dan SELECT name user_name FROM user; (dengan AS dihilangkan) artinya sama. Walau begitu, menulis AS membuat "ini sekarang alias" jelas bagi pembaca, jadi kursus ini selalu menulis AS secara eksplisit.

Kalau kamu butuh spasi atau karakter non-ASCII di alias, bungkus dengan tanda kutip ganda: AS "Umur Tahun Depan".

Bayangkan layar daftar pengguna yang harus menampilkan "umur sekarang" beserta "umur tahun depan."

① Dari tabel user, ambil name, age, dan age + 1.

② Pakai AS untuk memberi alias pada kolom ketiga (age + 1) sebagai next_year_age.

③ Pastikan hasilnya 5 baris × 3 kolom dan header kolom ketiga adalah next_year_age.

SQL Editor

Jalankan query untuk melihat hasil

WHERE — menyaring baris berdasarkan kondisi

Sejauh ini kamu sudah belajar memilih kolom. Sekarang mari lihat menyaring baris. Dengan menambahkan WHERE kondisi setelah SELECT kolom FROM tabel, hanya baris yang memenuhi kondisi yang masuk ke hasil.

Membantu jika kamu menganggap SELECT memilih secara vertikal (kolom) dan WHERE memilih secara horizontal (baris).

SELECT mempersempit kolom; WHERE mempersempit baris
SELECT name, age (mempersempit secara vertikal)WHERE id = 2 (mempersempit secara horizontal → 1 baris)idnameagecity1Alice30Tokyo2Bob25Osaka3Carol35Tokyo
SELECT name, age (pita vertikal hijau) memotong 4 kolom menjadi 2; WHERE id = 2 (pita horizontal biru) memotong 3 baris menjadi 1. Perpotongannya — name dan age Bob — adalah hasil akhir 1 baris × 2 kolom.

Operator pembanding

Di dalam WHERE, kondisi memakai operator pembanding (simbol yang membandingkan nilai dan mengembalikan true/false). Operator pembanding SQL mirip dengan bahasa pemrograman lain, dengan satu catatan: kesetaraan ditulis dengan satu =, bukan ==.

OperatorArtiContoh
=Sama denganage = 30
<>Tidak sama dengan (!= juga bisa)city <> 'Tokyo'
<Lebih kecil dariage < 30
>Lebih besar dariage > 30
<=Lebih kecil atau sama denganage <= 30
>=Lebih besar atau sama denganage >= 30
-- Ambil pengguna berusia 30 ke atas
SELECT * FROM user WHERE age >= 30;

-- Ambil baris yang city-nya Tokyo (string ditulis dalam tanda kutip tunggal)
SELECT * FROM user WHERE city = 'Tokyo';

-- Ambil baris yang city-nya selain Tokyo
SELECT * FROM user WHERE city <> 'Tokyo';

Perbandingan string dengan `=` sensitif huruf besar/kecil

Di konsol kursus ini, perbandingan string dengan `=` sensitif huruf besar/kecil. WHERE name = 'alice' tidak akan cocok dengan 'Alice' — hasilnya 0 baris. Di MySQL, collation sering membuat perbandingan ini tidak sensitif huruf besar/kecil secara default, jadi query yang sama bisa mengembalikan 1 baris.

`WHERE kolom = NULL` tidak bekerja seperti yang kamu harapkan

Menulis WHERE name = NULL tidak akan mengambil "baris yang name-nya NULL." Di SQL, NULL diperlakukan sebagai "tidak diketahui," dan = NULL selalu mengevaluasi menjadi NULL — yang disaring keluar oleh WHERE. Untuk mengambil baris NULL, pakai WHERE kolom IS NULL yang khusus. Kita membahas ini secara rinci di artikel WHERE lanjutan — untuk sekarang, ingat saja "jangan pakai = NULL."

Bayangkan kebutuhan: "tampilkan setiap pengguna berusia 30 atau lebih."

① Dari tabel user, ambil setiap baris yang age-nya 30 atau lebih.

② Pastikan hasilnya 3 baris (Alice / Carol / Eve) dan Bob serta Dave tidak disertakan.

SQL Editor

Jalankan query untuk melihat hasil

AND / OR — menggabungkan banyak kondisi

Dalam pekerjaan sungguhan kamu sering perlu menggabungkan kondisi: "pengguna di Tokyo berusia 30 ke atas," "anggota dengan rank gold atau platinum." SQL menggabungkan kondisi dengan AND (keduanya benar) dan OR (salah satu benar).

Satu operator lain yang berguna adalah NOT (negasi kondisi). NOT (city = 'Tokyo') artinya "bukan Tokyo." <> melakukan tugas yang sama, jadi untuk sekarang fokus saja pada AND dan OR.

Operator logikaArtiContoh
ANDKedua kondisi benarage >= 30 AND city = 'Tokyo'
ORSalah satu kondisi benarcity = 'Tokyo' OR city = 'Osaka'
NOTNegasi kondisiNOT (city = 'Tokyo')
-- Pengguna di Tokyo berusia 30 ke atas
SELECT name, age, city FROM user WHERE city = 'Tokyo' AND age >= 30;

-- Pengguna di Tokyo atau Osaka
SELECT name, city FROM user WHERE city = 'Tokyo' OR city = 'Osaka';

Pakai tanda kurung saat mencampur AND dan OR

Saat AND dan OR muncul di WHERE yang sama, AND dievaluasi sebelum OR. A OR B AND C sebenarnya berarti A OR (B AND C) — bukan urutan yang kamu tulis.

Untuk menghindari kejutan, buat urutan evaluasi eksplisit dengan tanda kurung saat mencampur AND dan OR. Misalnya, "(Tokyo atau Osaka) dan 30 ke atas" adalah WHERE (city = 'Tokyo' OR city = 'Osaka') AND age >= 30. Tanda kurung juga membuat maksudmu jelas bagi pembaca — kalau ragu, tambahkan saja.

Bayangkan kebutuhan: "daftar nama dan kota pengguna yang tinggal di Tokyo atau Osaka, berusia 25 ke atas, dan bukan Carol." Latihan ini melatih menggabungkan AND, OR, dan NOT.

① Dari tabel user, ambil name dan city.

② Pakai WHERE yang menggabungkan tiga kondisi dengan AND: `city` adalah `'Tokyo'` atau `'Osaka'`, `age` adalah 25 ke atas, dan `name` bukan `'Carol'`. Buat urutan evaluasi bagian OR eksplisit dengan tanda kurung.

③ Pastikan hasilnya 3 baris (Alice Tokyo / Bob Osaka / Eve Tokyo), dengan Carol (Tokyo / 35) dan Dave (Kyoto / 28) dikeluarkan.

SQL Editor

Jalankan query untuk melihat hasil
QUIZ

Cek Pemahaman

Jawab setiap pertanyaan satu per satu.

Soal 1Apa arti * di SELECT * FROM user;?

Soal 2Mana yang paling tepat menggambarkan peran SELECT dan WHERE?

Soal 3Apa arti operator pembanding SQL <>?