Pangkalan data & SQL: soalan latihan dengan penerangan

Soalan latihan aneka pilihan Pangkalan data & SQL percuma dengan petunjuk dan penerangan, pada tiga tahap: istilah dan fakta utama, menggunakan konsep, kes dan analisis.

Soalan latihan percumaMudah

Kekangan manakah yang memastikan lajur tidak boleh dibiarkan kosong (NULL)?

Soalan seterusnya →

Apa yang anda latih

  1. Mudahistilah dan fakta utama
  2. Sederhanamenggunakan konsep
  3. Sukarkes dan analisis

Pelajari Pangkalan data & SQL dari awal

1Apakah pangkalan data hubungan

Pangkalan data hubungan menyimpan data dalam jadual. Jadual kelihatan seperti hamparan: setiap baris ialah satu rekod, setiap lajur ialah satu sifat.

Sebuah kedai mungkin mempunyai jadual customers dengan lajur id, name dan city, dan jadual orders dengan lajur id, customer_id dan total.

Kunci utama ialah lajur, atau set lajur, yang mengenal pasti setiap baris secara unik. Ia tidak boleh diulang dan tidak boleh kosong. Di sini itu ialah id setiap jadual.

Kunci asing ialah lajur yang merujuk kunci utama jadual lain. Dalam orders, customer_id menyatakan pelanggan mana yang membuat pesanan.

Beginilah jadual dipautkan: seorang pelanggan boleh mempunyai banyak pesanan, tetapi setiap pesanan tergolong dalam seorang pelanggan. Itulah hubungan satu-ke-banyak.

SQL (Structured Query Language) ialah bahasa yang anda gunakan untuk mencipta jadual, mengubah data dan mengemukakan soalan tentangnya.

Semakan kendiri Apakah kunci utama?
  1. Indeks yang menjadikan carian lebih pantas
  2. Lajur atau set lajur yang mengenal pasti setiap baris secara unik
  3. Lajur pertama setiap jadual
  4. Lajur yang merujuk baris dalam jadual lain

Jawapan: Lajur atau set lajur yang mengenal pasti setiap baris secara unik. Kunci utama adalah unik dan tidak pernah NULL, maka ia memilih tepat satu baris. Lajur yang merujuk jadual lain ialah kunci asing.

2Membaca data dengan SELECT

Kebanyakan soalan mengenai penyataan SELECT. Ia dibina daripada klausa, sentiasa ditulis dalam turutan ini:

SELECT … FROM … WHERE … GROUP BY … HAVING … ORDER BY …
  • SELECT menyenaraikan lajur yang anda mahu. DISTINCT membuang baris pendua.
  • FROM menamakan jadual, atau jadual yang digabungkan.
  • WHERE mengekalkan hanya baris yang memenuhi syarat, contohnya WHERE total > 20.
  • GROUP BY meletakkan baris yang mempunyai nilai sama ke dalam satu kumpulan, supaya anda boleh mengira atau menambah bagi setiap kumpulan.
  • HAVING mengekalkan hanya kumpulan yang memenuhi syarat. Ia boleh menggunakan agregat, yang tidak boleh digunakan oleh WHERE.
  • ORDER BY mengisih keputusan, menaik secara lalai; tambah DESC untuk yang tertinggi dahulu.

Fungsi agregat meringkaskan banyak baris kepada satu nilai: COUNT, SUM, AVG, MIN dan MAX.

Pangkalan data tidak menjalankan klausa mengikut turutan yang anda tulis. Ia menjalankan FROM dahulu, kemudian WHERE, GROUP BY, HAVING, SELECT dan akhirnya ORDER BY.

Penyataan lain mengubah data: INSERT menambah baris, UPDATE mengubah baris dan DELETE membuang baris. CREATE, ALTER dan DROP mengubah jadual itu sendiri.

Semakan kendiri Anda hanya mahu pelanggan dengan lebih daripada 5 pesanan. Klausa manakah yang menapis pada COUNT(*) > 5?
  1. DISTINCT
  2. HAVING
  3. ORDER BY
  4. WHERE

Jawapan: HAVING. Kiraan hanya wujud selepas baris dikumpulkan, dan HAVING menapis kumpulan. WHERE berjalan sebelum pengumpulan, maka ia tidak boleh menggunakan agregat seperti COUNT.

3Gabungan, penormalan dan transaksi

Gabungan (join) menggabungkan baris dua jadual menggunakan syarat, biasanya kunci asing = kunci utama:

FROM customers c JOIN orders o ON o.customer_id = c.id
  • INNER JOIN (atau JOIN) mengekalkan hanya baris yang mempunyai padanan dalam kedua-dua jadual.
  • LEFT JOIN mengekalkan setiap baris jadual kiri. Di mana tiada padanan, lajur jadual kanan ialah NULL.
  • NULL bermakna nilai hilang atau tidak diketahui. Ujinya dengan IS NULL, jangan sekali-kali dengan = NULL.

Penormalan memecahkan jadual supaya setiap fakta disimpan sekali. Ini mengelakkan pengemaskinian fakta yang sama di beberapa tempat.

  • 1NF: setiap sel mengandungi satu nilai atom, tanpa kumpulan berulang.
  • 2NF: 1NF, dan setiap lajur bukan kunci bergantung pada keseluruhan kunci, bukan sebahagian kunci komposit.
  • 3NF: 2NF, dan tiada lajur bukan kunci bergantung pada lajur bukan kunci yang lain.

Transaksi mengumpulkan penyataan menjadi satu unit. COMMIT menjadikannya kekal dan ROLLBACK membatalkannya. Transaksi mengikut ACID: atomik (semua atau tiada), konsistensi, pengasingan dan ketahanan.

Semakan kendiri Seorang pelanggan tidak membuat sebarang pesanan. Apakah yang berlaku kepada pelanggan itu dalam customers LEFT JOIN orders?
  1. Pelanggan itu ditinggalkan daripada keputusan
  2. Pelanggan itu muncul sekali bagi setiap pesanan dalam jadual
  3. Pelanggan itu muncul sekali, dengan NULL dalam lajur pesanan
  4. Pertanyaan gagal dengan ralat

Jawapan: Pelanggan itu muncul sekali, dengan NULL dalam lajur pesanan. LEFT JOIN mengekalkan setiap baris jadual kiri dan mengisi bahagian kanan yang hilang dengan NULL. Meninggalkan pelanggan itu ialah apa yang dilakukan oleh INNER JOIN.

4Kaedah langkah demi langkah

Untuk menulis pertanyaan, atau mengetahui apa yang dipulangkan oleh pertanyaan tertentu:

  1. Cari jadual yang menyimpan data, dan bagaimana ia dipautkan oleh kunci.
  2. Tulis FROM dengan gabungan. Pilih LEFT JOIN apabila baris tanpa padanan mesti kekal.
  3. Tambah WHERE untuk syarat pada baris tunggal.
  4. Jika soalan menyebut “setiap” atau “bagi setiap”, tambah GROUP BY dan agregat.
  5. Tambah HAVING untuk syarat pada agregat, kemudian ORDER BY jika susunan penting.
  6. Semak keputusan pada contoh kecil: senaraikan baris selepas setiap klausa, mengikut turutan pangkalan data menjalankannya.

Untuk soalan teori, namakan konsep dahulu (kunci, jenis gabungan, bentuk normal, sifat ACID), kemudian pilih pilihan yang sepadan dengan takrifannya.

5Contoh terselesai

Ikuti setiap langkah. Cuba ramalkan langkah seterusnya sebelum anda membukanya.

Contoh terselesai

Jadual customers mempunyai baris (1, Ana), (2, Ben) dan (3, Cas). Jadual orders mempunyai baris (id, customer_id) = (10, 1), (11, 1), (12, 2) dan (13, 1). Apakah yang dipulangkan oleh pertanyaan 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 gabungan

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

Cas tiada pesanan. Oleh kerana ia LEFT JOIN, Cas kekal dalam keputusan, dengan NULL untuk o.id.

2

Senaraikan baris yang digabungkan

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

Itu 5 baris.

3

Kumpulkan mengikut nama

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

4

Kira bagi setiap kumpulan

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

Cas mempunyai satu baris, tetapi o.id-nya NULL, maka Cas mendapat 0.

5

Semak jawapan

Ana, Ben dan Cas bersama mempunyai 3 + 1 + 0 = 4 pesanan, sama dengan bilangan baris dalam orders. Dengan COUNT(*) sebaliknya, Cas akan tersilap mendapat 1, kerana COUNT(*) mengira baris itu sendiri.

Jawapan

Ana 3, Ben 1, Cas 0.

6Kesilapan lazim

  • Menggunakan agregat dalam WHERE. Syarat pada COUNT, SUM atau AVG tergolong dalam HAVING.
  • Menulis = NULL. Sebarang perbandingan dengan NULL tidak diketahui; gunakan IS NULL atau IS NOT NULL.
  • Menggunakan INNER JOIN apabila baris tanpa padanan mesti kekal. Gunakan LEFT JOIN.
  • Terlupa syarat gabungan. Tanpa ON, setiap baris dipasangkan dengan setiap baris (gabungan silang).
  • Memilih lajur yang tidak dalam GROUP BY dan tidak dalam agregat.
  • Mengelirukan DELETE (membuang baris) dengan DROP TABLE (membuang keseluruhan jadual).
  • Menjalankan UPDATE atau DELETE tanpa WHERE. Ia mengubah setiap baris dalam jadual.
Semakan kendiri Jadual mempunyai 10 baris, dan lajur col ialah NULL dalam setiap baris. Apakah yang dipulangkan oleh SELECT COUNT(col)?
  1. 0
  2. 10
  3. 1
  4. NULL

Jawapan: 0. COUNT(col) hanya mengira nilai yang bukan NULL, maka ia memulangkan 0. COUNT(*) mengira baris dan akan memulangkan 10.

7Rupa soalan peperiksaan

  • Mudah: istilah dan fakta utama. Apa yang dilakukan oleh SELECT, WHERE, ORDER BY atau DELETE, kunci utama dan kunci asing, apa maksud NULL.
  • Sederhana: menerapkan konsep. Pertanyaan yang betul untuk sesuatu tugas, WHERE berbanding HAVING, gabungan dalam berbanding luar, bentuk normal, ACID.
  • Sukar: kes dan analisis. Subpertanyaan, aras pengasingan dan anomalinya, BCNF, fungsi tetingkap, indeks dan prestasi pertanyaan, suntikan SQL.

Apabila pertanyaan diberi, jejakinya pada beberapa baris mengikut turutan FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY. Kebanyakan perangkap muncul dalam tiga baris.

Belajar langkah demi langkah dalam aplikasiBelajar langkah demi langkah dalam aplikasi

Contoh soalan

Contoh 1Mudah

Apakah yang dilakukan oleh UNION pada hasil dua pertanyaan SELECT?

  1. AMencantumkannya bersebelahan pada kunci
  2. BMengekalkan hanya baris yang muncul dalam kedua-duanya
  3. CMenggabungkannya menjadi satu hasil dan membuang baris pendua
  4. DMengekalkan hanya baris yang muncul dalam pertanyaan pertama tetapi bukan yang kedua
Tunjukkan petunjuk
  1. Kedua-dua pertanyaan mesti mempunyai bilangan lajur serasi yang sama.
  2. Dua jawapan salah kini telah dipangkah. Satu daripada dua yang tinggal adalah betul.
Tunjukkan jawapan dan penerangan

Mengapa ini jawapannya

UNION menyusun baris kedua-dua pertanyaan dan membuang pendua; UNION ALL mengekalkan pendua.

Jawapan

C · Menggabungkannya menjadi satu hasil dan membuang baris pendua
Contoh 2Sederhana

Apakah yang dipulangkan oleh SELECT SUM(amount) FROM orders apabila klausa WHERE tidak sepadan dengan sebarang baris?

  1. ARalat
  2. B0
  3. CNULL
  4. DRentetan kosong
Tunjukkan petunjuk
  1. SUM berbeza daripada COUNT di sini.
  2. Dua jawapan salah kini telah dipangkah. Satu daripada dua yang tinggal adalah betul.
Tunjukkan jawapan dan penerangan

Mengapa ini jawapannya

SUM, AVG, MIN dan MAX memulangkan NULL pada set kosong, manakala COUNT memulangkan 0; COALESCE(SUM(amount), 0) memberi 0 sebaliknya.

Jawapan

C · NULL
Contoh 3Sukar

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

  1. AHanya pekerja yang berpendapatan melebihi purata jabatan mereka
  2. BSetiap baris pekerja bersama gaji purata jabatan mereka
  3. CRalat kerana name tiada dalam GROUP BY
  4. DSatu baris bagi setiap jabatan dengan gaji puratanya
Tunjukkan petunjuk
  1. Fungsi tetingkap tidak meruntuhkan baris.
  2. Dua jawapan salah kini telah dipangkah. Satu daripada dua yang tinggal adalah betul.
Tunjukkan jawapan dan penerangan

Mengapa ini jawapannya

Tidak seperti GROUP BY, fungsi tetingkap mengekalkan setiap baris input dan menambah nilai yang dikira ke atas partisinya, di sini jabatan.

Jawapan

B · Setiap baris pekerja bersama gaji purata jabatan mereka

Soalan dan jawapan

Apakah Pangkalan data & SQL?

Sebuah kedai mungkin mempunyai jadual customers dengan lajur id, name dan city, dan jadual orders dengan lajur id, customer_id dan total.

Beginilah jadual dipautkan: seorang pelanggan boleh mempunyai banyak pesanan, tetapi setiap pesanan tergolong dalam seorang pelanggan. Itulah hubungan satu-ke-banyak.

Bagaimanakah saya mempelajari Pangkalan data & SQL langkah demi langkah?
  1. Apakah pangkalan data hubungan
  2. Membaca data dengan SELECT
  3. Gabungan, penormalan dan transaksi
  4. Kaedah langkah demi langkah
  5. Contoh terselesai
  6. Kesilapan lazim
  7. Rupa soalan peperiksaan
Apakah yang diliputi oleh latihan Pangkalan data & SQL?
  • Mudah: istilah dan fakta utama
  • Sederhana: menggunakan konsep
  • Sukar: kes dan analisis

Setiap soalan mempunyai empat pilihan, dan hanya satu yang betul. Buntu? Buka petunjuk kecil dahulu, dan penerangan penuh hanya apabila anda memerlukannya.

Cara latihan berfungsi

  • Setiap soalan mempunyai empat pilihan, dan hanya satu yang betul.
  • Buntu? Buka petunjuk kecil dahulu, dan penerangan penuh hanya apabila anda memerlukannya.
  • Kemajuan, kesilapan dan soalan tersimpan anda dikekalkan, jadi anda boleh menyemak sebelum peperiksaan.

Kursus dengan topik ini

Lebih banyak topik dalam Sains komputer

Lembaran kerja boleh cetak