Lompat ke konten utama

Kompetisi Ajak Teman: hadiah total Rp1.000.000 tunai untuk 3 pengajak terbanyak. Berakhir 29 November 2026. Ikut kompetisi

Masuk

Contekan Data

Contekan Query SQL dari SELECT sampai Window Function

SELECT, WHERE, LIKE, GROUP BY dan HAVING, JOIN, CASE WHEN, subkueri, CTE, fungsi tanggal, dan window function — klausa SQL yang dipakai menyusun laporan, masing-masing menaut ke latihan yang menjalankan kuerimu.

38 baris · Diperbarui

Mengambil kolom

Contoh memakai dialek SQLite. Teks dan tanggal ditulis di antara kutip tunggal; kutip ganda menandai nama kolom.

Menyaring baris

  • Menyisakan baris yang syaratnya benar. Angka ditulis tanpa pemisah ribuan.

    SELECT nama, stok FROM produk WHERE stok < 50;

  • AND menuntut semua syarat, OR cukup salah satunya. AND diperiksa lebih dulu; tanda kurung memaksa urutan lain.

    WHERE kota = 'Jakarta' OR kota = 'Bandung'

  • Mencocokkan pola teks: % berarti nol karakter atau lebih, _ tepat satu karakter.

    WHERE nama LIKE 'Pulpen%'

  • Benar bila nilainya sama dengan salah satu isi daftar; pengganti beberapa = yang digabung OR.

    WHERE kota IN ('Medan', 'Makassar')

  • Rentang nilai dengan kedua batas ikut terhitung. Batas kecil ditulis lebih dulu, atau hasilnya kosong.

    WHERE stok BETWEEN 20 AND 60

  • Memeriksa sel yang belum terisi. Syarat = NULL tidak pernah benar, sehingga hasilnya selalu kosong.

    WHERE kota IS NULL

Mengurutkan dan meringkas

Urutan kerjanya: FROM, WHERE, GROUP BY, HAVING, ORDER BY, lalu LIMIT.

  • Mengurutkan hasil. ASC (kecil ke besar) berlaku bila arahnya tidak ditulis; DESC dari besar ke kecil.

    ORDER BY stok DESC

  • ORDER BY a ASC, b DESCLatih: ORDER BY dengan dua kolom

    Kolom kedua hanya mengurutkan baris yang nilai kolom pertamanya sama. Tiap kolom punya arahnya sendiri.

    ORDER BY kota ASC, nama DESC

  • COUNT / SUM / AVG / MIN / MAXLatih: COUNT, SUM, AVG, MIN, MAX

    Meringkas banyak baris menjadi satu nilai. Tanpa GROUP BY, hasilnya selalu satu baris.

    SELECT MIN(harga), MAX(harga), AVG(harga) FROM produk;

  • COUNT(*) menghitung semua baris; COUNT(kolom) hanya yang kolomnya terisi. Selisihnya adalah jumlah sel kosong.

    SELECT COUNT(*) AS baris, COUNT(kota) AS kota_terisi FROM pelanggan;

  • Memecah baris menjadi kelompok dan menghitung agregat per kelompok: satu baris hasil per kelompok.

    SELECT kota, COUNT(*) FROM pelanggan GROUP BY kota;

  • Menyaring kelompok sesudah agregatnya dihitung; WHERE menyaring baris sebelum dikelompokkan.

    GROUP BY kota HAVING COUNT(*) >= 2

Menggabungkan tabel

  • Memasangkan baris dua tabel menurut syarat ON. JOIN tanpa keterangan berarti INNER JOIN: baris tanpa pasangan tidak ikut.

    FROM pesanan JOIN pelanggan ON pelanggan.id = pesanan.pelanggan_id

  • Alias tabel: nama pendek yang berlaku selama kueri. Dua alias untuk satu tabel menghasilkan self-join.

    FROM produk AS a JOIN produk AS b ON b.kategori = a.kategori AND b.harga > a.harga

  • Menahan semua baris tabel kiri dan mengisi kolom tabel kanan dengan NULL bila pasangannya tidak ada — jawaban untuk pertanyaan "mana yang belum pernah".

    FROM produk LEFT JOIN detail_pesanan ON detail_pesanan.produk_id = produk.id

  • Menumpuk hasil beberapa SELECT berkolom sama menjadi satu; di SQLite dipakai sebagai padanan ROLLUP untuk subtotal dan total.

  • Menyisipkan hasil sebuah SELECT ke tabel lain, misalnya baris staging yang belum ada di tabel dimensi.

Logika, subkueri, dan CTE

  • Nilai pertama yang tidak NULL dari kiri; dipakai menulis keterangan pengganti untuk sel kosong.

    COALESCE(kota, 'Tidak diisi') AS kota

  • CASE WHEN … THEN … ELSE … ENDLatih: Membuat kategori dengan CASE

    Mengubah nilai menjadi kategori. Syarat diperiksa dari atas dan berhenti di yang pertama benar; ELSE untuk sisanya.

    CASE WHEN jumlah >= 20 THEN 'grosir' WHEN jumlah >= 5 THEN 'partai' ELSE 'eceran' END

  • SUM(CASE WHEN … THEN 1 ELSE 0 END)Latih: Menghitung bersyarat dengan CASE

    Hitungan bersyarat sebagai kolom: beberapa kategori muncul berdampingan dalam satu baris hasil.

    SUM(CASE WHEN status = 'batal' THEN 1 ELSE 0 END) AS batal

  • WHERE x IN (SELECT …)Latih: Subkueri dengan IN

    Subkueri yang menghasilkan daftar nilai sebagai syarat. NOT IN membalik pertanyaannya menjadi "yang belum".

    WHERE id IN (SELECT produk_id FROM detail_pesanan WHERE pesanan_id = 3)

  • Subkueri skalar: satu nilai ringkasan yang dibandingkan dengan setiap baris dan dihitung ulang tiap kueri dijalankan.

    WHERE stok < (SELECT AVG(stok) FROM produk)

  • CTE: hasil antara bernama yang dipakai seperti tabel di kueri utamanya. Beberapa CTE dipisah koma.

    WITH elektronik AS (SELECT * FROM produk WHERE kategori = 'Elektronik') SELECT nama FROM elektronik;

Fungsi SQLite

  • date(tanggal, '+7 day')Latih: Fungsi tanggal SQLite

    Tanggal baru dari tanggal lama: '+1 month' menambah sebulan, 'start of month' mundur ke tanggal satu.

    SELECT date(tanggal, '+7 day') AS jatuh_tempo FROM pesanan;

  • strftime('%Y-%m', tanggal)Latih: Fungsi tanggal SQLite

    Bagian tanggal sebagai teks: %Y tahun, %m bulan dua digit, %d tanggal. '%Y-%m' menjadi kolom periode untuk rekap bulanan.

  • upper / lower / substr / lengthLatih: Fungsi teks dan angka SQLite

    Menyeragamkan huruf, mengambil potongan teks (posisi pertama bernomor 1), dan menghitung panjangnya.

    SELECT substr(nama, 1, 1) AS inisial FROM pelanggan;

  • Membulatkan ke n angka di belakang koma, dan menyusun teks berformat seperti label Rupiah.

    SELECT printf('Rp%d', harga) AS label FROM produk;

Window function

Window function menghitung nilai untuk setiap baris tanpa meringkasnya; penandanya OVER.

Kelas terkait

Contekan lain