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.
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:
- 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).
- 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.
- 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.
- 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.
- 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.
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)
TabelPenjualan
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 padaID_Penjualan
. Namun,Total_Harga_Item
dapat dihitung dariHarga_Produk
danJumlah_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 kePelanggan
)ID_Produk
(Foreign Key keProduk
)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
danID_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 padaID_Pelanggan
.Produk
: Tidak ada transitive dependency.Nama_Produk
danHarga_Produk
bergantung padaID_Produk
.Penjualan
(Revisi Awal):Total_Harga_Item
dapat dihitung dariHarga_Produk
(dari tabelProduk
) danJumlah_Beli
. Menghilangkan ini dari tabelPenjualan
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 kePelanggan
)
-
Tabel
Detail_Transaksi
(Mewakili setiap item dalam satu transaksi):ID_Detail
(Primary Key, bisa juga composite key dariID_Transaksi
danID_Produk
)ID_Transaksi
(Foreign Key keTransaksi_Penjualan
)ID_Produk
(Foreign Key keProduk
)Jumlah_Beli
Harga_Saat_Beli
(Penting untuk mencatat harga saat transaksi terjadi, karena harga produk bisa berubah di tabelProduk
)Subtotal
(Dapat dihitung:Jumlah_Beli
*Harga_Saat_Beli
)
Struktur Tabel Hasil Normalisasi 3NF:
-
Tabel
Pelanggan
ID_Pelanggan
(PK)Nama_Pelanggan
Alamat_Pelanggan
Kota_Pelanggan
Kode_Pos_Pelanggan
-
Tabel
Produk
ID_Produk
(PK)Nama_Produk
Harga_Produk
(Harga terkini)
-
Tabel
Transaksi_Penjualan
ID_Transaksi
(PK)Tanggal_Transaksi
ID_Pelanggan
(FK kePelanggan.ID_Pelanggan
)
-
Tabel
Detail_Transaksi
ID_Detail
(PK) – Atau bisa juga menggunakan composite key (ID_Transaksi
,ID_Produk
)ID_Transaksi
(FK keTransaksi_Penjualan.ID_Transaksi
)ID_Produk
(FK keProduk.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.
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
- Atribut:
-
Entitas
Buku
:- Atribut:
Kode_Buku
,Judul_Buku
,Pengarang
,Tahun_Terbit
,Status_Ketersediaan
- Atribut:
-
Entitas
Peminjaman
:- Atribut:
ID_Peminjaman
(atau bisa menggunakan composite key dariID_Anggota
danKode_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. - Atribut:
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. EntitasPeminjaman
berfungsi sebagai jembatan untuk relasi ini.
b. Primary Key (PK) dan Foreign Key (FK):
-
Tabel
Anggota
:- Primary Key:
ID_Anggota
- Primary Key:
-
Tabel
Buku
:- Primary Key:
Kode_Buku
- Primary Key:
-
Tabel
Peminjaman
:- Primary Key:
ID_Peminjaman
(Jika kita menggunakan ID unik untuk setiap transaksi peminjaman). - Foreign Key:
ID_Anggota
(Merujuk keAnggota.ID_Anggota
) - Foreign Key:
Kode_Buku
(Merujuk keBuku.Kode_Buku
)
Alternatif PK untuk
Peminjaman
: JikaID_Peminjaman
tidak digunakan, maka composite key(ID_Anggota, Kode_Buku, Tanggal_Pinjam)
bisa menjadi primary key. Namun, menggunakanID_Peminjaman
tunggal lebih umum dan memudahkan. - Primary Key:
c. Tipe Relasi:
- Anggota dan Peminjaman: Relasi One-to-Many (1:N). Satu
Anggota
bisa memiliki banyak entri di tabelPeminjaman
. - Buku dan Peminjaman: Relasi One-to-Many (1:N). Satu
Buku
bisa memiliki banyak entri di tabelPeminjaman
. - 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
, danDetail_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 sehinggaSUM
dapat diterapkan pada setiap pelanggan.ORDER BY Total_Pembelian DESC
mengurutkan hasilnya dari total pembelian terbesar ke terkecil.
- Kita menggabungkan tabel
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
, danTransaksi_Penjualan
. - Klausa
WHERE
memfilter transaksi hanya untuk bulan Januari 2023. Perhatikan penggunaanTanggal_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.
- Kita menggabungkan
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 daftarID_Pelanggan
yang melakukan pembelian di Februari 2023. - Kita melakukan
LEFT JOIN
dari tabelPelanggan
kePelangganFeb
. Ini akan mengembalikan semua pelanggan, dan jika pelanggan tersebut ada diPelangganFeb
, kolom dariPelangganFeb
akan terisi. Jika tidak, kolom dariPelangganFeb
akan bernilaiNULL
. - Klausa
WHERE PelangganFeb.ID_Pelanggan IS NULL
kemudian memilih hanya pelanggan yang tidak memiliki kecocokan diPelangganFeb
, yang berarti mereka tidak melakukan pembelian di Februari 2023.
- Kita membuat subquery
-
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 dalamTransaksi_Penjualan
yang cocok dengan kondisi yang diberikan (yaitu, transaksi milik pelangganp
dan terjadi di Februari 2023). - Jika tidak ada baris yang cocok ditemukan (subquery mengembalikan kosong), maka kondisi
NOT EXISTS
bernilaiTRUE
, dan nama pelanggan tersebut akan disertakan dalam hasil.
- Query ini memilih nama pelanggan (
- Penjelasan
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
, danDetail_Transaksi
. AVG(dt.Subtotal)
menghitung nilai rata-rata dari kolomSubtotal
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:
- Kita menggabungkan tabel
-
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 denganID_Pelanggan
). - Query luar kemudian menggabungkan hasil subquery ini dengan tabel
Pelanggan
dan menghitung rata-rata dariTotal_Nilai_Transaksi
per pelanggan.
- Subquery pertama menghitung total nilai untuk setiap
- Penjelasan Alternatif:
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!