1. Nama : Arozisokhi Zebua
Nim : 1042100986
Mata Ujian : Basis Data Lanjut
Jawaban soal:
--Nomor 1—
create database arozisokhi_zebua_uts_bdl;
use arozisokhi_zebua_uts_bdl;
create table provinsi(
id_provinsi int not null auto_increment,
nama_provinsi varchar(200),
primary key(id_provinsi)
);
create table kabupaten(
id_kabupaten int not null auto_increment,
id_provinsi int not null,
nama_kabupaten varchar(200),
foreign key(id_provinsi) references provinsi(id_provinsi),
primary key (id_kabupaten, id_provinsi)
);
create table alamat(
id int not null auto_increment,
id_provinsi int not null,
id_kabupaten int not null,
foreign key(id_provinsi) references provinsi(id_provinsi),
foreign key(id_kabupaten) references kabupaten(id_kabupaten),
primary key (id, id_kabupaten, id_provinsi)
2. );
create table biodata(
id int not null auto_increment,
nama varchar(200),
tgl_lahir date,
primary key(id)
);
create table transaksi(
id int not null auto_increment,
id_biodata int not null,
tanggal_transaksi date,
jumlah_transaksi int,
foreign key (id_biodata) references biodata(id),
primary key(id,id_biodata)
);
3. --Nomor 2--
--Procedure isi_Provinsi--
delimiter $$
create
procedure isi_provinsi()
begin
declare p int;
set p=0;
label : loop
set p=p+1;
insert into provinsi (id_provinsi, nama_provinsi)
values(p, concat("provinsi",p));
if p <12 then iterate label; end if;
leave label;
end loop label;
end$$
delimiter ;
call isi_provinsi();
--Procedure Isi kabupaten--
delimiter $$
create
procedure isi_kabupaten()
begin
declare p int;
set p=0;
label : loop
set p=p+1;
insert into kabupaten (id_provinsi, id_kabupaten, nama_kabupaten)
4. values(p, p, concat("kabupaten",p));
if p <12 then iterate label; end if;
leave label;
end loop label;
end$$
delimiter ;
call isi_kabupaten();
--Procedure isi_alamat--
delimiter $$
create
procedure isi_alamat()
begin
declare p int;
set p=0;
label : loop
set p=p+1;
insert into alamat (id, id_provinsi, id_kabupaten)
values(p,p,p);
if p <12 then iterate label; end if;
leave label;
end loop label;
end$$
delimiter ;
call isi_alamat();
--Procedure isi_biodata--
delimiter $$
create
5. procedure isi_biodata()
begin
declare p int;
set p=0;
label : loop
set p=p+1;
insert into biodata (id, nama, tgl_lahir)
values(p, concat("Biodata",p), concat("1992","-",p,"-",p));
if p <12 then iterate label; end if;
leave label;
end loop label;
end$$
delimiter ;
call isi_biodata();
---Procedure isi_transaksi pertama--
delimiter $$
create
procedure isi_transaksi_pertama()
begin
declare p int;
set p=0;
label : loop
set p=p+1;
insert into transaksi (id, id_biodata,tanggal_transaksi,jumlah_transaksi)
values(p,p,concat("2000","-",p,"-",p),concat(p));
if p <12 then iterate label; end if;
leave label;
end loop label;
6. end$$
delimiter ;
call isi_transaksi_pertama();
---Procedure isi_transaksi kedua--
delimiter $$
create
procedure isi_transaksi_kedua()
begin
declare p int;
declare urut int;
set p=0;
set urut=12;
label : loop
set p=p+1;
set urut = urut+1;
insert into transaksi (id, id_biodata,tanggal_transaksi,jumlah_transaksi)
values(urut, p,concat("2000","-",p,"-",p),concat(urut));
if p <12 then iterate label; end if;
leave label;
end loop label;
end$$
delimiter ;
call isi_transaksi_kedua();
--procedure isi_transaksi_ketiga--
delimiter $$
create
7. procedure isi_transaksi_ketiga()
begin
declare p int;
declare urut int;
declare urut2 int;
set p=0;
set urut=24;
set urut2=15;
label : loop
set p=p+1;
set urut = urut+1;
set urut2 = urut2+1;
insert into transaksi (id, id_biodata,tanggal_transaksi,jumlah_transaksi)
values(urut, p,concat("2000","-",p,"-",p),concat(urut2));
if p <12 then iterate label; end if;
leave label;
end loop label;
end$$
delimiter ;
call isi_transaksi_ketiga();
--procedure isi_transaksi_keempat--
delimiter $$
create
procedure isi_transaksi_keempat()
begin
declare p int;
declare urut int;
declare urut2 int;
set p=0;
8. set urut=36;
set urut2=9;
label : loop
set p=p+1;
set urut = urut+1;
set urut2 = urut2+1;
insert into transaksi (id, id_biodata,tanggal_transaksi,jumlah_transaksi)
values(urut, p,concat("2000","-",p,"-",p),concat(urut2));
if p <12 then iterate label; end if;
leave label;
end loop label;
end$$
delimiter ;
call isi_transaksi_keempat();
--Nomor 3—
catatan yang bisa dihapus
hanya isi tabel transaksi
--Trigger untuk provinsi---
CREATE TABLE transaksi_deleted LIKE transaksi;
ALTER TABLE transaksi_deleted ADD
(
tgl_hapus DATETIME,
nama_user VARCHAR(200)
);
9. DELIMITER $$
CREATE
TRIGGER hapus_transaksi AFTER DELETE ON transaksi FOR EACH ROW
BEGIN
INSERT INTO transaksi_deleted(
id,
id_biodata,
tanggal_transaksi,
jumlah_transaksi,
tgl_hapus,
nama_user
)
VALUES(
OLD.id,
OLD.id_biodata,
OLD.tanggal_transaksi,
OLD.jumlah_transaksi,
SYSDATE(),
CURRENT_USER
);
END;
$$
DELIMITER ;
SHOW TRIGGERS FROM arozisokhi_zebua_uts_bdl;
--Triger untuk restore data yang sudah dihapus--
cara kerja: Jika data yang ada pada transaksi_deleted dihapus maka data tersebut otomatis
dikembalikan ke tabel transaksi
10. DELIMITER $$
CREATE
TRIGGER restore_transaksi AFTER DELETE ON transaksi_deleted FOR EACH ROW
BEGIN
INSERT INTO transaksi(
id,
id_biodata,
tanggal_transaksi,
jumlah_transaksi
)
VALUES(
OLD.id,
OLD.id_biodata,
OLD.tanggal_transaksi,
OLD.jumlah_transaksi
);
END;
$$
DELIMITER ;
11. --Nomor 4--
A. Untuk Menampilkan biodata beserta umur dan alamat
SELECT
a.id,
nama,
tgl_lahir,
(YEAR(CURDATE())-YEAR(tgl_lahir)) AS umur,
(CONCAT(nama_provinsi,",",nama_kabupaten)) AS alamat
FROM
biodata a
LEFT JOIN alamat b ON (b.id=a.id)
LEFT JOIN provinsi c ON (c.id_provinsi=b.id_provinsi)
LEFT JOIN kabupaten d ON (d.id_kabupaten=b.id_kabupaten);
Hasilny :
12. B. Untuk Menampilkan biodata beserta nama dan jumlah transaksi perbulan
SELECT
id,nama,IFNULL (jml_jan,0) AS Januari,IFNULL (jml_feb,0) AS Februari,
IFNULL (jml_mar,0) AS Maret,IFNULL (jml_apr,0) AS April,
IFNULL (jml_mei,0) AS Mei,IFNULL (jml_jun,0) AS Juni,
IFNULL (jml_jul,0) AS Juli,IFNULL (jml_agst,0) AS Agustus,
IFNULL (jml_sep,0) AS September,IFNULL (jml_okt,0) AS Oktober,
IFNULL (jml_nov,0) AS November,IFNULL (jml_des,0) AS Desember
FROM
biodata a
LEFT JOIN
(
SELECT id_biodata, SUM(jumlah_transaksi) AS jml_jan
FROM transaksi
WHERE MONTH(tanggal_transaksi)=1
GROUP BY id_biodata
) AS Januari ON(Januari.id_biodata=a.id)
LEFT JOIN
(
SELECT id_biodata, SUM(jumlah_transaksi) AS jml_feb
FROM transaksi
WHERE MONTH(tanggal_transaksi)=2
GROUP BY id_biodata
) AS Februari ON(Februari.id_biodata=a.id)
LEFT JOIN
(
SELECT id_biodata, SUM(jumlah_transaksi) AS jml_mar
FROM transaksi
WHERE MONTH(tanggal_transaksi)=3
13. GROUP BY id_biodata
) AS Maret ON(Maret.id_biodata=a.id)
LEFT JOIN
(
SELECT id_biodata, SUM(jumlah_transaksi) AS jml_apr
FROM transaksi
WHERE MONTH(tanggal_transaksi)=4
GROUP BY id_biodata
) AS April ON(April.id_biodata=a.id)
LEFT JOIN
(
SELECT id_biodata, SUM(jumlah_transaksi) AS jml_mei
FROM transaksi
WHERE MONTH(tanggal_transaksi)=5
GROUP BY id_biodata
) AS Mei ON(Mei.id_biodata=a.id)
LEFT JOIN
(
SELECT id_biodata, SUM(jumlah_transaksi) AS jml_jun
FROM transaksi
WHERE MONTH(tanggal_transaksi)=6
GROUP BY id_biodata
) AS Juni ON(Juni.id_biodata=a.id)
LEFT JOIN
(
SELECT id_biodata, SUM(jumlah_transaksi) AS jml_jul
FROM transaksi
WHERE MONTH(tanggal_transaksi)=7
14. GROUP BY id_biodata
) AS Juli ON(Juli.id_biodata=a.id)
LEFT JOIN
(
SELECT id_biodata, SUM(jumlah_transaksi) AS jml_agst
FROM transaksi
WHERE MONTH(tanggal_transaksi)=8
GROUP BY id_biodata
) AS Agustus ON(Agustus.id_biodata=a.id)
LEFT JOIN
(
SELECT id_biodata, SUM(jumlah_transaksi) AS jml_sep
FROM transaksi
WHERE MONTH(tanggal_transaksi)=9
GROUP BY id_biodata
) AS September ON(September.id_biodata=a.id)
LEFT JOIN
(
SELECT id_biodata, SUM(jumlah_transaksi) AS jml_okt
FROM transaksi
WHERE MONTH(tanggal_transaksi)= 10
GROUP BY id_biodata
) AS Oktober ON(Oktober.id_biodata=a.id)
LEFT JOIN
(
SELECT id_biodata, SUM(jumlah_transaksi) AS jml_nov
FROM transaksi
15. WHERE MONTH(tanggal_transaksi)=11
GROUP BY id_biodata
) AS November ON(November.id_biodata=a.id)
LEFT JOIN
(
SELECT id_biodata, SUM(jumlah_transaksi) AS jml_des
FROM transaksi
WHERE MONTH(tanggal_transaksi)=12
GROUP BY id_biodata
) AS Desember ON(Desember.id_biodata=a.id)
;
Hasilnya :
---Sekian Terimaksih, Tuhan Memberkati---