Kueri dengan SQL
Diperkenalkan| English | Makna |
|---|---|
| SQL/ˌes kjuː ˈel/ | SQL (Structured Query Language) |
| JOIN/dʒɔɪn/ | JOIN |
| GROUP BY/ɡruːp baɪ/ | GROUP BY |
Dua mata kuliah berbeda berbagi judul yang sama
- Dua mata kuliah keduanya disebut Robotics. Pengelompokan hanya berdasarkan judul akan menggabungkan jumlah pendaftarannya dan menyembunyikan fakta bahwa mereka adalah mata kuliah yang berbeda.
- SQL mendeskripsikan hasil data yang Anda inginkan. Periksa identitas baris dan output yang diharapkan sebelum mempercayai jumlah yang masuk akal.
Ikuti hubungan dalam penggabungan
- JOIN menggabungkan baris menggunakan hubungan seperti
e.course_id = c.id. Tulis hubungan yang dimaksud secara eksplisit. - Cross join pasangan setiap baris di satu sisi dengan setiap baris di sisi lain. Di SQLite, penggabungan tanpa batasan dapat menghasilkan produk tersebut; sistem SQL lainnya dapat menolak kondisi penggabungan yang hilang.
Dalam SQLite, penggabungan tanpa batasan menggabungkan tiga mata kuliah dengan tiga pendaftaran. Berapa banyak pasangan yang dapat dihasilkan?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Perkalian silang menghasilkan 3 × 3 baris, sebelum filter apa pun diterapkan.
Pertahankan mata kuliah dengan nol pendaftaran
- Left join mempertahankan setiap mata kuliah, termasuk yang tidak memiliki pendaftaran yang cocok. Field pendaftaran yang tidak cocok nilainya null.
- Hitung
e.student_id, yang mengecualikan nilai null, alih-alihCOUNT(*), yang juga menghitung baris tak-matching yang dipertahankan. Mata kuliah kosong harus melaporkan angka nol.
Ekspresi mana yang benar menghitung nol pendaftaran untuk mata kuliah yang digabungkan kiri namun tidak cocok?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
COUNT pada field nullable yang tidak cocok mengecualikan null; COUNT(*) menghitung baris yang ditahan.
Jalankan kueri dengan jawaban yang diketahui
- Jalankan skrip lengkap ini di database SQLite lokal. Dua mata kuliah Robotics-nya memiliki ID yang berbeda, dan Art tidak memiliki pendaftaran.
- GROUP BY mengelompokkan berdasarkan ID kursus dan judul. Baris yang diharapkan adalah
(7, Robotics, 1),(8, Robotics, 2)dan(9, Art, 0).
CREATE TABLE courses (id INTEGER PRIMARY KEY, title TEXT NOT NULL);
CREATE TABLE enrolments (student_id INTEGER, course_id INTEGER);
INSERT INTO courses VALUES (7, 'Robotics'), (8, 'Robotics'), (9, 'Art');
INSERT INTO enrolments VALUES (1, 7), (1, 8), (2, 8);
SELECT c.id, c.title, COUNT(e.student_id) AS enrolled
FROM courses AS c
LEFT JOIN enrolments AS e ON e.course_id = c.id
GROUP BY c.id, c.title
ORDER BY c.id;
Lengkapi klausa yang mengelompokkan berdasarkan identitas dan judul mata kuliah: ____ c.id, c.title
Difficulty 1/5 · 100 coins + a small bonus on first completion today
GROUP BY menentukan kelompok-kelompok tersebut. Termasuk ID memastikan mata kuliah dengan judul sama tetap terpisah.
Hitung pendaftaran mana yang dikembalikan oleh query lengkap untuk ID mata kuliah 7, 8, dan 9?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Contoh ini memiliki satu kecocokan untuk 7, dua untuk 8, dan tidak ada untuk 9.
Filter baris dan kelompok pada tahap yang berbeda
WHEREmemfilter baris input sebelum pengelompokan.HAVINGmemfilter kelompok menggunakan kondisi sepertiCOUNT(e.student_id) >= 2.- Dalam contoh ini, menambahkan kondisi HAVING sebelum ORDER BY hanya mengembalikan mata kuliah 8. Memfilter
e.student_iddalam WHERE dapat menghapus baris tak-matching yang berniat Anda pertahankan.
Klausul manakah yang memfilter kelompok menjadi hanya yang memiliki setidaknya dua siswa terdaftar?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
HAVING menerapkan kondisi pada kelompok; WHERE memfilter baris input.
Jelaskan WHERE dan HAVING menggunakan contoh hitung mata kuliah.
Difficulty 3/5 · 200 coins + a small bonus on first completion today
WHERE memfilter baris; HAVING menguji jumlah setiap kelompok.
Gunakan kasus ekstrem untuk memverifikasi hasil
- Periksa judul berulang, kecocokan nol, dan beberapa kecocokan terhadap hitungan yang diketahui. Hasil yang terlihat wajar saja tidak cukup.
- Jelaskan field yang dipilih, kondisi penggabungan, pengelompokan, dan perhitungan. Tentukan apakah duplikasi baris hubungan valid atau harus dicegah oleh skema.
Gabungkan berdasarkan hubungan, kelompokkan berdasarkan identitas, dan hitung hal yang dimaksud. Dataset kecil yang diketahui membuat query yang salah lebih mudah terlihat.
Jumlah yang masuk akal sudah cukup sebagai bukti bahwa query SQL benar.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Bandingkan jumlah baris yang diharapkan, termasuk nol kecocokan dan judul yang berulang.
Pengelompokan hanya berdasarkan judul membuat kedua mata kuliah Robotika tetap terpisah.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Judul yang sama membentuk satu kelompok. Kelompokkan juga berdasarkan identitas mata kuliah.