Menguasai Basis Data: Contoh Soal dan Pembahasan Lengkap untuk Kelas 12 Semester 2

Memasuki semester kedua di kelas 12, materi basis data menjadi salah satu pilar penting dalam kurikulum kejuruan, khususnya bagi mereka yang mengarah ke bidang teknologi informasi. Pemahaman mendalam tentang basis data tidak hanya krusial untuk ujian sekolah, tetapi juga sebagai bekal fundamental untuk melanjutkan studi di perguruan tinggi atau terjun langsung ke dunia kerja. Artikel ini akan membekali Anda dengan berbagai contoh soal yang relevan dengan materi basis data kelas 12 semester 2, disertai dengan pembahasan mendalam untuk memastikan pemahaman yang kokoh.

Pentingnya Memahami Basis Data dalam Konteks Modern

Di era digital ini, data adalah aset yang paling berharga. Setiap transaksi, interaksi, dan informasi yang kita hasilkan di dunia maya maupun nyata, semuanya disimpan dan dikelola dalam sebuah basis data. Mulai dari data pelanggan sebuah toko online, rekam medis pasien di rumah sakit, hingga database para pemain game favorit Anda, semuanya memerlukan sistem manajemen basis data yang efisien. Oleh karena itu, kemampuan merancang, mengelola, dan memanipulasi basis data menjadi keahlian yang sangat dicari.

Semester 2 kelas 12 biasanya mencakup topik-topik lanjutan yang lebih kompleks, seperti normalisasi basis data, desain ERD (Entity-Relationship Diagram) yang lebih rinci, query SQL yang lebih canggih, dan terkadang pengenalan terhadap sistem manajemen basis data yang berbeda.

Menguasai Basis Data: Contoh Soal dan Pembahasan Lengkap untuk Kelas 12 Semester 2

Struktur Materi Basis Data Kelas 12 Semester 2 yang Umum

Meskipun kurikulum dapat sedikit bervariasi antar sekolah, berikut adalah beberapa topik inti yang seringkali dibahas di semester 2:

  1. Normalisasi Basis Data: Proses pengorganisasian kolom-kolom dalam sebuah tabel untuk mengurangi redundansi data dan meningkatkan integritas data. Ini mencakup berbagai bentuk normal (1NF, 2NF, 3NF, BCNF).
  2. Desain ERD Lanjutan: Pembuatan diagram yang merepresentasikan entitas, atribut, dan relasi antar entitas dalam sebuah basis data. Semester 2 seringkali fokus pada relasi yang lebih kompleks (many-to-many) dan implementasinya.
  3. SQL (Structured Query Language) Tingkat Lanjut: Meliputi perintah-perintah SQL yang lebih spesifik seperti JOIN (INNER, LEFT, RIGHT, FULL), subquery, fungsi agregat, GROUP BY, HAVING, dan terkadang DDL (Data Definition Language) seperti CREATE TABLE, ALTER TABLE, DROP TABLE.
  4. Tipe Data dan Constraint: Pemahaman yang lebih mendalam tentang berbagai tipe data yang tersedia dalam sistem manajemen basis data (DBMS) dan cara menerapkan batasan (constraint) untuk menjaga kualitas data.
  5. Pengantar Sistem Manajemen Basis Data (DBMS): Mengenal berbagai jenis DBMS (misalnya, relasional seperti MySQL, PostgreSQL; NoSQL seperti MongoDB) dan keunggulan serta kelemahannya.

Contoh Soal dan Pembahasan Mendalam

Mari kita mulai dengan contoh soal yang mencakup berbagai topik tersebut.

Contoh Soal 1: Normalisasi Basis Data (3NF)

Sebuah perusahaan retail memiliki data penjualan yang disimpan dalam tabel Penjualan dengan kolom-kolom berikut:

  • ID_Penjualan (Primary Key)
  • Tanggal_Penjualan
  • ID_Pelanggan
  • Nama_Pelanggan
  • Alamat_Pelanggan
  • Kota_Pelanggan
  • Kode_Pos_Pelanggan
  • ID_Produk
  • Nama_Produk
  • Harga_Produk
  • Jumlah_Beli
  • Total_Harga_Item

Pertanyaan:

a. Identifikasi anomali-anomali (redundansi, insertion anomaly, deletion anomaly, update anomaly) yang mungkin terjadi pada tabel Penjualan di atas.
b. Bawalah tabel Penjualan tersebut ke dalam bentuk normal ketiga (3NF). Jelaskan setiap langkah normalisasi yang Anda lakukan dan gambarkan struktur tabel hasil normalisasi.

Pembahasan:

a. Identifikasi Anomali:

  • Redundansi Data: Informasi pelanggan (Nama_Pelanggan, Alamat_Pelanggan, Kota_Pelanggan, Kode_Pos_Pelanggan) akan terulang untuk setiap pembelian yang dilakukan oleh pelanggan yang sama. Hal ini membuang-buang ruang penyimpanan dan meningkatkan potensi inkonsistensi.
  • Insertion Anomaly (Anomali Penyisipan):
    • Kita tidak bisa menambahkan informasi pelanggan baru (misalnya, tanpa melakukan pembelian) jika tabel ini hanya ada. Kita harus memiliki setidaknya satu baris data penjualan terkait pelanggan tersebut untuk bisa memasukkan informasinya.
    • Kita tidak bisa menambahkan informasi produk baru (misalnya, stok baru tanpa penjualan) jika tabel ini hanya ada.
  • Deletion Anomaly (Anomali Penghapusan):
    • Jika seorang pelanggan tidak lagi melakukan pembelian dan semua baris penjualannya dihapus, maka informasi lengkap tentang pelanggan tersebut (Nama, Alamat, dll.) akan hilang dari database.
    • Jika sebuah produk tidak lagi terjual dan semua baris penjualannya dihapus, maka informasi lengkap tentang produk tersebut (Nama, Harga) akan hilang.
  • Update Anomaly (Anomali Pembaruan):
    • Jika alamat seorang pelanggan berubah, kita harus memperbarui informasi alamat di setiap baris penjualan yang melibatkan pelanggan tersebut. Jika ada satu baris yang terlewat, maka data menjadi tidak konsisten.
    • Jika harga sebuah produk berubah, kita harus memperbarui harga di setiap baris penjualan yang melibatkan produk tersebut.
READ  Memahami Segi Banyak: Contoh Soal dan Pembahasan untuk Kelas 4 SD

b. Normalisasi ke 3NF:

Kita akan memecah tabel Penjualan menjadi beberapa tabel yang lebih kecil untuk menghilangkan redundansi dan anomali.

  • Langkah 1: Mencapai 1NF (First Normal Form)
    Tabel Penjualan sudah dalam 1NF karena setiap kolom berisi nilai atomik (tidak ada kolom yang berisi daftar nilai).

  • Langkah 2: Mencapai 2NF (Second Normal Form)
    Untuk mencapai 2NF, tabel harus dalam 1NF dan setiap kolom non-kunci harus bergantung sepenuhnya pada seluruh primary key (jika primary key terdiri dari lebih dari satu kolom). Dalam kasus ini, ID_Penjualan adalah primary key tunggal. Semua kolom non-kunci bergantung pada ID_Penjualan. Namun, Total_Harga_Item dapat dihitung dari Harga_Produk dan Jumlah_Beli, sehingga ini merupakan transitive dependency. Untuk 2NF, kita perlu menghilangkan ketergantungan parsial.
    Kita dapat memisahkan informasi produk dan pelanggan.

    • Tabel Pelanggan:

      • ID_Pelanggan (Primary Key)
      • Nama_Pelanggan
      • Alamat_Pelanggan
      • Kota_Pelanggan
      • Kode_Pos_Pelanggan
    • Tabel Produk:

      • ID_Produk (Primary Key)
      • Nama_Produk
      • Harga_Produk
    • Tabel Penjualan (Revisi Awal):

      • ID_Penjualan (Primary Key)
      • Tanggal_Penjualan
      • ID_Pelanggan (Foreign Key ke Pelanggan)
      • ID_Produk (Foreign Key ke Produk)
      • Jumlah_Beli
      • Total_Harga_Item (Masih ada di sini, akan kita atasi di 3NF)
    • Anomali yang tersisa di tabel Penjualan (Revisi Awal):

      • Total_Harga_Item masih merupakan nilai yang dapat dihitung.
      • Tanggal_Penjualan dan ID_Pelanggan/ID_Produk berada dalam satu tabel penjualan. Jika ada penjualan yang memiliki tanggal yang sama dan pelanggan yang sama, maka informasi pelanggan dan produk tetap diulang.
  • Langkah 3: Mencapai 3NF (Third Normal Form)
    Untuk mencapai 3NF, tabel harus dalam 2NF dan tidak boleh ada transitive dependency. Artinya, kolom non-kunci tidak boleh bergantung pada kolom non-kunci lainnya.

    Mari kita tinjau tabel-tabel hasil 2NF:

    • Pelanggan: Tidak ada transitive dependency. Nama_Pelanggan, Alamat_Pelanggan, Kota_Pelanggan, Kode_Pos_Pelanggan semuanya bergantung pada ID_Pelanggan.
    • Produk: Tidak ada transitive dependency. Nama_Produk dan Harga_Produk bergantung pada ID_Produk.
    • Penjualan (Revisi Awal):
      • Total_Harga_Item dapat dihitung dari Harga_Produk (dari tabel Produk) dan Jumlah_Beli. Menghilangkan ini dari tabel Penjualan adalah ide yang baik.
      • Kita perlu memisahkan detail setiap item penjualan menjadi tabel terpisah jika ada lebih dari satu produk dalam satu transaksi. Jika ID_Penjualan mewakili satu transaksi keseluruhan, dan satu transaksi bisa memiliki banyak produk, maka kita perlu tabel detail penjualan.

    Mari kita revisi lagi berdasarkan konsep transaksi penjualan yang bisa memiliki banyak item.

    • Tabel Pelanggan:

      • ID_Pelanggan (Primary Key)
      • Nama_Pelanggan
      • Alamat_Pelanggan
      • Kota_Pelanggan
      • Kode_Pos_Pelanggan
    • Tabel Produk:

      • ID_Produk (Primary Key)
      • Nama_Produk
      • Harga_Produk
    • Tabel Transaksi_Penjualan (Mewakili satu transaksi keseluruhan):

      • ID_Transaksi (Primary Key)
      • Tanggal_Transaksi
      • ID_Pelanggan (Foreign Key ke Pelanggan)
    • Tabel Detail_Transaksi (Mewakili setiap item dalam satu transaksi):

      • ID_Detail (Primary Key, bisa juga composite key dari ID_Transaksi dan ID_Produk)
      • ID_Transaksi (Foreign Key ke Transaksi_Penjualan)
      • ID_Produk (Foreign Key ke Produk)
      • Jumlah_Beli
      • Harga_Saat_Beli (Penting untuk mencatat harga saat transaksi terjadi, karena harga produk bisa berubah di tabel Produk)
      • Subtotal (Dapat dihitung: Jumlah_Beli * Harga_Saat_Beli)

    Struktur Tabel Hasil Normalisasi 3NF:

    1. Tabel Pelanggan

      • ID_Pelanggan (PK)
      • Nama_Pelanggan
      • Alamat_Pelanggan
      • Kota_Pelanggan
      • Kode_Pos_Pelanggan
    2. Tabel Produk

      • ID_Produk (PK)
      • Nama_Produk
      • Harga_Produk (Harga terkini)
    3. Tabel Transaksi_Penjualan

      • ID_Transaksi (PK)
      • Tanggal_Transaksi
      • ID_Pelanggan (FK ke Pelanggan.ID_Pelanggan)
    4. Tabel Detail_Transaksi

      • ID_Detail (PK) – Atau bisa juga menggunakan composite key (ID_Transaksi, ID_Produk)
      • ID_Transaksi (FK ke Transaksi_Penjualan.ID_Transaksi)
      • ID_Produk (FK ke Produk.ID_Produk)
      • Jumlah_Beli
      • Harga_Saat_Beli
      • Subtotal (Dapat dihitung)

    Dengan struktur ini, redundansi data diminimalkan, dan anomali penyisipan, penghapusan, serta pembaruan lebih terkendali.

Contoh Soal 2: ERD dan Relasi

Sebuah perpustakaan ingin mengelola data peminjaman buku. Sistem harus mencatat informasi tentang:

  • Anggota: ID Anggota, Nama Anggota, Alamat, Nomor Telepon.
  • Buku: Kode Buku, Judul Buku, Pengarang, Tahun Terbit, Status Ketersediaan.
  • Peminjaman: Tanggal Pinjam, Tanggal Jatuh Tempo, Tanggal Kembali.
READ  Mempersiapkan Diri Menghadapi UAS Bahasa Sunda Kelas 2 SD Kurikulum 2013: Panduan Lengkap dengan Contoh Soal

Setiap anggota dapat meminjam banyak buku, dan setiap buku dapat dipinjam oleh banyak anggota (dalam periode waktu yang berbeda). Satu transaksi peminjaman mencatat satu anggota meminjam satu buku.

Pertanyaan:

a. Buatlah Entity-Relationship Diagram (ERD) untuk sistem perpustakaan tersebut.
b. Tentukan Primary Key (PK) dan Foreign Key (FK) untuk setiap entitas.
c. Jelaskan tipe relasi antar entitas yang Anda buat.

Pembahasan:

a. Entity-Relationship Diagram (ERD):

Mari kita definisikan entitas-entitasnya:

  • Entitas Anggota:

    • Atribut: ID_Anggota, Nama_Anggota, Alamat, Nomor_Telepon
  • Entitas Buku:

    • Atribut: Kode_Buku, Judul_Buku, Pengarang, Tahun_Terbit, Status_Ketersediaan
  • Entitas Peminjaman:

    • Atribut: ID_Peminjaman (atau bisa menggunakan composite key dari ID_Anggota dan Kode_Buku beserta tanggal pinjam), Tanggal_Pinjam, Tanggal_Jatuh_Tempo, Tanggal_Kembali.

    Karena satu anggota bisa meminjam banyak buku, dan satu buku bisa dipinjam banyak anggota, kita memerlukan entitas asosiasi atau junction table untuk memodelkan relasi many-to-many ini. Entitas Peminjaman di sini akan berfungsi sebagai entitas asosiasi.

ERD (Representasi Teks):

+-----------+       1-------N       +--------------+       N-------1       +----------+
|  Anggota  |--------------------->| Peminjaman   |<---------------------|   Buku   |
+-----------+       (meminjam)     +--------------+       (dipinjam)      +----------+
| PK: ID_Anggota|                    | PK: ID_Peminjaman                 | PK: Kode_Buku|
| Nama_Anggota  |                    | FK: ID_Anggota                  | Judul_Buku |
| Alamat        |                    | FK: Kode_Buku                   | Pengarang  |
| Nomor_Telepon |                    | Tanggal_Pinjam                  | Tahun_Terbit|
+-----------+                    | Tanggal_Jatuh_Tempo             | Status_Ketersediaan|
                                 | Tanggal_Kembali                 +----------+
                                 +--------------+

Penjelasan Relasi:

  • Anggota ke Peminjaman: Relasi 1-to-Many. Satu anggota dapat memiliki banyak catatan peminjaman (karena bisa meminjam banyak buku, atau meminjam buku yang sama berulang kali).
  • Buku ke Peminjaman: Relasi 1-to-Many. Satu buku dapat muncul dalam banyak catatan peminjaman (dipinjam oleh anggota yang berbeda, atau dipinjam oleh anggota yang sama di waktu yang berbeda).
  • Anggota ke Buku (melalui Peminjaman): Karena kita memiliki relasi 1-to-Many dari Anggota ke Peminjaman dan dari Buku ke Peminjaman, ini secara implisit memodelkan relasi Many-to-Many antara Anggota dan Buku. Entitas Peminjaman berfungsi sebagai jembatan untuk relasi ini.

b. Primary Key (PK) dan Foreign Key (FK):

  • Tabel Anggota:

    • Primary Key: ID_Anggota
  • Tabel Buku:

    • Primary Key: Kode_Buku
  • Tabel Peminjaman:

    • Primary Key: ID_Peminjaman (Jika kita menggunakan ID unik untuk setiap transaksi peminjaman).
    • Foreign Key: ID_Anggota (Merujuk ke Anggota.ID_Anggota)
    • Foreign Key: Kode_Buku (Merujuk ke Buku.Kode_Buku)

    Alternatif PK untuk Peminjaman: Jika ID_Peminjaman tidak digunakan, maka composite key (ID_Anggota, Kode_Buku, Tanggal_Pinjam) bisa menjadi primary key. Namun, menggunakan ID_Peminjaman tunggal lebih umum dan memudahkan.

c. Tipe Relasi:

  • Anggota dan Peminjaman: Relasi One-to-Many (1:N). Satu Anggota bisa memiliki banyak entri di tabel Peminjaman.
  • Buku dan Peminjaman: Relasi One-to-Many (1:N). Satu Buku bisa memiliki banyak entri di tabel Peminjaman.
  • Anggota dan Buku: Relasi Many-to-Many (N:M). Ini dimodelkan secara implisit melalui entitas asosiasi Peminjaman.

Contoh Soal 3: Query SQL Tingkat Lanjut

Diberikan struktur tabel yang sama dari Contoh Soal 1 (Hasil Normalisasi 3NF):

  • Pelanggan (ID_Pelanggan PK, Nama_Pelanggan, …)
  • Produk (ID_Produk PK, Nama_Produk, Harga_Produk)
  • Transaksi_Penjualan (ID_Transaksi PK, Tanggal_Transaksi, ID_Pelanggan FK)
  • Detail_Transaksi (ID_Detail PK, ID_Transaksi FK, ID_Produk FK, Jumlah_Beli, Harga_Saat_Beli, Subtotal)

Pertanyaan:

Tuliskan query SQL untuk:

a. Menampilkan nama pelanggan beserta total pembelian yang pernah dilakukannya (jumlah seluruh subtotal).
b. Menampilkan daftar produk yang paling banyak dibeli (berdasarkan jumlah total unit yang terjual) selama bulan Januari 2023.
c. Menampilkan nama pelanggan yang tidak pernah melakukan pembelian pada bulan Februari 2023.
d. Menghitung rata-rata jumlah pembelian per transaksi untuk setiap pelanggan.

Pembahasan:

a. Nama pelanggan beserta total pembelian:

SELECT
    p.Nama_Pelanggan,
    SUM(dt.Subtotal) AS Total_Pembelian
FROM
    Pelanggan p
JOIN
    Transaksi_Penjualan tp ON p.ID_Pelanggan = tp.ID_Pelanggan
JOIN
    Detail_Transaksi dt ON tp.ID_Transaksi = dt.ID_Transaksi
GROUP BY
    p.Nama_Pelanggan
ORDER BY
    Total_Pembelian DESC;
  • Penjelasan:
    • Kita menggabungkan tabel Pelanggan, Transaksi_Penjualan, dan Detail_Transaksi menggunakan JOIN berdasarkan kunci yang sesuai.
    • SUM(dt.Subtotal) menghitung total subtotal untuk setiap grup.
    • GROUP BY p.Nama_Pelanggan mengelompokkan hasil berdasarkan nama pelanggan sehingga SUM dapat diterapkan pada setiap pelanggan.
    • ORDER BY Total_Pembelian DESC mengurutkan hasilnya dari total pembelian terbesar ke terkecil.
READ  Contoh Soal Sejarah Indonesia Kelas 12 Bab 4: Respons Indonesia terhadap Tekanan dari Luar

b. Produk paling banyak dibeli (unit terjual) selama Januari 2023:

SELECT
    pr.Nama_Produk,
    SUM(dt.Jumlah_Beli) AS Total_Unit_Terjual
FROM
    Produk pr
JOIN
    Detail_Transaksi dt ON pr.ID_Produk = dt.ID_Produk
JOIN
    Transaksi_Penjualan tp ON dt.ID_Transaksi = tp.ID_Transaksi
WHERE
    tp.Tanggal_Transaksi >= '2023-01-01' AND tp.Tanggal_Transaksi < '2023-02-01'
GROUP BY
    pr.Nama_Produk
ORDER BY
    Total_Unit_Terjual DESC
LIMIT 5; -- Menampilkan 5 produk teratas
  • Penjelasan:
    • Kita menggabungkan Produk, Detail_Transaksi, dan Transaksi_Penjualan.
    • Klausa WHERE memfilter transaksi hanya untuk bulan Januari 2023. Perhatikan penggunaan Tanggal_Transaksi >= '2023-01-01' AND Tanggal_Transaksi < '2023-02-01' untuk mencakup seluruh bulan Januari.
    • SUM(dt.Jumlah_Beli) menghitung total unit yang terjual untuk setiap produk.
    • GROUP BY pr.Nama_Produk mengelompokkan berdasarkan nama produk.
    • ORDER BY Total_Unit_Terjual DESC mengurutkan berdasarkan jumlah unit terjual terbanyak.
    • LIMIT 5 membatasi output hanya untuk 5 produk teratas.

c. Pelanggan yang tidak pernah melakukan pembelian pada Februari 2023:

Ini adalah contoh yang membutuhkan subquery atau LEFT JOIN dengan pengecekan IS NULL.

  • Menggunakan LEFT JOIN:

    SELECT
        p.Nama_Pelanggan
    FROM
        Pelanggan p
    LEFT JOIN (
        SELECT DISTINCT ID_Pelanggan
        FROM Transaksi_Penjualan
        WHERE Tanggal_Transaksi >= '2023-02-01' AND Tanggal_Transaksi < '2023-03-01'
    ) AS PelangganFeb ON p.ID_Pelanggan = PelangganFeb.ID_Pelanggan
    WHERE
        PelangganFeb.ID_Pelanggan IS NULL;
  • Penjelasan LEFT JOIN:

    • Kita membuat subquery PelangganFeb yang berisi daftar ID_Pelanggan yang melakukan pembelian di Februari 2023.
    • Kita melakukan LEFT JOIN dari tabel Pelanggan ke PelangganFeb. Ini akan mengembalikan semua pelanggan, dan jika pelanggan tersebut ada di PelangganFeb, kolom dari PelangganFeb akan terisi. Jika tidak, kolom dari PelangganFeb akan bernilai NULL.
    • Klausa WHERE PelangganFeb.ID_Pelanggan IS NULL kemudian memilih hanya pelanggan yang tidak memiliki kecocokan di PelangganFeb, yang berarti mereka tidak melakukan pembelian di Februari 2023.
  • Menggunakan NOT EXISTS (alternatif, seringkali lebih efisien):

    SELECT
        p.Nama_Pelanggan
    FROM
        Pelanggan p
    WHERE NOT EXISTS (
        SELECT 1
        FROM Transaksi_Penjualan tp
        WHERE tp.ID_Pelanggan = p.ID_Pelanggan
          AND tp.Tanggal_Transaksi >= '2023-02-01'
          AND tp.Tanggal_Transaksi < '2023-03-01'
    );
    • Penjelasan NOT EXISTS:
      • Query ini memilih nama pelanggan (p.Nama_Pelanggan).
      • Klausa WHERE NOT EXISTS memeriksa apakah ada baris dalam Transaksi_Penjualan yang cocok dengan kondisi yang diberikan (yaitu, transaksi milik pelanggan p dan terjadi di Februari 2023).
      • Jika tidak ada baris yang cocok ditemukan (subquery mengembalikan kosong), maka kondisi NOT EXISTS bernilai TRUE, dan nama pelanggan tersebut akan disertakan dalam hasil.

d. Rata-rata jumlah pembelian per transaksi untuk setiap pelanggan:

SELECT
    p.Nama_Pelanggan,
    AVG(dt.Subtotal) AS Rata_Rata_Pembelian_Per_Transaksi
FROM
    Pelanggan p
JOIN
    Transaksi_Penjualan tp ON p.ID_Pelanggan = tp.ID_Pelanggan
JOIN
    Detail_Transaksi dt ON tp.ID_Transaksi = dt.ID_Transaksi
GROUP BY
    p.Nama_Pelanggan
ORDER BY
    Rata_Rata_Pembelian_Per_Transaksi DESC;
  • Penjelasan:

    • Kita menggabungkan tabel Pelanggan, Transaksi_Penjualan, dan Detail_Transaksi.
    • AVG(dt.Subtotal) menghitung nilai rata-rata dari kolom Subtotal untuk setiap grup pelanggan.
    • GROUP BY p.Nama_Pelanggan mengelompokkan hasil berdasarkan nama pelanggan.
    • Perhatikan bahwa AVG di sini akan menghitung rata-rata dari semua baris detail transaksi yang dimiliki pelanggan tersebut. Jika satu transaksi memiliki banyak item, Subtotal dari setiap item akan diperhitungkan dalam rata-rata. Jika yang dimaksud adalah rata-rata total nilai per transaksi (bukan per item), maka querynya sedikit berbeda:
  • Rata-rata Total Nilai Per Transaksi (Alternatif):

    SELECT
        p.Nama_Pelanggan,
        AVG(Total_Nilai_Transaksi) AS Rata_Rata_Nilai_Transaksi
    FROM
        Pelanggan p
    JOIN (
        SELECT
            ID_Transaksi,
            ID_Pelanggan,
            SUM(Subtotal) AS Total_Nilai_Transaksi
        FROM
            Detail_Transaksi
        GROUP BY ID_Transaksi, ID_Pelanggan
    ) AS Nilai_Per_Transaksi ON p.ID_Pelanggan = Nilai_Per_Transaksi.ID_Pelanggan
    GROUP BY
        p.Nama_Pelanggan
    ORDER BY
        Rata_Rata_Nilai_Transaksi DESC;
    • Penjelasan Alternatif:
      • Subquery pertama menghitung total nilai untuk setiap ID_Transaksi (dan mengasosiasikannya dengan ID_Pelanggan).
      • Query luar kemudian menggabungkan hasil subquery ini dengan tabel Pelanggan dan menghitung rata-rata dari Total_Nilai_Transaksi per pelanggan.

Penutup

Menguasai basis data adalah sebuah proses berkelanjutan. Contoh soal dan pembahasan di atas mencakup beberapa topik krusial yang sering muncul dalam ujian akhir semester 2. Ingatlah untuk tidak hanya menghafal sintaks SQL atau langkah-langkah normalisasi, tetapi pahami logika di baliknya. Latihan adalah kunci. Cobalah untuk membuat skenario basis data sendiri dan terapkan konsep-konsep yang telah dipelajari. Dengan pemahaman yang kuat dan latihan yang konsisten, Anda akan siap menghadapi tantangan basis data di masa depan. Selamat belajar!

Leave a Reply

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *