Anda di halaman 1dari 11

CONTOH SKEMA RELASI UNTUK DATABASE HOBIMAHASISWA

CREATED BY Galih Hermawan, MK Praktikum Sistem Basis Data, USING MySQL 5.1.36, MODULE VERSION 1.0 (23-11-2011).
LAST UPDATE : 11/24/2011 12:19:15 PM @ Informatics Engineering. UNIKOM. Bandung.

DDL SQL Tabel Mahasiswa


CREATE TABLE mahasiswa (
nim char(2) NOT NULL,
nama varchar(30) NOT NULL,
tempat_lahir varchar(30) DEFAULT NULL,
tanggal_lahir date DEFAULT NULL,
kota varchar(30) DEFAULT NULL,
tanggal_masuk date DEFAULT NULL,
tinggi_badan tinyint(4) unsigned DEFAULT NULL,
PRIMARY KEY (nim)
) ENGINE=InnoDB;

DDL SQL Tabel Hobi


CREATE TABLE hobi (
kodehobi tinyint(2) NOT NULL,
namahobi varchar(20) NOT NULL,
PRIMARY KEY (kodehobi)
) ENGINE=InnoDB;

DDL SQL Tabel MhsHobi


CREATE TABLE mhshobi (
nim char(2) DEFAULT NULL,
kodehobi tinyint(2) DEFAULT NULL,
KEY FK_mhshobi (kodehobi),
KEY FK_mhshobi2 (nim),
CONSTRAINT FK_mhshobi FOREIGN KEY (kodehobi) REFERENCES hobi (kodehobi),
CONSTRAINT FK_mhshobi2 FOREIGN KEY (nim) REFERENCES mahasiswa (nim)
) ENGINE=InnoDB;

INPUT DATA Mahasiswa

INPUT DATA Hobi

INPUT DATA MhsHobi

SQL dapat dilihat di source code terlampir.

MENGAMBIL DATA DARI BANYAK TABEL


Contoh kasus: menampilkan seluruh data mahasiswa dan data hobi yang diminatinya.
Cara 1 :
SELECT *
FROM mahasiswa,mhshobi,hobi
WHERE mahasiswa.nim=mhshobi.nim
AND mhshobi.kodehobi=hobi.kodehobi;

Output:

Cara 2 :
SELECT *
FROM mahasiswa JOIN mhshobi USING (nim) JOIN hobi USING (kodehobi);

ATAU
SELECT *
FROM mahasiswa JOIN mhshobi ON mahasiswa.nim=mhshobi.nim
JOIN hobi ON mhshobi.kodehobi=hobi.kodehobi;

Output:

Perhatikan perbedaannya antara cara 1 dan cara 2 pada output, bahwa atribut NIM dan KODEHOBI
hanya muncul sekali.
Output bisa lebih informatif dengan memfilter hanya pada atribut-atribut tertentu saja yang
ditampilkan.
Dari dua cara tersebut di atas, ada data yang tidak muncul, yaitu mahasiswa dengan NIM 6 bernama
Rully dan hobi dengan kode 6 bernama Tidur. Hal ini disebabkan kedua data tersebut tidak berada di
tabel MhsHobi.
Untuk menampilkan yang tidak terdapat dalam relasi MhsHobi, kita bisa menggunakan LEFT JOIN
atau RIGHT JOIN.
Cara 3 (menampilkan seluruh data mahasiswa, baik yang punya hobi atau tidak).
SELECT *
FROM mahasiswa LEFT JOIN mhshobi USING (nim)
LEFT JOIN hobi USING (kodehobi);

OUTPUT

Cara 4 (menampilkan seluruh data hobi, baik yang diminati ataupun tidak).
SELECT *
FROM mahasiswa RIGHT JOIN mhshobi USING (nim)
RIGHT JOIN hobi USING (kodehobi);

OUTPUT

CONTOH KASUS TIPE I DASAR


I-1. Menampilkan seluruh data mahasiswa yang tempat lahirnya di kota Surabaya.
SELECT *
FROM mahasiswa
WHERE tempat_lahir="Surabaya";

Operator Perbandingan: =, <, <= ,>, >=, <>, dll.


Operator Logika: AND, OR, NOT, dll.

I-2. Menampilkan data mahasiswa pada kolom nama dan tanggal lahir untuk mahasiswa yang
namanya berawalan A dan tahun lahirnya >= 1990.
SELECT nama, tanggal_lahir
FROM mahasiswa
WHERE nama LIKE "A%" AND tanggal_lahir>="1990-01-01";

Silakan latihan dengan meletakkan tanda % di awal seperti %A


atau di depan dan di akhir seperti %A%. Apa bedanya?
Jangan lupa juga mencoba penggunaan karakter _ (underscore).

I-3. Menampilkan data mahasiswa yang lahir di kota Surabaya maupun Jakarta, data diurutkan
berdasarkan tanggal lahir dari termuda sampai tertua.
SELECT *
FROM mahasiswa
WHERE tempat_lahir="Surabaya" OR tempat_lahir="Jakarta"
ORDER BY tanggal_lahir DESC;

I-4. Menampilkan data mahasiswa yang tanggal lahirnya paling muda.


SELECT *
FROM mahasiswa
ORDER BY tanggal_lahir DESC
LIMIT 1;

Penggunaan klausa LIMIT X (dimana X adalah sebuah bilangan bulat) menyatakan berapa buah
baris (record) yang ingin ditampilkan. Pernyataan LIMIT lain adalah seperti LIMIT X,Y dimana X
adalah baris ke X + 1, sebanyak Y record.

I-5. Menampilkan data nama kota tempat lahir mahasiswa secara unik urut nama kota.
SELECT DISTINCT tempat_lahir
FROM mahasiswa ORDER BY tempat_lahir;

Tanpa DISTINCT

I-6. Menampilkan data mahasiswa dengan pemberian nama baru pada judul kolom tempat_lahir
menjadi Tempat Lahir, dan kota menjadi Alamat.
SELECT nim, nama, tempat_lahir AS "Tempat Lahir", kota AS Alamat
FROM mahasiswa;

I-7. D

CONTOH KASUS TIPE II FUNGSI AGREGASI


Fungsi Agregasi terdiri atas: max(), min(), avg(), sum(), count().
II-1. Menampilkan nilai maksimal, minimal, dan rata-rata tinggi badan mahasiswa.
SELECT max(tinggi_badan), min(tinggi_badan), avg(tinggi_badan),
sum(tinggi_badan), count(tinggi_badan)
FROM mahasiswa;

Catatan:
Max(tinggi_badan) : menghitung nilai maksimal pada kolom tinggi_badan.
Min(tinggi_badan) : menghitung nilai minimal pada kolom tinggi_badan.
Avg(tinggi_badan) : menghitung nilai rata-rata pada kolom tinggi_badan.
Sum(tinggi_badan) : menghitung total nilai numerik pada kolom tinggi_badan.
Count(tinggi_badan) : menghitung banyaknya baris/data pada kolom tinggi_badan.
II-2. Menampilkan jumlah (banyaknya) kota tempat lahir mahasiswa (mengacu pada soal I-5).
SELECT COUNT(DISTINCT tempat_lahir)
FROM mahasiswa ORDER BY tempat_lahir;

Tanpa DISTINCT

II-3. Menampilkan data mahasiswa yang tinggi badannya paling besar/tinggi.


Cara 1.
SELECT *
FROM mahasiswa ORDER BY tinggi_badan DESC
LIMIT 1;

Cara 2.

SELECT *
FROM mahasiswa
WHERE tinggi_badan =
(

Cara 1 tidak bisa atau tidak


cocok digunakan jika nilai
tinggi_badan maksimal
terdapat pada lebih dari satu
mahasiswa.

SELECT max(tinggi_badan) FROM mahasiswa


);

Output kedua query tersebut di atas adalah sama.

Catatan:

Cara 2 tersebut di atas adalah contoh solusi menggunakan sub query.


Perhatikan bahwa penggunaan operator = sebelum sub query hanya bisa digunakan
jika keluaran sub query hanya mengembalikan sebuah nilai.

II-4. Menampilkan data mahasiswa yang tinggi badannya di atas nilai rata-rata tinggi badan temantemannya yang lain.
SELECT *
FROM mahasiswa
WHERE tinggi_badan >
(

SELECT avg(tinggi_badan) FROM mahasiswa


);

Perhatikan bahwa nilai rata-rata tinggi badan mahasiswa berdasarkan soal II-1 adalah 167.3333.
II-5. Menampilkan jumlah mahasiswa per kota tempat lahirnya.
SELECT tempat_lahir, count(nim)
FROM mahasiswa
GROUP BY tempat_lahir;

Penggunaan klausa GROUP BY di atas adalah untuk mengelompokkan penghitungan banyak


mahasiswa, COUNT(NIM), berdasarkan parameter yang digunakan dalam GROUP BY (?), yaitu
tempat_lahir. Anda juga bisa latihan menggunakan parameter lain dalam pengelompokan ini,
misalnya menghitung banyak mahasiswa per tahun lahir, per tinggi badan, dan lain-lain.
II-6. Menampilkan jumlah mahasiswa per kota tempat lahirnya, namun hanya untuk kota yang
jumlah mahasiswanya lebih dari 1 (mengacu soal II-5).
SELECT tempat_lahir, count(nim)
FROM mahasiswa
GROUP BY tempat_lahir
HAVING count(nim) > 1 ;

Perhatikan bahwa fungsi HAVING adalah seperti WHERE, merupakan sebuah kondisi yang harus
dipenuhi oleh sebuah query. Hanya saja, klausa HAVING digunakan jika sebuah kondisi tersebut
melibatkan fungsi agregasi, contohnya COUNT(nim) sebagaimana terlihat di atas. Peletakan
fungsi agregasi dalam atau setelah klausa WHERE tidak diperkenankan, menimbulkan error.

II-7.

CONTOH KASUS TIPE III AKSES DATA PADA BANYAK TABEL


III-1.