Basis data & SQL: latihan soal dengan penjelasan

Latihan soal pilihan ganda Basis data & SQL gratis dengan petunjuk dan penjelasan, dalam tiga tingkat: istilah dan fakta kunci, menerapkan konsep, kasus dan analisis.

Soal latihan gratisMudah

Constraint manakah yang memastikan sebuah kolom tidak pernah dibiarkan kosong (NULL)?

Soal berikutnya →

Yang Anda latih

  1. Mudahistilah dan fakta kunci
  2. Sedangmenerapkan konsep
  3. Sulitkasus dan analisis

Pelajari Basis data & SQL dari nol

1Apa itu basis data relasional

Basis data relasional menyimpan data dalam tabel. Tabel terlihat seperti lembar kerja: setiap baris adalah satu rekaman, setiap kolom adalah satu properti.

Sebuah toko mungkin memiliki tabel customers dengan kolom id, name, dan city, serta tabel orders dengan kolom id, customer_id, dan total.

Kunci primer adalah kolom, atau sekumpulan kolom, yang mengidentifikasi setiap baris secara unik. Nilainya tidak boleh berulang dan tidak boleh kosong. Di sini itu adalah id setiap tabel.

Kunci asing adalah kolom yang merujuk ke kunci primer tabel lain. Pada orders, customer_id menyatakan pelanggan mana yang membuat pesanan.

Begitulah tabel-tabel dihubungkan: satu pelanggan dapat memiliki banyak pesanan, tetapi setiap pesanan milik satu pelanggan. Itu adalah relasi satu-ke-banyak.

SQL (Structured Query Language) adalah bahasa untuk membuat tabel, mengubah data, dan mengajukan pertanyaan tentangnya.

Tes mandiri Apa itu kunci primer?
  1. Indeks yang membuat pencarian lebih cepat
  2. Kolom atau sekumpulan kolom yang mengidentifikasi setiap baris secara unik
  3. Kolom pertama setiap tabel
  4. Kolom yang merujuk ke baris di tabel lain

Jawaban: Kolom atau sekumpulan kolom yang mengidentifikasi setiap baris secara unik. Kunci primer bersifat unik dan tidak pernah NULL, jadi ia menunjuk tepat satu baris. Kolom yang merujuk ke tabel lain adalah kunci asing.

2Membaca data dengan SELECT

Sebagian besar pertanyaan menyangkut pernyataan SELECT. Pernyataan ini disusun dari klausa, selalu ditulis dalam urutan ini:

SELECT … FROM … WHERE … GROUP BY … HAVING … ORDER BY …
  • SELECT mendaftar kolom yang Anda inginkan. DISTINCT menghapus baris duplikat.
  • FROM menyebut tabel, atau tabel-tabel yang digabungkan.
  • WHERE hanya mempertahankan baris yang memenuhi suatu syarat, misalnya WHERE total > 20.
  • GROUP BY menaruh baris bernilai sama ke dalam satu kelompok, sehingga Anda dapat menghitung atau menjumlahkan per kelompok.
  • HAVING hanya mempertahankan kelompok yang memenuhi suatu syarat. Ia boleh memakai agregat, yang tidak boleh dipakai WHERE.
  • ORDER BY mengurutkan hasil, menaik secara bawaan; tambahkan DESC untuk yang tertinggi lebih dulu.

Fungsi agregat meringkas banyak baris menjadi satu nilai: COUNT, SUM, AVG, MIN, dan MAX.

Basis data tidak menjalankan klausa sesuai urutan penulisan Anda. Ia menjalankan FROM lebih dulu, lalu WHERE, GROUP BY, HAVING, SELECT, dan terakhir ORDER BY.

Pernyataan lain mengubah data: INSERT menambah baris, UPDATE mengubah baris, dan DELETE menghapus baris. CREATE, ALTER, dan DROP mengubah tabelnya sendiri.

Tes mandiri Anda hanya menginginkan pelanggan dengan lebih dari 5 pesanan. Klausa mana yang memfilter COUNT(*) > 5?
  1. DISTINCT
  2. HAVING
  3. ORDER BY
  4. WHERE

Jawaban: HAVING. Hitungan baru ada setelah baris dikelompokkan, dan HAVING memfilter kelompok. WHERE berjalan sebelum pengelompokan, sehingga tidak dapat memakai agregat seperti COUNT.

3Join, normalisasi, dan transaksi

Join menggabungkan baris dua tabel dengan suatu syarat, biasanya kunci asing = kunci primer:

FROM customers c JOIN orders o ON o.customer_id = c.id
  • INNER JOIN (atau JOIN) hanya mempertahankan baris yang memiliki pasangan di kedua tabel.
  • LEFT JOIN mempertahankan setiap baris tabel kiri. Bila tidak ada pasangan, kolom tabel kanan bernilai NULL.
  • NULL berarti nilai hilang atau tidak diketahui. Ujilah dengan IS NULL, jangan pernah dengan = NULL.

Normalisasi memecah tabel sehingga setiap fakta disimpan sekali. Ini menghindari pembaruan fakta yang sama di beberapa tempat.

  • 1NF: setiap sel berisi satu nilai atomik, tanpa kelompok berulang.
  • 2NF: 1NF, dan setiap kolom non-kunci bergantung pada seluruh kunci, bukan sebagian kunci komposit.
  • 3NF: 2NF, dan tidak ada kolom non-kunci yang bergantung pada kolom non-kunci lain.

Transaksi mengelompokkan pernyataan menjadi satu kesatuan. COMMIT membuatnya permanen dan ROLLBACK membatalkannya. Transaksi mengikuti ACID: atomisitas (semua atau tidak sama sekali), konsistensi, isolasi, dan durabilitas.

Tes mandiri Seorang pelanggan belum pernah memesan. Apa yang terjadi pada pelanggan itu dalam customers LEFT JOIN orders?
  1. Kueri gagal dengan galat
  2. Pelanggan muncul satu kali, dengan NULL pada kolom pesanan
  3. Pelanggan muncul sebanyak jumlah pesanan di tabel
  4. Pelanggan tidak ada dalam hasil

Jawaban: Pelanggan muncul satu kali, dengan NULL pada kolom pesanan. LEFT JOIN mempertahankan setiap baris tabel kiri dan mengisi sisi kanan yang hilang dengan NULL. Menghilangkan pelanggan adalah yang dilakukan INNER JOIN.

4Metode ini selangkah demi selangkah

Untuk menulis kueri, atau mencari tahu apa yang dikembalikan suatu kueri:

  1. Temukan tabel yang menyimpan data, dan bagaimana tabel-tabel itu dihubungkan oleh kunci.
  2. Tulis FROM dengan join-nya. Pilih LEFT JOIN bila baris tanpa pasangan harus tetap ada.
  3. Tambahkan WHERE untuk syarat pada satu baris.
  4. Jika soal menyebut “per” atau “untuk setiap”, tambahkan GROUP BY dan agregatnya.
  5. Tambahkan HAVING untuk syarat pada agregat, lalu ORDER BY bila urutan penting.
  6. Periksa hasil pada contoh kecil: daftarkan baris setelah setiap klausa, dalam urutan yang dijalankan basis data.

Untuk soal teori, sebutkan dulu konsepnya (kunci, jenis join, bentuk normal, sifat ACID), lalu pilih opsi yang sesuai definisinya.

5Contoh soal lengkap

Ikuti setiap langkah. Cobalah menebak langkah berikutnya sebelum membukanya.

Contoh soal

Tabel customers memiliki baris (1, Ana), (2, Ben), dan (3, Cas). Tabel orders memiliki baris (id, customer_id) = (10, 1), (11, 1), (12, 2), dan (13, 1). Apa yang dikembalikan kueri ini? SELECT c.name, COUNT(o.id) FROM customers c LEFT JOIN orders o ON o.customer_id = c.id GROUP BY c.name

1

Jalankan FROM dan join

Setiap pelanggan dipasangkan dengan pesanan yang membawa id-nya. Ana cocok dengan pesanan 10, 11, dan 13. Ben cocok dengan pesanan 12.

Cas tidak memiliki pesanan. Karena ini LEFT JOIN, Cas tetap ada dalam hasil, dengan NULL untuk o.id.

2

Daftarkan baris hasil join

  • Ana, 10
  • Ana, 11
  • Ana, 13
  • Ben, 12
  • Cas, NULL

Itu 5 baris.

3

Kelompokkan menurut name

GROUP BY c.name membuat tiga kelompok: Ana dengan 3 baris, Ben dengan 1 baris, dan Cas dengan 1 baris.

4

Hitung per kelompok

COUNT(o.id) hanya menghitung nilai yang bukan NULL. Ana mendapat 3 dan Ben mendapat 1.

Cas punya satu baris, tetapi o.id-nya NULL, jadi Cas mendapat 0.

5

Periksa jawabannya

Ana, Ben, dan Cas bersama-sama memiliki 3 + 1 + 0 = 4 pesanan, sama dengan jumlah baris di orders. Dengan COUNT(*), Cas keliru mendapat 1, karena COUNT(*) menghitung barisnya sendiri.

Jawaban

Ana 3, Ben 1, Cas 0.

6Kesalahan umum

  • Memakai agregat di WHERE. Syarat pada COUNT, SUM, atau AVG termasuk dalam HAVING.
  • Menulis = NULL. Setiap perbandingan dengan NULL tidak diketahui hasilnya; pakai IS NULL atau IS NOT NULL.
  • Memakai INNER JOIN ketika baris tanpa pasangan harus tetap ada. Pakai LEFT JOIN.
  • Lupa syarat join. Tanpa ON, setiap baris dipasangkan dengan setiap baris (cross join).
  • Memilih kolom yang tidak ada di GROUP BY dan tidak berada di dalam agregat.
  • Mencampuradukkan DELETE (menghapus baris) dan DROP TABLE (menghapus seluruh tabel).
  • Menjalankan UPDATE atau DELETE tanpa WHERE. Itu mengubah setiap baris dalam tabel.
Tes mandiri Sebuah tabel memiliki 10 baris, dan kolom col bernilai NULL di setiap baris. Apa yang dikembalikan SELECT COUNT(col)?
  1. 0
  2. 10
  3. 1
  4. NULL

Jawaban: 0. COUNT(col) hanya menghitung nilai yang bukan NULL, jadi hasilnya 0. COUNT(*) menghitung baris dan akan mengembalikan 10.

7Seperti apa soal ujiannya

  • Mudah: istilah dan fakta kunci. Apa yang dilakukan SELECT, WHERE, ORDER BY, atau DELETE, kunci primer dan kunci asing, apa arti NULL.
  • Sedang: menerapkan konsep. Kueri yang tepat untuk suatu tugas, WHERE versus HAVING, join dalam versus luar, bentuk normal, ACID.
  • Sulit: kasus dan analisis. Subkueri, tingkat isolasi dan anomalinya, BCNF, fungsi jendela, indeks dan kinerja kueri, injeksi SQL.

Bila diberi kueri, telusuri pada beberapa baris dalam urutan FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY. Sebagian besar jebakan terlihat dalam tiga baris.

Pelajari selangkah demi selangkah di aplikasiPelajari selangkah demi selangkah di aplikasi

Contoh soal

Contoh 1Mudah

Apa yang dilakukan UNION terhadap hasil dua kueri SELECT?

  1. AMenggabungkannya berdampingan pada suatu kunci
  2. BHanya mempertahankan baris yang muncul di keduanya
  3. CMenggabungkannya menjadi satu hasil dan menghapus baris duplikat
  4. DHanya mempertahankan baris yang muncul di kueri pertama tetapi tidak di kueri kedua
Tampilkan petunjuk
  1. Kedua kueri harus memiliki jumlah kolom yang sama dan kompatibel.
  2. Dua jawaban salah kini dicoret. Salah satu dari dua yang tersisa benar.
Tampilkan jawaban dan penjelasan

Mengapa ini jawabannya

UNION menumpuk baris kedua kueri dan menghapus duplikat; UNION ALL mempertahankan duplikat.

Jawaban

C · Menggabungkannya menjadi satu hasil dan menghapus baris duplikat
Contoh 2Sedang

Apa yang dikembalikan oleh SELECT SUM(amount) FROM orders ketika klausa WHERE tidak cocok dengan baris mana pun?

  1. AError
  2. B0
  3. CNULL
  4. DString kosong
Tampilkan petunjuk
  1. SUM berbeda dari COUNT dalam hal ini.
  2. Dua jawaban salah kini dicoret. Salah satu dari dua yang tersisa benar.
Tampilkan jawaban dan penjelasan

Mengapa ini jawabannya

SUM, AVG, MIN, dan MAX mengembalikan NULL pada himpunan kosong, sedangkan COUNT mengembalikan 0; COALESCE(SUM(amount), 0) menghasilkan 0 sebagai gantinya.

Jawaban

C · NULL
Contoh 3Sulit

Apa yang dikembalikan oleh SELECT name, dept, AVG(salary) OVER (PARTITION BY dept) FROM emp?

  1. AHanya karyawan yang bergaji di atas rata-rata departemennya
  2. BSetiap baris karyawan beserta rata-rata gaji departemennya
  3. CError karena name tidak ada di GROUP BY
  4. DSatu baris per departemen dengan rata-rata gajinya
Tampilkan petunjuk
  1. Window function tidak meringkas baris.
  2. Dua jawaban salah kini dicoret. Salah satu dari dua yang tersisa benar.
Tampilkan jawaban dan penjelasan

Mengapa ini jawabannya

Berbeda dengan GROUP BY, window function mempertahankan setiap baris masukan dan menambahkan nilai yang dihitung atas partisinya, di sini departemen.

Jawaban

B · Setiap baris karyawan beserta rata-rata gaji departemennya

Tanya jawab

Apa itu Basis data & SQL?

Sebuah toko mungkin memiliki tabel customers dengan kolom id, name, dan city, serta tabel orders dengan kolom id, customer_id, dan total.

Begitulah tabel-tabel dihubungkan: satu pelanggan dapat memiliki banyak pesanan, tetapi setiap pesanan milik satu pelanggan. Itu adalah relasi satu-ke-banyak.

Bagaimana cara belajar Basis data & SQL langkah demi langkah?
  1. Apa itu basis data relasional
  2. Membaca data dengan SELECT
  3. Join, normalisasi, dan transaksi
  4. Metode ini selangkah demi selangkah
  5. Contoh soal lengkap
  6. Kesalahan umum
  7. Seperti apa soal ujiannya
Apa saja yang dilatih dalam soal Basis data & SQL?
  • Mudah: istilah dan fakta kunci
  • Sedang: menerapkan konsep
  • Sulit: kasus dan analisis

Setiap soal memiliki empat pilihan, dan hanya satu yang benar. Buntu? Buka petunjuk kecil terlebih dahulu, dan penjelasan lengkap hanya jika Anda membutuhkannya.

Cara kerja latihan

  • Setiap soal memiliki empat pilihan, dan hanya satu yang benar.
  • Buntu? Buka petunjuk kecil terlebih dahulu, dan penjelasan lengkap hanya jika Anda membutuhkannya.
  • Kemajuan, kesalahan, dan soal tersimpan Anda disimpan, sehingga Anda dapat mengulasnya sebelum ujian.

Mata kuliah dengan topik ini

Topik lain di Ilmu komputer

Lembar kerja yang dapat dicetak