Skip to main content

Command Palette

Search for a command to run...

Latihan Crud Berdasarkan Study Kasus

By Ahmad Afan Shobari

Updated
7 min read
Latihan Crud Berdasarkan Study Kasus
A
I'm a Programmer

1) Buku Tamu Kelas

Konteks masalah

Kelas sering kedatangan tamu (orang tua, alumni, supplier ATK). Perlu catat siapa datang, keperluan, dan nomor kontak—supaya mudah ditindaklanjuti.

Alur utama

  1. Tamu datang → dicatat.

  2. Wali kelas melihat daftar tamu hari ini.

  3. Jika ada salah tulis → koreksi.

  4. Entri yang tidak valid → hapus.

ERD (single table)

Skema

CREATE TABLE buku_tamu (
  id          BIGSERIAL PRIMARY KEY,
  tanggal     DATE DEFAULT CURRENT_DATE,
  nama        VARCHAR(120) NOT NULL,
  jenis_tamu  VARCHAR(20),        -- 'ortu' | 'alumni' | 'supplier' | 'lainnya'
  no_hp       VARCHAR(20),
  keperluan   TEXT,
  created_at  TIMESTAMPTZ DEFAULT now()
);

Dummy data

INSERT INTO buku_tamu (nama, jenis_tamu, no_hp, keperluan) VALUES
('Ibu Rina', 'ortu', '081234567890', 'Konsultasi raport'),
('Pak Dimas', 'supplier', '085200011122', 'Kirim spidol'),
('Andi Setiawan', 'alumni', '082198765432', 'Silaturahmi');

CRUD ringkas

-- CREATE
INSERT INTO buku_tamu (nama, jenis_tamu, no_hp, keperluan)
VALUES ('Bapak Joko', 'ortu', '0812121212', 'Izin anak');

-- READ (hari ini)
SELECT * FROM buku_tamu WHERE tanggal = CURRENT_DATE ORDER BY id DESC;

-- UPDATE (perbaiki no_hp)
UPDATE buku_tamu SET no_hp = '081333444555' WHERE id = 1;

-- DELETE (entri tidak valid)
DELETE FROM buku_tamu WHERE id = 3;

maka ini adalah hasilnya jika kita mencoba read

dan ini hasil jika kita UPDATE dan setelah itu READ kembali

dan ini jika kita DELETE dan setelah itu READ kembali

2) Agenda Kegiatan Harian

Konteks masalah

Banyak kegiatan: piket, kajian, olahraga, lomba. Sering lupa jam dan penanggung jawab. Simpan agenda sederhana per hari.

Alur utama

Buat agenda → lihat daftar hari ini → tandai status selesai → koreksi/hapus bila perlu.

ERD

Skema + CRUD

CREATE TABLE agenda (
  id                BIGSERIAL PRIMARY KEY,
  tanggal           DATE DEFAULT CURRENT_DATE,
  judul             VARCHAR(120) NOT NULL,
  jam               TIME,
  penanggung_jawab  VARCHAR(60),
  status            VARCHAR(15) DEFAULT 'rencana', -- 'rencana'|'berjalan'|'selesai'
  catatan           TEXT
);

-- Dummy
INSERT INTO agenda (judul, jam, penanggung_jawab) VALUES
('Piket kelas', '06:30', 'Rizky'),
('Latihan futsal', '16:00', 'Bima');

-- CREATE
INSERT INTO agenda (judul, jam, penanggung_jawab, status)
VALUES ('Mentoring', '19:30', 'Ust Fulan', 'rencana');

-- READ (hari ini)
SELECT * FROM agenda WHERE tanggal = CURRENT_DATE ORDER BY jam NULLS LAST;

-- UPDATE (tandai selesai)
UPDATE agenda SET status = 'selesai' WHERE id = 1;

-- DELETE
DELETE FROM agenda WHERE id = 2;

maka ini adalah hasilnya jika kita mencoba READ

dan ini hasil jika kita UPDATE dan setelah itu READ kembali

dan ini jika kita DELETE dan setelah itu READ kembali

3) Catatan Hafalan Harian

Konteks masalah

Santri butuh mencatat setoran hafalan agar terlihat progresnya hari ke hari.

Alur utama

Catat setoran → lihat rekap mingguan → koreksi bila salah.

ERD

Skema + CRUD

CREATE TABLE hafalan (
  id               BIGSERIAL PRIMARY KEY,
  tanggal          DATE DEFAULT CURRENT_DATE,
  nama_santri      VARCHAR(120) NOT NULL,
  surat_atau_materi VARCHAR(60) NOT NULL,
  rentang          VARCHAR(30),         -- misal: "1-10" atau "hal 3"
  durasi_menit     INTEGER,
  catatan          TEXT
);

-- Dummy
INSERT INTO hafalan (nama_santri, surat_atau_materi, rentang, durasi_menit) VALUES
('Ahmad', 'Al-Baqarah', '1-5', 30),
('Naufal', 'Al-Mulk', '1-10', 25);

-- CREATE
INSERT INTO hafalan (nama_santri, surat_atau_materi, rentang, durasi_menit)
VALUES ('Dini', 'An-Naba', '1-20', 35);

-- READ (rekap 7 hari terakhir)
SELECT nama_santri, COUNT(*) jml_setor, SUM(COALESCE(durasi_menit,0)) total_menit
FROM hafalan
WHERE tanggal >= CURRENT_DATE - 6
GROUP BY nama_santri
ORDER BY jml_setor DESC;

-- UPDATE (koreksi rentang)
UPDATE hafalan SET rentang = '1-15' WHERE id = 1;

-- DELETE
DELETE FROM hafalan WHERE id = 2;

maka ini adalah hasilnya jika kita mencoba READ

dan ini hasil jika kita UPDATE dan setelah itu READ kembali

dan ini jika kita DELETE dan setelah itu READ kembali

4) Daftar Kontak (Teman/Orang Tua/Relasi)

Konteks masalah

Suka kehilangan nomor teman/ortu/wali asrama. Buat buku kontak sederhana.

Alur utama

Tambah kontak → cari kontak → update nomor → hapus duplikat.

ERD

Skema + CRUD

CREATE TABLE kontak (
  id        BIGSERIAL PRIMARY KEY,
  nama      VARCHAR(120) NOT NULL,
  no_hp     VARCHAR(20)  NOT NULL,
  kategori  VARCHAR(60),             -- 'teman'|'guru'|'ortu'|'lainnya'
  catatan   TEXT,
  created_at TIMESTAMPTZ DEFAULT now()
);

-- Dummy
INSERT INTO kontak (nama, no_hp, kategori) VALUES
('Budi', '0812345678', 'teman'),
('Ust Faris', '085211122233', 'guru');

-- CREATE
INSERT INTO kontak (nama, no_hp, kategori) VALUES ('Ibu Rina', '08199887766', 'ortu');

-- READ (pencarian nama)
SELECT * FROM kontak WHERE nama ILIKE '%rin%' ORDER BY created_at DESC;

-- UPDATE (ganti nomor)
UPDATE kontak SET no_hp = '081700011122' WHERE id = 1;

-- DELETE (duplikat)
DELETE FROM kontak WHERE id = 2;

maka ini adalah hasilnya jika kita mencoba READ

dan ini hasil jika kita UPDATE dan setelah itu READ kembali

dan ini jika kita DELETE dan setelah itu READ kembali

5) Catatan Tabungan Pribadi

Konteks masalah

Siswa ingin memantau tabungan kecil (uang saku). Satu tabel transaksi masuk/keluar sederhana.

Alur utama

Catat pemasukan/pengeluaran → lihat saldo akhir → koreksi bila ada salah angka.

ERD

Skema + CRUD

CREATE TABLE tabungan (
  id        BIGSERIAL PRIMARY KEY,
  tanggal   DATE DEFAULT CURRENT_DATE,
  jenis     VARCHAR(10) NOT NULL,  -- 'masuk'|'keluar'
  kategori  VARCHAR(60),
  deskripsi TEXT,
  jumlah    INTEGER NOT NULL -- >0 (validasi di aplikasi)
);

-- Dummy
INSERT INTO tabungan (jenis, kategori, deskripsi, jumlah) VALUES
('masuk', 'Uang saku', 'Mingguan', 50000),
('keluar', 'Jajan', 'Roti', 8000);

-- CREATE
INSERT INTO tabungan (jenis, kategori, deskripsi, jumlah)
VALUES ('keluar', 'ATK', 'Beli pulpen', 5000);

-- READ (saldo akhir on-the-fly)
SELECT COALESCE(SUM(CASE WHEN jenis='masuk' THEN jumlah END),0)
     - COALESCE(SUM(CASE WHEN jenis='keluar' THEN jumlah END),0) AS saldo
FROM tabungan;

-- UPDATE
UPDATE tabungan SET jumlah = 7000 WHERE id = 2;

-- DELETE
DELETE FROM tabungan WHERE id = 2;

maka ini adalah hasilnya jika kita mencoba READ

dan ini hasil jika kita UPDATE dan setelah itu READ kembali

dan ini jika kita DELETE dan setelah itu READ kembali

6) Peminjaman Barang Kelas (Log Sederhana)

Versi satu tabel ini hanya log, bukan sistem stok penuh. Cukup untuk tahu siapa meminjam apa hari ini.

Konteks masalah

Kelas punya perlengkapan (bola, spidol, speaker). Sering dipinjam tapi lupa siapa yang bawa.

Alur utama

Catat peminjaman → saat dikembalikan, update kolom pengembalian → list peminjaman aktif.

ERD

Skema + CRUD

CREATE TABLE pinjam_barang (
  id             BIGSERIAL PRIMARY KEY,
  tanggal        DATE DEFAULT CURRENT_DATE,
  nama_peminjam  VARCHAR(120) NOT NULL,
  nama_barang    VARCHAR(120) NOT NULL,
  jam_pinjam     TIME,
  jam_kembali    TIME,
  catatan        TEXT
);

-- Dummy
INSERT INTO pinjam_barang (nama_peminjam, nama_barang, jam_pinjam) VALUES
('Rafi', 'Bola futsal', '15:30'),
('Nanda', 'Speaker aktif', '10:00');

-- CREATE
INSERT INTO pinjam_barang (nama_peminjam, nama_barang, jam_pinjam)
VALUES ('Syifa', 'Spidol', '08:15');

-- READ (yang belum kembali)
SELECT * FROM pinjam_barang
WHERE jam_kembali IS NULL
ORDER BY tanggal, jam_pinjam;

-- UPDATE (kembali)
UPDATE pinjam_barang SET jam_kembali = '16:45' WHERE id = 1;

-- DELETE (entri salah)
DELETE FROM pinjam_barang WHERE id = 2;

maka ini adalah hasilnya jika kita mencoba READ

dan ini hasil jika kita UPDATE dan setelah itu READ kembali

dan ini jika kita DELETE dan setelah itu READ kembali

7) Tugas/Kuis Sederhana (Nilai Per Tugas)

Bukan sistem rapor; cukup untuk mencatat nilai satu tugas/kuis per baris.

Konteks masalah

Guru ingin rekap cepat nilai kuis harian tanpa ribet banyak tabel.

Alur utama

Input nilai → lihat ranking hari ini → koreksi nilai bila salah tulis.

ERD

Skema + CRUD

CREATE TABLE nilai_tugas (
  id          BIGSERIAL PRIMARY KEY,
  tanggal     DATE DEFAULT CURRENT_DATE,
  nama_siswa  VARCHAR(120) NOT NULL,
  nama_tugas  VARCHAR(120) NOT NULL,
  nilai       INTEGER,               -- 0..100 (validasi di aplikasi)
  catatan     TEXT
);

-- Dummy
INSERT INTO nilai_tugas (nama_siswa, nama_tugas, nilai) VALUES
('Alya', 'Kuis SQL 1', 85),
('Fajar', 'Kuis SQL 1', 72);

-- CREATE
INSERT INTO nilai_tugas (nama_siswa, nama_tugas, nilai)
VALUES ('Doni', 'Kuis SQL 1', 90);

-- READ (ranking hari ini)
SELECT nama_siswa, nilai
FROM nilai_tugas
WHERE tanggal = CURRENT_DATE
ORDER BY nilai DESC NULLS LAST;

-- UPDATE (koreksi nilai)
UPDATE nilai_tugas SET nilai = 88 WHERE id = 2;

-- DELETE
DELETE FROM nilai_tugas WHERE id = 1;

maka ini adalah hasilnya jika kita mencoba READ

dan ini hasil jika kita UPDATE dan setelah itu READ kembali

dan ini jika kita DELETE dan setelah itu READ kembali

mungkin cukup sekian dan terima kasih

copyright by https://course.ppqita.my.id/cycle/0.1.-mastering-data-with-postgreSQL/8.1_latihan-crud-dgn-studi-kasus?pass=ppqita

M
MUHAMMAD7mo ago

NICE!

A

tolong selesaikan sampai 7 table ya.

A

Agenda Kegiatan Harian, samplenya ada 3 data. tp yg ditable cuma 1 data