LAPORAN PRAKTIKUM 5 BASIS DATA RELASI DA
LAPORAN MODUL V
PRAKTIKUM BASIS DATA
Disusun untuk Memenuhi Matakuliah Praktikum Basis Data
Dibimbing oleh Triyanna Widyaningtyas, S.T., M.T.
Oleh:
Dwitha Fajri Ramadhani
160533611410
Ika Damayanti
160533611505
S1 PTI’16 OFF B
UNIVERSITAS NEGERI MALANG
FAKULTAS TEKNIK
JURUSAN TEKNIK ELEKTRO
PRODI S1 PENDIDIKAN TEKNIK INFORMATIKA
Maret 2017
1. Judul
RELASI & JOIN
2. Dasar Teori
2.1 Relationship
Relationship adalah suatu hubungan antara beberapa entitas. Konsep ini sangat penting
sekali di dalam basis data, dimana memungkinkan entitas – entitas untuk saling
berhubungan satu sama lain.
Di dalam sebuah relationship, primary key memilik peran penting dalm mengaitkan
entitas. Saelain itu, primary key juga digunakan untuk mendefinisikan batasan
keterhubungan.
Jenis-jenis relasi entitas :
2.1.1
Satu ke satu (one to one)
Setiap data pada entitas A berhubungan dengan maksimal satu data pada entitas
B, begitu pula sebaliknya.
2.1.2
Satu ke banyak (one to many) atau banyak ke satu (many to one)
Setiap data pada entitas A bisa berhubungan dengan banyak data pada entitas B,
tetapi data pada entitas B berhubungan maksimal hanya dengan sebuah data di
A.
2.1.3
Banyak ke banyak (many to many)
Setiap data pada entitas A bisa berhubungan dengan banyak data pada entitas B,
demikian pula sebaliknya.
2.2 Operator dasar pada MySQL
2.2.1
OPERATOR AS
AS biasa digunakan untuk menampilkan label kolom dengan nama lain sehingga
yang akan muncul dalam hasil query bukan nama asli kolom, tetapi nama yang
mungkin lebih sesuai dan mudah dimengerti. AS digunakan setelah nama kolom
yang akan diganti yang kemudian diikuti dengan nama penggantinya. Sintaks:
SELECT [NAMA KOLOM] AS [NAMA KOLOM PENGGANTI] FROM
[NAMA TABEL];
2.2.2
OPERATOR AND
Kegunaan operator ini adalah untuk melakukan pencarian dan menampilkan
data yang lebih akurat. Dengan operator AND akan ditampilkan data yang hanya
memenuhi kedua syarat yang ditentukan. Sintaks : SELECT * FROM [NAMA
TABEL] WHERE [NAMA KOLOM] = ‘[PENCARIAN 1]’ AND [NAMA
KOLOM] = ‘[PENCARIAN 2]’;
2.2.3
OPERATOR OR
Fungsi operator OR mirip dengan operator AND, namun jika operator AND
menampilkan data yang harus memenuhi kedua syarat yang dibutuhkan,
operator OR akan menampilkan data yang hanya memenuhi salah satu dari
kedua syarat yang ditentukan. Sintaks : SELECT * FROM [NAMA TABEL]
WHERE [NAMA KOLOM] = ‘[PENCARIAN 1]’ OR [NAMA KOLOM] =
‘[PENCARIAN 2]’;
2.2.4
OPERATOR BETWEEN
BETWEEN digunakan untuk menentukan lebar nilai dari nilai terendah dan nilai
tertinggi. Sintaks : SELECT * FROM [NAMA TABEL] WHERE [NAMA
KOLOM] BETWEEN ‘[NILAI AWAL]’ AND ‘[NILAI AKHIR]’;
2.2.5
OPERATOR LIKE
LIKE digunakan ketika kita ingin mencari sebuah data yang hanya diwakili oleh
salah satu atau lebih hurufnya saja. Misalkan kita ingin mencari nama yang huruf
awalnya R, maka kita harus menggunakan LIKE. Sintaks : SELECT * FROM
[NAMA TABEL] WHERE [NAMA KOLOM] LIKE ‘[OPERATOR]’;
2.2.6
OPERATOR DISTINCT
Digunakan untuk memilih data-data yang berbeda (menghilangkan duplikasi)
dari sebuah tabel database. Sintaks : SELECT DISTINCT [NAMA KOLOM]
FROM [NAMA TABEL];
2.2.7
OPERATOR LIMIT
Kegunaan operator LIMIT terletak pada pembatasan atas jumlah data yang
boleh ditampilkan, Sintaks : SELECT * FROM [NAMA TABEL] ORDER BY
[NAMA
KOLOM]
DITAMPILKAN];
2.2.8
OPERATOR OFFSET
LIMIT
[JUMLAH
DATA
YANG
INGIN
Menghilangkan jumlah data yang akan ditampilkan, Sintaks : SELECT * FROM
[NAMA TABEL] ORDER BY [NAMA KOLOM] OFFSET [JUMLAH DATA
YANG INGIN DIHILANGKAN];
2.2.9
UNION, EXCEPT dan INTERSECT
Perintah UNION dalam MySQL di gunakan untuk menggabungkan atau
mengkombinasikan isi dari dua tabel menjadi satu. Sama seperti artinya
INTERSECT ini di gunakan untuk mencari irisan pada dua atau lebih tabel.
Sintaks : SELECT * FROM [NAMA TABEL1] INTERSECT SELECT *
FROM [NAMA TABEL2]
Kemudian perintah yang terakhir yaitu EXCEPT, EXCEPT ini digunakan untuk
memunculkan isi tabel yang berada di luar irisan tabel. Sintaks : SELECT *
FROM [NAMA TABEL1] EXCEPT SELECT * FROM [NAMA TABEL2]
2.3 Join
Join merupakan salah satu konstruksi dasar dari SQL dan basis data. Join dapat
didefinisikan sebagai kombinasi record dari dua atau lebih tabel di dalam basis sebagai
joined table.
Join dapat diklasifikasikan ke dalam dua jenis, yaitu inner join dan outer join.
2.3.1
Inner Join
Inner join pada dasarnya adalah menentukan persimpangan (intersection) antara
dua buah tabel.
Sintaks inner join diperlihatkan sebagai berikut :
Inner join terdapat tabel A dan B, maka hasil inner join dapat diperhatikan
sebagai bidang dalam diagram Venn seperti Gambat 1.
2.3.2
Outer Join
Outer join dibagi ke dalam tiga jenis, yaitu left outer join, right outer join, dan
full outer join.
2.3.2.1.1
Left Outer Join
Left outer join (atau left join) mengembaliakan semua nilai dari tabel kiri
tditambah dengan nilai dari tabel kanan yang sesuai (atau NULL jika tidak ada
nilai yang sesuai).
Sintaks Left ourer join diperlihatkan sebagai berikut :
Left
outer join antara tabel A dan B dapat diilustrasikan dalam diagram Venn seperti
Gambar 2.
2.3.2.1.2
Right Outer Join
Right outer join (atau right join) pada dasarnya sama seperti left join, namun
dalam bentuk terbalik kanan dan kiri.
Sintaks Right outer join diperguakan sebagai berikut:
Right outer join antara tabel A dan B dapat diilustrasikan dalam diagram Venn
seperti Gambar 3.
2.3.2.1.3
Full Outer Join
Full outer join (atau full join) pada hakekatnya merupakan kombinasi dari left
dan right join.
Sintaks full outer join dipelihatkan sebagai berikut :
Bentuk visual dari full outer join dapat diperlihatkan menggunakan diagram
Venn seperti Gambar 4.
2.3.3
Cross Join
Menggabungkan/output isi kedua table secara permutasi (Cartesian Products)
Dengan kata lain, cross join akan menghubungkan tiap-tiap kolom table A
dengan masing-masing kolom di table B tanpa memperhatikan PK.
2.3.4
Natural Join
Menggabungkan/output isi kedua table berdasarkan nama kolom yang sama
tanpa suatu kondisi(qualifier). Menurut para pengamat, natural join sangat
disarankan tidak digunakan.
Perlu juga diperhatikan, join diimplimentasikan dalam bentuk bersarang (nested
join). Jadi, di dalam sebuah operasi join bisa terdapat operasi join lainnya.
2.4 Union
MySQL Union adalah statemen yang mengkombinasikan dua buah atau lebih
resulset dari beberapa table dengan statemen SELECT sehingga menjadi satu
buah result.
Union statemen memilki beberapa ketentuan sehingga berikut :
a. Jumlah kolom / field dari setiap statemen SELECT harus sama.
b. Tipe data kolom/field dari setiap statemen SELECT harus kompatibel.
Secara default Statemen UNION akan menghapus semua record duplikasi dari
resultset. Apabila anda ingin record duplikasi tetap di tampilkan maka pada
resultset tuliskan secara explisit UNION ALL. Perbedaan Union dan Union All
dapat dijelaskan dalam diagram Venn 5 dan 6.
Fungsi Union sendiri dapat dijalankan dengan sintaks sebagai berikut :
3. Latihan
Sebelum melakukan tugas latihan, praktikan membuka XAMPP CONTROL PANEL dan
memilih Start pada Module MySQL dan Apache kemudian klik Admin atau mengakses
localhost/phpmyadmin pada browser.
Gambar 1. Start MySQL dan Apache
Maka akan tampil seperti pada gambar dibawah ini :
Gambar 2. Tampilan phpmyadmin
3.1 Relationship
Untuk memulai latihan kali ini praktikkan menciptakan objek query, pada halaman awal
phpMyAdmin praktikan memilih menu SQL, setelah itu muncul halaman editor SQL,
dalam editor tersebut tempat untuk praktikkan mengetikkan pernyataan SQL, untuk
membuat database maka diketikkan pernyataan CREATE DATABASE ‘nama_database’;
nama_database bisa disesuaikan dengan keinginan pengguna, dalam praktikum ini
praktikkan mengetikkan CREATE DATABASE MODUL5_005; sehingga nama database
yang dibuat adalah MODUL5_005.
Gambar 3. CREATE DATABASE MODUL5_005; pada SQL
Untuk mengeksekusi pernyataan SQL tersebut dengan klik tombol Go. Setelah itu database
MODUL5_005 akan berhasil dibuat.
Gambar 4. Database modul5_005 berhasil dibuat
Setelah menciptakan sebuah database, praktikkan menciptakan dua buah tabel secara
bergantian dengan klik SQL pada awal tampilan phpMyAdmin, kemudian mengetikkan
pernyataan-pernyataan yang dibutuhkan pada praktikum kali ini. Struktur untuk pernyataan
pembuatan tabel adalah sebagai berikut :
CREATE TABLE ‘nama_tabel’ (
‘nama_field1’ TIPEDATA(length),
‘nama_field2’ TIPEDATA(length),
PRIMARY KEY(nama_field) );
Dalam praktikum kali ini praktikkan membuat tabel yang bernama karyawan, dengan
memiliki 2 field yaitu Nama yang bertipe data VARCHAR dengan length 30 dan di set NOT
NULL. Field kedua yaitu id_dep yang bertipe data INT yang memilik length 5 dan di set
NOT NULL, praktikkan memilih tipe data VARCHAR dan INT karena tipe data tersebut
lebih general sebenarnya penggunaan tipe data TEXT dan NUMBER juga diterima, namun
kurang standar. Primary key tidak di set karena sesuai dengan pernyataan pada modul.
ENGINE = MyISAM merupakan storage atau penyimpanan yang menangani tabel yang
non-transactional. Tipe tabel ini menyediakan penyimpanan dan retrieval berkecepatan
tinggi, dan juga kemampuan pencarian fulltext. MyISAM didukung di semua konfigurasi
MySQL dan merupakan engine penyimpanan default kecuali apabila pengguna telah
melakukan konfigurasi MySQL untuk menggunakan tipe lain sebagai defaultnya.
Kemudian eksekusi pernyataan penciptaan tabel dengan klik Go.
Gambar 5. CREATE TABLE karyawan; pada SQL
Gambar 6. Tabel karyawan telah berhasil dibuat
Untuk mengecek struktur dari tabel karyawan dengan klik karyawan pada modul5_005
kemudan pilih Structure.
Gambar 7. Struktur tabel karyawan pada database modul5_005
Tabel yang kedua bernama departemen, dengan memiliki 2 field yaitu id_dep yang bertipe
data INT dengan length 5 dan di set NOT NULL. Field kedua yaitu nama_dep yang bertipe
data VARCHAR yang memilik length 30 dan di set NOT NULL. Field id_dep di set sebagai
primary key karena sesuai dengan pernyataan pada modul dan id_dep memiliki nilai yang
bersifat unik atau antara data satu dengan data yang lainnya berbeda. Sama seperti tabel
karyawan Engine Storage atau penyimpanan dari tabel departemen di set MyISAM yang
Kemudian eksekusi pernyataan penciptaan tabel dengan klik Go.
Gambar 8. CREATE TABLE departemenn; pada SQL
Gambar 9. Tabel departemen telah berhasil dibuat
Untuk mengecek struktur dari tabel departemen dengan klik departemen pada modul5_005
kemudan pilih Structure.
Gambar 10. Struktur tabel karyawan pada database modul5_005
Setelah kedua tabel berhasil dibuat kemudian praktikkan menambahkan data pada kedua
tabel tersebut melalui pernyataan SQL. Struktur untuk pernyataan menambahkan data pada
tabel adalah sebagai berikut :
INSERT INTO ‘nama_tabel’
VALUES
(‘data_field1, ‘data_field2’, ‘data_fiedlke-n’),
(‘data_field1, ‘data_field2’, ‘data_fiedlke-n’);
Praktikkan menambahkan data pada tabel karyawan sesuai dengan yang diperintahkan pada
modul, dengan data seperti pada gambar dibawah ini.
Gambar 11. INSERT INTO karyawan;
Gambar 12. Data telah ditambahkan pada tabel karyawan;
Untuk melihat data yang telah ditambahkan pada tabel karyawan dengan pernyataan sebagai
berikut :
Gambar 13. Melihat data pada tabel karyawan;
Kemudian akan menampilkan data dari tabel karyawan
Gambar 14. Data pada tabel karyawan;
Praktikkan menambahkan data pada tabel departemen sesuai dengan yang diperintahkan
pada modul, dengan data seperti pada gambar dibawah ini.
Gambar 15. INSERT INTO departemen;
Gambar 16. Data telah ditambahkan pada tabel departemen;
Untuk melihat data yang telah ditambahkan pada tabel karyawan dengan pernyataan sebagai
berikut :
Gambar 17. Melihat data pada tabel departemen;
Kemudian akan menampilkan data dari tabel departemen
Gambar 18. Data pada tabel departemen;
3.2 Inner Join
Pernyataan inner join akan mengembalikan data di tabel A dan B yang sesuai. Sebagai
contoh, untuk mendapatkan data karyawan yang memiliki departemen dengan
mengeksekusi pernyataan atau perintah SQL berikut :
Gambar 19. SELECT * FROM karyawan INNER JOIN departemen;
Maka data yang diperoleh dari eksekusi pernyataan SQL diatas adalah sebagai berikut :
Gambar 20. Hasil dari SELECT * FROM karyawan INNER JOIN departemen;
Selain menggunakan pernyataan SQL diatas, data juga dapat diperoleh dengan
menggunakan inner join bentuk implisitnya, seperti pada gambar dibawah ini.
Gambar 21. Inner join bentuk implisit;
Gambar 22. Hasil dari inner join bentuk implisit;
Pada gambar 19 dan 21 pernyataan SQL diatas memiliki hasil yang sama. Karena yang
diseleksi adalah data karyawan yang memiliki departemen maka pernyataan keduanya
menghasilkan nama AGUS dengan id_dep 10 nama_dep PENELITIAN dan CITRA dengan
id_dep 12 nama_dep SDM. Perbedaan antara perintah diatas hanya pada penulisan sintaks
saja yaitu yang kedua berbentuk implisit.
Untuk pengambilan data juga bisa menspesifikasikan field terkait. Sebagai contoh, untuk
mengambil nama karyawan dan nama departemen yang ditempatinya saja, eksekusi SQL :
Gambar 23. Pengambilan data dengan spesifikasi field terkait;
Gambar 24. Hasil dari pengambilan data dengan spesifikasi field terkait;
Jika pengguna ingin menampilkan field tertentu saja, maka nama field tersebut harus
disebutkan secara eksplisit beserta nama tabel tempat field.
Untuk efisiensi penulisan pernyataan SQL, praktikkan memanfaatkan fitur derived table,
penggunaan derived table akan semakin efisien apabila pengguna berurusan dengan banyak
field dan banyak tabel, selain itu juga menjadikan pernyataan SQL mudah dipahami.
Pernyataan SQL dengan fitur derived table seperti pernyataan dibawah ini :
Gambar 25. Efisiensi pernyataan SQL dengan memanfaatkan derived table;
Pada pernyataan SQL di atas, tabel karyawan dinotasikan dengan huruf k dan tabel
departemen menggunakan huruf d. Hasil eksekusi perintah SQL tersebut sama dengan hasil
eksekusi perintah SQL sebelumya.
Gambar 26. Hasil dari efisiensi pernyataan SQL dengan memanfaatkan derived table;
Pada gambar 23 dan 25 pernyataan SQL diatas memiliki hasil yang sama. Karena yang
diseleksi adalah nama karyawan dan nama departemen maka pernyataan keduanya
menghasilkan nama AGUS dengan nama_dep PENELITIAN dan CITRA dengan
nama_dep SDM. Pada pernyataan pertama sintaks dengan menambahkan keterangan
“karyawan.nama”
dan
“departemen.nama_dep”,
sedangkan
pernyataan
kedua
menggunakan fitur derived table yang menuliskan pernyataan secara efisien, karyawan
dinotasikan dengan huruf k dan departemen dengan huruf d.
3.3 Outer Join
3.3.1
Left Outer Join
Left outer join mengembalikan semua nilai dari tabel kiri ditambah dengan nilai dari
tabel kanan yang sesuai atau NULL jika tidak ada nilai yang sesuai. Contoh pernyataan
left outer join dalam tabel karyawan dengan departemen adalah sebagai berikut :
Gambar 27. Tabel karyawan left outer join tabel departemen;
Gambar 28. Hasil dari tabel karyawan left outer join tabel departemen;
Pada pernyataan di atas yang yang dijadikan patokan yaitu tabel karyawan, karena tabel
karyawan di left outer join dengan tabel departemen sehingga menghasilkan ada data
yang NULL yang ditampilkan pada gambar diatas. Alasannya karena data BUDI dengan
id_dep 16 dan DANI dengan id_dep 17 pada tabel karyawan, sedangkan data pada tabel
departemen hanya terdapat data id_dep 10, 11, 12, dan 13. Sehingga pada saat tabel
karyawan di left outer join dengan tabel departemen data BUDI dengan id_dep 16 dan
DANI dengan id_dep 17 memiliki NULL value pada field id_dep dan nama_dep pada
tabel departemen.
Left outer join dengan menggunakan klausa WHERE, seperti pada pernyataan SQL
dibawah ini :
Gambar 29. Tabel karyawan left outer join tabel departemen dengan klausa WHERE;
Gambar 30. Hasil dari tabel karyawan left outer join tabel departemen dengan klausa WHERE;
Pada pernyataan di atas yang yang dijadikan patokan yaitu tabel karyawan, karena tabel
karyawan di left outer join dengan tabel departemen, kemudian terdapat penambahan
query WHERE d.id_dep IS NULL mengakibatkan data yang tampil adalah Nama dan
id_dep pada tabel karyawan yang id_dep dan nama_dep pada tabel departemen berisi
NULL. Maka dari itu yang tampil adalah BUDI dengan id_dep 16 dan DANI dengan
id_dep 17 karena BUDI dan DANI tidak memiliki departemen (nama departemennya
tidak tercatat dalam tabel departemen).
3.3.2
Right Outer Join
Right outer join mengembalikan semua nilai dari tabel kanan ditambah dengan nilai dari
tabel kiri yang sesuai atau NULL jika tidak ada nilai yang sesuai. Contoh pernyataan
Right outer join dalam tabel karyawan dengan departemen adalah sebagai berikut :
Gambar 31. Tabel karyawan right outer join tabel departemen;
Gambar 32. Hasil dari tabel karyawan right outer join tabel departemen;
Pada pernyataan di atas yang yang dijadikan patokan yaitu tabel departemen, karena
tabel departemen berada disebelah kanan tabel karyawan, sehingga menghasilkan ada
data yang NULL yang ditampilkan pada gambar diatas. Alasannya karena data id_dep
11 dengan nama_dep PEMASARAN dan id_dep 13 dengan nama_dep KEUANGAN
pada tabel departemen, sedangkan data pada tabel karyawan hanya terdapat data id_dep
10 dengan nama AGUS dan id_dep 12 dengan nama CITRA. Sehingga pada saat kedua
tabel di right outer join data id_dep 11 dengan nama_dep PEMASARAN dan id_dep
13 dengan nama_dep KEUANGAN memiliki NULL value pada field Nama dan id_dep
pada tabel karyawan.
3.3.3
Full Outer Join
Full outer join pada hakikatnya merupakan kombinasi dari left outer join dan right outer
join. Karena pada beberapa DBMS tidak mendukung fungsionalitas full outer join maka
disimulasikan dengan memanfaatkan UNION. Dengan menggabungkan left outer join
dan right outer join seperti pernyataan SQL dibawah ini :
Gambar 33. Tabel karyawan full outer join tabel departemen;
Gambar 34. Hasil dari tabel karyawan full outer join tabel departemen;
Penjelasan dari pernyataan SQL full outer join adalah kombinasi penjelasan dari tugas
latihan 3.3.1 dan 3.3.2, pada keluaran diatas yaitu menampilkan semua data pada tabel
karyawan dan departemen meskipun ada data relasi yang dimana tabel karyawan dan
tabel departemen datanya NULL.
3.3.4
Cross Join
Cross join pada hakikatnya merupakan inner join dimana kondisi join selalu dievaluasi
true. Secara matematis, jika A dan B merupakan dua himpunan, maka cross join-nya
sama dengan X. Contoh pernyataan SQL dari cross join adalah sebagai berikut :
Gambar 35. Tabel karyawan cross join tabel departemen;
atau juga dapat menggunakan pernyataan SQL dalam bentuk implisitnya seperti ini :
Gambar 35. Tabel karyawan cross join tabel departemen secara implisit;
Gambar 36. Hasil dari tabel karyawan cross join tabel departemen (kiri); secara implisit (kanan);
Dari hasil pernyataan cross join diatas seperti perkalian silang yang hasilnya menjadi
sangat banyak seperti tabel diatas, dan juga hasil dari cross join banyak yang tidak
sinkron dengan yang direlasikan.
3.4 Union
Dalam latihan ini praktikkan membuat tabel baru dengan nama tabel karyawan2, yang
memiliki 2 field yaitu Nama yang bertipe data VARCHAR dengan length 30 dan di set NOT
NULL. Field kedua yaitu id_dep yang bertipe data INT yang memilik length 5 dan di set
NOT NULL, praktikkan memilih tipe data VARCHAR dan INT karena tipe data tersebut
lebih general sebenarnya penggunaan tipe data TEXT dan NUMBER juga diterima, namun
kurang standar. Primary key tidak di set karena sesuai dengan pernyataan pada modul.
ENGINE = MyISAM merupakan storage atau penyimpanan yang menangani tabel yang
non-transactional. Tipe tabel ini menyediakan penyimpanan dan retrieval berkecepatan
tinggi, dan juga kemampuan pencarian fulltext. MyISAM didukung di semua konfigurasi
MySQL dan merupakan engine penyimpanan default kecuali apabila pengguna telah
melakukan konfigurasi MySQL untuk menggunakan tipe lain sebagai defaultnya.
Kemudian eksekusi pernyataan penciptaan tabel dengan klik Go.
Gambar 37. CREATE TABLE karyawan2;
Gambar 38. Tabel karyawan2 telah berhasil dibuat
Untuk mengecek struktur dari tabel karyawan2 dengan klik karyawan pada modul5_005
kemudan pilih Structure.
Gambar 39. Struktur tabel karyawan2 pada database modul5_005
Praktikkan menambahkan data pada tabel karyawan2 sesuai dengan yang diperintahkan pada
modul, dengan data seperti pada gambar dibawah ini.
Gambar 39. INSERT INTO karyawan2;
Gambar 40. Data telah ditambahkan pada tabel karyawan2;
Untuk melihat data yang telah ditambahkan pada tabel karyawan2 dengan pernyataan
sebagai berikut :
Gambar 41. Melihat data pada tabel karyawan2;
Kemudian akan menampilkan data dari tabel karyawan2
Gambar 42. Data pada tabel karyawan2;
Setelah tabel telah dibuat maka praktikkan melakukan penggabungan dengan perintah
sebagai berikut :
Gambar 43. Contoh pernyataan UNION;
Gambar 44. Hasil dari pernyataan UNION;
Dari eksekusi pernyataan karyawan UNION karyawan2 memperoleh 6 data record dari
field nama dan field id_dep antara lain “AGUS, 10”, “BUDI, 16”, “CITRA, 12”, “DANI,
17”, “ANISA, 18”, “BAGUS, 12”. Hasil relasi tabel karyawan dengan tabel karyawan2
tersebut menjadi satu tabel, namun data nama DANI dengan id_dep 17, hanya tampil satu
saja, padahal data nama DANI dengan id_dep 17 terdapat pada tabel karyawan maupun
tabel karyawan2. Hal tersebut dapat terjadi, karena default statement UNION adalah
menghilangkan duplikat. Sehingga diperoleh data tanpa duplikasi.
Latihan selanjutnya adalah mengganti pernyataan SQL “UNION” diatas menjadi “UNION
ALL”, dapat diperhatikan pada pernyataan dibawah ini :
(a)
(b)
Gambar 45. Contoh pernyataan UNION ALL;
(a) karyawan UNION ALL karyawan2, (b) karyawan2 UNION ALL karyawan
(a)
(b)
Gambar 46. Contoh pernyataan UNION ALL;
(a) karyawan UNION ALL karyawan2, (b) karyawan2 UNION ALL karyawan
Dalam kedua pernyataan tersebut menghasilkan data yang berbeda, karena pada pernyataan
(a) adalah karyawan UNION ALL karyawan2, sedangkan pada pernyataan (b) adalah
karyawan2 UNION ALL karyawan. Namun tetap saja kedua pernyataan nya tidak
menghasilkan data yang benar. “Karena UNION ALL adalah statemen yang
mengkombinasikan dua buah atau lebih resulset dari beberapa tabel dengan statemen
SELECT sehingga menjadi satu buah result, dengan record duplikasi tetap di tampilkan.”.
Pada XAMPP v3.2.2 tidak support eksekusi UNION ALL, Sehingga untuk percobaan
latihan UNION ALL praktikkan mengeksekusi pernyataan tersebut menggunakan
command prompt.
Gambar 47. Contoh pernyataan UNION ALL beserta hasil menggunakan CMD; karyawan → karyawan2
Gambar 48. Contoh pernyataan UNION ALL beserta hasil menggunakan CMD; karyawan2 → karyawan
Hasil relasi tabel karyawan dengan tabel karyawan2 maupun relasi tabel karyawan2 dengan
tabel karyawan tersebut menjadi satu tabel. Dari eksekusi pernyataan karyawan UNION
ALL karyawan2 maupun karyawan2 UNION ALL karyawan memperoleh 7 data record
dari field nama dan field id_dep antara lain “AGUS, 10”, “BUDI, 16”, “CITRA, 12”,
“DANI, 17”, “DANI, 17”, “ANISA, 18”, “BAGUS, 12”. Bedanya hanya urutan record
saja, namun isi record atau data nya sama saja.
Perbedaan antara UNION dan UNION ALL adalah data nama DANI dengan id_dep 17
pada pernyataan UNION hanya tampil satu saja, padahal data nama DANI dengan id_dep
17 terdapat pada tabel karyawan maupun tabel karyawan2. Hal tersebut dapat terjadi,
karena default statement UNION adalah menghilangkan duplikat. Sehingga diperoleh data
tanpa duplikasi. Sedangkan pada UNION ALL data nama DANI dengan id_dep 17
ditampilkan semua atau terdapat dua data. Karena pada tabel karyawan dan tabel
karyawan2 sama-sama menyimpan data nama DANI dengan id_dep 17.
4. Tugas Praktikum
Pada praktikum kali ini praktikkan mengekspor data pada tugas praktikum minggu-minggu
sebelumnya,
kemudian
mengimpor
pada
database
baru
yang
dengan
nama
tugas_praktikum_modul5.
Dalam database tugas_praktikum_modul5 terdapat 3 tabel yaitu tabel tb_mahasiswa,
tb_mata_kuliah, dan tb_ambil_mk2, kemudian menghapus praktikkan menghapus isi yang
ada pada ketiga tabel tersebut, kemudian praktikkan menambahkan data pada tabel-tabel
tersebut sesuai dengan perintah pada modul.
Pada tabel tb_mahasiswa praktikkan menambahkan 7 record seperti pada gambar dibawah
ini :
Gambar 49. INSERT INTO tb_mahasiswa;
Gambar 50. Data berhasil ditambahkan pada tb_mahasiswa;
Untuk melihat data yang telah ditambahkan pada tabel tb_mahasiswa dengan pernyataan
sebagai berikut :
Gambar 51. Melihat data pada tabel tb_mahasiswa;
Kemudian akan menampilkan data dari tabel tb_mahasiswa
Gambar 52. Data pada tabel tb_mahasiswa;
Pada tabel kedua yaitu tabel tb_mata_kuliah praktikkan menambahkan 7 record seperti
pada gambar dibawah ini :
Gambar 53. INSERT INTO tb_mata_kuliah;
Gambar 54. Data berhasil ditambahkan pada tb_mata_kuliah;
Untuk melihat data yang telah ditambahkan pada tabel tb_mahasiswa dengan pernyataan
sebagai berikut :
Gambar 55. Melihat data pada tabel tb_mata_kuliah;
Kemudian akan menampilkan data dari tabel tb_mata_kuliah
Gambar 56. Data pada tabel tb_mata_kuliah;
Pada tabel ketiga yaitu tabel tb_ambil_mk2 praktikkan menambahkan 6 record seperti pada
gambar dibawah ini :
Gambar 57. INSERT INTO tb_ambil_mk2;
Gambar 58. Data berhasil ditambahkan pada tb_ambil_mk2;
Untuk melihat data yang telah ditambahkan pada tabel tb_mahasiswa dengan pernyataan
sebagai berikut :
Gambar 59. Melihat data pada tabel tb_ambil_mk2;
Kemudian akan menampilkan data dari tabel tb_ambil_mk2
Gambar 60. Data pada tabel tb_mata_kuliah;
Setelah data-data yang terdapat pada modul telah ditambahkan pada masing-masing tabel
maka praktikkan akan mencoba mengeksekusi perintah-perintah pada modul.
4.1 Dapatkan banyak mahasiswa yang mengambil matakuliah. Selesaikan dengan
pendekatan join eksplisit dan implisit.
EKSPLISIT atau “eksplisit join notation” menggunakan join keyword untuk menentukan
tabel untuk bergabung, dan ON keyword untuk menentukan predikat untuk bergabung,
seperti dalam contoh pernyataan berikut :
Gambar 61. Seleksi INNER JOIN dengan pendekatan Join Eksplisit dengan AS;
Gambar 62. Hasil seleksi INNER JOIN dengan pendekatan Join Eksplisit dengan AS;
Dalam
pernyataan
dihalaman
sebelumnya
menggunakan
COUNT(DISTINCT
tb_mahasiswa.NIM) untuk menghitung jumlah data NIM mahasiswa tanpa duplikat (data
yang sama dihitung hanya 1), AS Mahasiswa_yang_mengambil_matkul merupakan
perintah yang digunakan untuk menyimpan field sementara seleksi dari data yang dicari.
Jadi field Mahasiswa_yang_mengambil_matkul tersebut tidak tersimpan pada struktur
tabel yang sebenarnya. Kemudian relasi tabel tb_mahasiswa INNER JOIN tb_ambil_mk2
ON tb.mahasiswa.NIM = tb_ambil_mk2.NIM; mengakibatkan hanya NIM yang sama
antara NIM pada tabel tb_mahasiswa dan NIM pada tabel tb_ambil_mk2. Dari pernyataan
tersebut menampilkan hasil adalah 3.
Untuk melihat data nim dan nama mahasiswa yang mengambil matakuliah dapat
menggunakan pernyataan eksplisit join sebagai berikut :
Gambar 63. Penjabaran data dari seleksi INNER JOIN dengan pendekatan Join Eksplisit;
Gambar 64. Hasil dari penjabaran data dari seleksi INNER JOIN dengan pendekatan Join Eksplisit;
Dari hasil pernyataan tersebut membuktikan bahwa pernyataan pada gambar 61 yang
mendapatkan hasil 3 pada field Mahasiswa_yang_mengambil_matkul adalah benar karena
apabila seleksi dengan penjabaran menampilkan 3 record mahasiswa yang mengambil
matakuliah yaitu “101, ARIF”, “102, WATI”, “103, IKA”.
IMPLISIT atau “implicit join notation” hanya berisi daftar tabel untuk bergabung, dalam
klausa FROM dari pernyataan SELECT, menggunakan koma untuk memisahkannya,
klausa WHERE tambahan mungkin berlaku sebagai filter-predikat.
Gambar 65. Seleksi INNER JOIN dengan pendekatan Join Implisit dengan AS;
Gambar 66. Hasil dari seleksi INNER JOIN dengan pendekatan Join Implisit dengan AS;
Dari pernyataan implisit join tersebut menampilkan hasil yang sama dengan pernyataan
eksplisit join yaitu adalah 3. Perbedaan hanya cara penulisannya saja, apabila eksplisit
menggunakan ON sedangkan implisit menggunakan klausa WHERE.
Untuk melihat data nim dan nama mahasiswa yang mengambil matakuliah juga dapat
menggunakan pernyataan implisit join sebagai berikut :
Gambar 67. Penjabaran data dari seleksi INNER JOIN dengan pendekatan Join Implisit;
Gambar 68. Hasil dari penjabaran data dari seleksi INNER JOIN dengan pendekatan Join Implisit;
Hasil dari implisit join yang menyertakan kriteria NIM dan nama sama dengan hasil dari
eksplisit join, perbedaan juga hanya terletak pada penulisannya saja.
4.2 Kelompokkan data mahasiswa yang tidak mengambil matakuliah berdasarkan
jenis kelaminnya, kemudian hitung banyaknya.
Gambar 69. Seleksi LEFT OUTER JOIN;
Pada persoalan 4.2 menggunakan left outer join, yang diseleksi adalah field Jenis_kelamin,
COUNT(*) perhitungan dari seleksi data mahasiswa kemudian disimpan pada field
sementara sebagai Jumlah, sedangkan relasi tabel tb_mahasiswa LEFT OUTER JOIN
tb_ambil_mk_2 ON tb.mahasiswa.NIM = tb_ambil_mk2.NIM; mengakibatkan hanya NIM
yang sama antara NIM pada tabel tb_mahasiswa dan NIM pada tabel tb_ambil_mk2,
kemudian klausa WHERE dengan ketentuan kode_mk is NULL karena data yang dicari
adalah mahasiswa yang tidak mengambil matakuliah, GROUP BY Jenis_kelamin adalah
mengelompokkan seleksi data tersebut berdasarkan jenis kelamin.
Gambar 70. Hasil dari Seleksi LEFT OUTER JOIN;
Dari hasil pernyataan pada gambar 69 menampilkan field Jenis_kelamin dan Jumlah dengan
record “L, 3” dan “P, 1”, karena mahasiswa yang tidak mengambil matakuliah adalah
BUDI, TONO, IWAN yang berjenis kelamin L sehingga menampilkan hasil 3, dan SARI
yang berjenis kelamin P sehingga menampilkan hasil 1.
4.3 Dapatkan nim dan nama mahasiswa yang mengambil matakuliah beserta
kode_mk dan nama_mk yang diambilnya. Selesaikan dengan pendekatan join
eksplisit dan implisit.
EKSPLISIT
Gambar 71. Seleksi INNER JOIN dengan pendekatan Join Eksplisit;
Pada persoalan 4.3 menggunakan inner join dan memanfaatkan fitur derived table, yang
diseleksi adalah field a.NIM, m.Nama, a.kode_mk, k.nama_mk dari relasi tabel
tb_mahasiswa yang dinotasikan dengan huruf m, tb_ambil_mk_2 yang dinotasikan dengan
huruf a, dan tb_mata_kuliah yang dinotasikan dengan huruf k ON m.NIM = a.NIM
mengakibatkan hanya NIM yang sama antara NIM pada tabel tb_mahasiswa dan NIM pada
tabel tb_ambil_mk2, kemudian AND a.kode_mk = k.kode_mk mengakibatkan hanya
kode_mk yang sama antara kode_mk pada tabel tb_ambil_mk2 dan kode_mk pada tabel
tb_mata_kuliah karena yang diseleksi adalah mahasiswa yang mengambil matakuliah
beserta beserta kode_mk dan nama_mk.
Gambar 72. Hasil dari seleksi INNER JOIN dengan pendekatan Join Eksplisit;
Dari hasil pernyataan pada gambar 71 menampilkan field NIM, Nama, kode_mk, dan
nama_mk dengan 4 record yaitu “101, ARIF, PTI447, PRAKTIKUM BASIS DATA”,
“103, WATI, TIK333, SISTEM OPERASI”, “104, IKA, PTI333, BASIS DATA
TERDISTRIBUSI”, dan “103, WATI, TIK333, SISTEM OPERASI”.
IMPLISIT
Gambar 73. Seleksi INNER JOIN dengan pendekatan Join Implisit;
Gambar 74. Hasil dari seleksi INNER JOIN dengan pendekatan Join Implisit;
Dari pernyataan implisit join tersebut menampilkan hasil yang sama dengan pernyataan
eksplisit join yaitu “101, ARIF, PTI447, PRAKTIKUM BASIS DATA”, “103, WATI,
TIK333, SISTEM OPERASI”, “104, IKA, PTI333, BASIS DATA TERDISTRIBUSI”, dan
“103, WATI, TIK333, SISTEM OPERASI”. Perbedaan hanya cara penulisannya saja,
apabila eksplisit menggunakan ON sedangkan implisit menggunakan klausa WHERE.
4.4 Dapatkan nim, nama, dan total sks yang diambil oleh mahasiswa, Dimana total
sksnya lebih dari 4 dan kurang dari 10.
Gambar 75. Seleksi INNER JOIN dengan pendekatan Join Implisit;
Pada persoalan 4.4 menggunakan inner join implisit dengan memanfaatkan fitur derived
table, yang diseleksi adalah field m.NIM, m.Nama, SUM(k.sks) AS Total_sks, Total_sks
sebagai field sementara dari hasil SUM sks tabel tb_mata_kuliah. Relasi inner join
tb_ambil_mk_2 yang dinotasikan dengan huruf a, tabel tb_mahasiswa yang dinotasikan
dengan huruf m, dan tb_mata_kuliah yang dinotasikan dengan huruf k kemudian
menggunakan klausa WHERE m.NIM = a.NIM mengakibatkan hanya NIM yang sama
antara NIM pada tabel tb_mahasiswa dan NIM pada tabel tb_ambil_mk2 AND a.kode_mk
= k.kode_mk mengakibatkan hanya kode_mk yang sama antara kode_mk pada tabel
tb_ambil_mk2 dan kode_mk pada tabel tb_mata_kuliah, lalu GROUP BY m.NIM berarti
mengelompokkan berdasarkan NIM pada tabel tb_mahasiswa dan HAVING SUM(sks)>4
AND SUM(sks)
PRAKTIKUM BASIS DATA
Disusun untuk Memenuhi Matakuliah Praktikum Basis Data
Dibimbing oleh Triyanna Widyaningtyas, S.T., M.T.
Oleh:
Dwitha Fajri Ramadhani
160533611410
Ika Damayanti
160533611505
S1 PTI’16 OFF B
UNIVERSITAS NEGERI MALANG
FAKULTAS TEKNIK
JURUSAN TEKNIK ELEKTRO
PRODI S1 PENDIDIKAN TEKNIK INFORMATIKA
Maret 2017
1. Judul
RELASI & JOIN
2. Dasar Teori
2.1 Relationship
Relationship adalah suatu hubungan antara beberapa entitas. Konsep ini sangat penting
sekali di dalam basis data, dimana memungkinkan entitas – entitas untuk saling
berhubungan satu sama lain.
Di dalam sebuah relationship, primary key memilik peran penting dalm mengaitkan
entitas. Saelain itu, primary key juga digunakan untuk mendefinisikan batasan
keterhubungan.
Jenis-jenis relasi entitas :
2.1.1
Satu ke satu (one to one)
Setiap data pada entitas A berhubungan dengan maksimal satu data pada entitas
B, begitu pula sebaliknya.
2.1.2
Satu ke banyak (one to many) atau banyak ke satu (many to one)
Setiap data pada entitas A bisa berhubungan dengan banyak data pada entitas B,
tetapi data pada entitas B berhubungan maksimal hanya dengan sebuah data di
A.
2.1.3
Banyak ke banyak (many to many)
Setiap data pada entitas A bisa berhubungan dengan banyak data pada entitas B,
demikian pula sebaliknya.
2.2 Operator dasar pada MySQL
2.2.1
OPERATOR AS
AS biasa digunakan untuk menampilkan label kolom dengan nama lain sehingga
yang akan muncul dalam hasil query bukan nama asli kolom, tetapi nama yang
mungkin lebih sesuai dan mudah dimengerti. AS digunakan setelah nama kolom
yang akan diganti yang kemudian diikuti dengan nama penggantinya. Sintaks:
SELECT [NAMA KOLOM] AS [NAMA KOLOM PENGGANTI] FROM
[NAMA TABEL];
2.2.2
OPERATOR AND
Kegunaan operator ini adalah untuk melakukan pencarian dan menampilkan
data yang lebih akurat. Dengan operator AND akan ditampilkan data yang hanya
memenuhi kedua syarat yang ditentukan. Sintaks : SELECT * FROM [NAMA
TABEL] WHERE [NAMA KOLOM] = ‘[PENCARIAN 1]’ AND [NAMA
KOLOM] = ‘[PENCARIAN 2]’;
2.2.3
OPERATOR OR
Fungsi operator OR mirip dengan operator AND, namun jika operator AND
menampilkan data yang harus memenuhi kedua syarat yang dibutuhkan,
operator OR akan menampilkan data yang hanya memenuhi salah satu dari
kedua syarat yang ditentukan. Sintaks : SELECT * FROM [NAMA TABEL]
WHERE [NAMA KOLOM] = ‘[PENCARIAN 1]’ OR [NAMA KOLOM] =
‘[PENCARIAN 2]’;
2.2.4
OPERATOR BETWEEN
BETWEEN digunakan untuk menentukan lebar nilai dari nilai terendah dan nilai
tertinggi. Sintaks : SELECT * FROM [NAMA TABEL] WHERE [NAMA
KOLOM] BETWEEN ‘[NILAI AWAL]’ AND ‘[NILAI AKHIR]’;
2.2.5
OPERATOR LIKE
LIKE digunakan ketika kita ingin mencari sebuah data yang hanya diwakili oleh
salah satu atau lebih hurufnya saja. Misalkan kita ingin mencari nama yang huruf
awalnya R, maka kita harus menggunakan LIKE. Sintaks : SELECT * FROM
[NAMA TABEL] WHERE [NAMA KOLOM] LIKE ‘[OPERATOR]’;
2.2.6
OPERATOR DISTINCT
Digunakan untuk memilih data-data yang berbeda (menghilangkan duplikasi)
dari sebuah tabel database. Sintaks : SELECT DISTINCT [NAMA KOLOM]
FROM [NAMA TABEL];
2.2.7
OPERATOR LIMIT
Kegunaan operator LIMIT terletak pada pembatasan atas jumlah data yang
boleh ditampilkan, Sintaks : SELECT * FROM [NAMA TABEL] ORDER BY
[NAMA
KOLOM]
DITAMPILKAN];
2.2.8
OPERATOR OFFSET
LIMIT
[JUMLAH
DATA
YANG
INGIN
Menghilangkan jumlah data yang akan ditampilkan, Sintaks : SELECT * FROM
[NAMA TABEL] ORDER BY [NAMA KOLOM] OFFSET [JUMLAH DATA
YANG INGIN DIHILANGKAN];
2.2.9
UNION, EXCEPT dan INTERSECT
Perintah UNION dalam MySQL di gunakan untuk menggabungkan atau
mengkombinasikan isi dari dua tabel menjadi satu. Sama seperti artinya
INTERSECT ini di gunakan untuk mencari irisan pada dua atau lebih tabel.
Sintaks : SELECT * FROM [NAMA TABEL1] INTERSECT SELECT *
FROM [NAMA TABEL2]
Kemudian perintah yang terakhir yaitu EXCEPT, EXCEPT ini digunakan untuk
memunculkan isi tabel yang berada di luar irisan tabel. Sintaks : SELECT *
FROM [NAMA TABEL1] EXCEPT SELECT * FROM [NAMA TABEL2]
2.3 Join
Join merupakan salah satu konstruksi dasar dari SQL dan basis data. Join dapat
didefinisikan sebagai kombinasi record dari dua atau lebih tabel di dalam basis sebagai
joined table.
Join dapat diklasifikasikan ke dalam dua jenis, yaitu inner join dan outer join.
2.3.1
Inner Join
Inner join pada dasarnya adalah menentukan persimpangan (intersection) antara
dua buah tabel.
Sintaks inner join diperlihatkan sebagai berikut :
Inner join terdapat tabel A dan B, maka hasil inner join dapat diperhatikan
sebagai bidang dalam diagram Venn seperti Gambat 1.
2.3.2
Outer Join
Outer join dibagi ke dalam tiga jenis, yaitu left outer join, right outer join, dan
full outer join.
2.3.2.1.1
Left Outer Join
Left outer join (atau left join) mengembaliakan semua nilai dari tabel kiri
tditambah dengan nilai dari tabel kanan yang sesuai (atau NULL jika tidak ada
nilai yang sesuai).
Sintaks Left ourer join diperlihatkan sebagai berikut :
Left
outer join antara tabel A dan B dapat diilustrasikan dalam diagram Venn seperti
Gambar 2.
2.3.2.1.2
Right Outer Join
Right outer join (atau right join) pada dasarnya sama seperti left join, namun
dalam bentuk terbalik kanan dan kiri.
Sintaks Right outer join diperguakan sebagai berikut:
Right outer join antara tabel A dan B dapat diilustrasikan dalam diagram Venn
seperti Gambar 3.
2.3.2.1.3
Full Outer Join
Full outer join (atau full join) pada hakekatnya merupakan kombinasi dari left
dan right join.
Sintaks full outer join dipelihatkan sebagai berikut :
Bentuk visual dari full outer join dapat diperlihatkan menggunakan diagram
Venn seperti Gambar 4.
2.3.3
Cross Join
Menggabungkan/output isi kedua table secara permutasi (Cartesian Products)
Dengan kata lain, cross join akan menghubungkan tiap-tiap kolom table A
dengan masing-masing kolom di table B tanpa memperhatikan PK.
2.3.4
Natural Join
Menggabungkan/output isi kedua table berdasarkan nama kolom yang sama
tanpa suatu kondisi(qualifier). Menurut para pengamat, natural join sangat
disarankan tidak digunakan.
Perlu juga diperhatikan, join diimplimentasikan dalam bentuk bersarang (nested
join). Jadi, di dalam sebuah operasi join bisa terdapat operasi join lainnya.
2.4 Union
MySQL Union adalah statemen yang mengkombinasikan dua buah atau lebih
resulset dari beberapa table dengan statemen SELECT sehingga menjadi satu
buah result.
Union statemen memilki beberapa ketentuan sehingga berikut :
a. Jumlah kolom / field dari setiap statemen SELECT harus sama.
b. Tipe data kolom/field dari setiap statemen SELECT harus kompatibel.
Secara default Statemen UNION akan menghapus semua record duplikasi dari
resultset. Apabila anda ingin record duplikasi tetap di tampilkan maka pada
resultset tuliskan secara explisit UNION ALL. Perbedaan Union dan Union All
dapat dijelaskan dalam diagram Venn 5 dan 6.
Fungsi Union sendiri dapat dijalankan dengan sintaks sebagai berikut :
3. Latihan
Sebelum melakukan tugas latihan, praktikan membuka XAMPP CONTROL PANEL dan
memilih Start pada Module MySQL dan Apache kemudian klik Admin atau mengakses
localhost/phpmyadmin pada browser.
Gambar 1. Start MySQL dan Apache
Maka akan tampil seperti pada gambar dibawah ini :
Gambar 2. Tampilan phpmyadmin
3.1 Relationship
Untuk memulai latihan kali ini praktikkan menciptakan objek query, pada halaman awal
phpMyAdmin praktikan memilih menu SQL, setelah itu muncul halaman editor SQL,
dalam editor tersebut tempat untuk praktikkan mengetikkan pernyataan SQL, untuk
membuat database maka diketikkan pernyataan CREATE DATABASE ‘nama_database’;
nama_database bisa disesuaikan dengan keinginan pengguna, dalam praktikum ini
praktikkan mengetikkan CREATE DATABASE MODUL5_005; sehingga nama database
yang dibuat adalah MODUL5_005.
Gambar 3. CREATE DATABASE MODUL5_005; pada SQL
Untuk mengeksekusi pernyataan SQL tersebut dengan klik tombol Go. Setelah itu database
MODUL5_005 akan berhasil dibuat.
Gambar 4. Database modul5_005 berhasil dibuat
Setelah menciptakan sebuah database, praktikkan menciptakan dua buah tabel secara
bergantian dengan klik SQL pada awal tampilan phpMyAdmin, kemudian mengetikkan
pernyataan-pernyataan yang dibutuhkan pada praktikum kali ini. Struktur untuk pernyataan
pembuatan tabel adalah sebagai berikut :
CREATE TABLE ‘nama_tabel’ (
‘nama_field1’ TIPEDATA(length),
‘nama_field2’ TIPEDATA(length),
PRIMARY KEY(nama_field) );
Dalam praktikum kali ini praktikkan membuat tabel yang bernama karyawan, dengan
memiliki 2 field yaitu Nama yang bertipe data VARCHAR dengan length 30 dan di set NOT
NULL. Field kedua yaitu id_dep yang bertipe data INT yang memilik length 5 dan di set
NOT NULL, praktikkan memilih tipe data VARCHAR dan INT karena tipe data tersebut
lebih general sebenarnya penggunaan tipe data TEXT dan NUMBER juga diterima, namun
kurang standar. Primary key tidak di set karena sesuai dengan pernyataan pada modul.
ENGINE = MyISAM merupakan storage atau penyimpanan yang menangani tabel yang
non-transactional. Tipe tabel ini menyediakan penyimpanan dan retrieval berkecepatan
tinggi, dan juga kemampuan pencarian fulltext. MyISAM didukung di semua konfigurasi
MySQL dan merupakan engine penyimpanan default kecuali apabila pengguna telah
melakukan konfigurasi MySQL untuk menggunakan tipe lain sebagai defaultnya.
Kemudian eksekusi pernyataan penciptaan tabel dengan klik Go.
Gambar 5. CREATE TABLE karyawan; pada SQL
Gambar 6. Tabel karyawan telah berhasil dibuat
Untuk mengecek struktur dari tabel karyawan dengan klik karyawan pada modul5_005
kemudan pilih Structure.
Gambar 7. Struktur tabel karyawan pada database modul5_005
Tabel yang kedua bernama departemen, dengan memiliki 2 field yaitu id_dep yang bertipe
data INT dengan length 5 dan di set NOT NULL. Field kedua yaitu nama_dep yang bertipe
data VARCHAR yang memilik length 30 dan di set NOT NULL. Field id_dep di set sebagai
primary key karena sesuai dengan pernyataan pada modul dan id_dep memiliki nilai yang
bersifat unik atau antara data satu dengan data yang lainnya berbeda. Sama seperti tabel
karyawan Engine Storage atau penyimpanan dari tabel departemen di set MyISAM yang
Kemudian eksekusi pernyataan penciptaan tabel dengan klik Go.
Gambar 8. CREATE TABLE departemenn; pada SQL
Gambar 9. Tabel departemen telah berhasil dibuat
Untuk mengecek struktur dari tabel departemen dengan klik departemen pada modul5_005
kemudan pilih Structure.
Gambar 10. Struktur tabel karyawan pada database modul5_005
Setelah kedua tabel berhasil dibuat kemudian praktikkan menambahkan data pada kedua
tabel tersebut melalui pernyataan SQL. Struktur untuk pernyataan menambahkan data pada
tabel adalah sebagai berikut :
INSERT INTO ‘nama_tabel’
VALUES
(‘data_field1, ‘data_field2’, ‘data_fiedlke-n’),
(‘data_field1, ‘data_field2’, ‘data_fiedlke-n’);
Praktikkan menambahkan data pada tabel karyawan sesuai dengan yang diperintahkan pada
modul, dengan data seperti pada gambar dibawah ini.
Gambar 11. INSERT INTO karyawan;
Gambar 12. Data telah ditambahkan pada tabel karyawan;
Untuk melihat data yang telah ditambahkan pada tabel karyawan dengan pernyataan sebagai
berikut :
Gambar 13. Melihat data pada tabel karyawan;
Kemudian akan menampilkan data dari tabel karyawan
Gambar 14. Data pada tabel karyawan;
Praktikkan menambahkan data pada tabel departemen sesuai dengan yang diperintahkan
pada modul, dengan data seperti pada gambar dibawah ini.
Gambar 15. INSERT INTO departemen;
Gambar 16. Data telah ditambahkan pada tabel departemen;
Untuk melihat data yang telah ditambahkan pada tabel karyawan dengan pernyataan sebagai
berikut :
Gambar 17. Melihat data pada tabel departemen;
Kemudian akan menampilkan data dari tabel departemen
Gambar 18. Data pada tabel departemen;
3.2 Inner Join
Pernyataan inner join akan mengembalikan data di tabel A dan B yang sesuai. Sebagai
contoh, untuk mendapatkan data karyawan yang memiliki departemen dengan
mengeksekusi pernyataan atau perintah SQL berikut :
Gambar 19. SELECT * FROM karyawan INNER JOIN departemen;
Maka data yang diperoleh dari eksekusi pernyataan SQL diatas adalah sebagai berikut :
Gambar 20. Hasil dari SELECT * FROM karyawan INNER JOIN departemen;
Selain menggunakan pernyataan SQL diatas, data juga dapat diperoleh dengan
menggunakan inner join bentuk implisitnya, seperti pada gambar dibawah ini.
Gambar 21. Inner join bentuk implisit;
Gambar 22. Hasil dari inner join bentuk implisit;
Pada gambar 19 dan 21 pernyataan SQL diatas memiliki hasil yang sama. Karena yang
diseleksi adalah data karyawan yang memiliki departemen maka pernyataan keduanya
menghasilkan nama AGUS dengan id_dep 10 nama_dep PENELITIAN dan CITRA dengan
id_dep 12 nama_dep SDM. Perbedaan antara perintah diatas hanya pada penulisan sintaks
saja yaitu yang kedua berbentuk implisit.
Untuk pengambilan data juga bisa menspesifikasikan field terkait. Sebagai contoh, untuk
mengambil nama karyawan dan nama departemen yang ditempatinya saja, eksekusi SQL :
Gambar 23. Pengambilan data dengan spesifikasi field terkait;
Gambar 24. Hasil dari pengambilan data dengan spesifikasi field terkait;
Jika pengguna ingin menampilkan field tertentu saja, maka nama field tersebut harus
disebutkan secara eksplisit beserta nama tabel tempat field.
Untuk efisiensi penulisan pernyataan SQL, praktikkan memanfaatkan fitur derived table,
penggunaan derived table akan semakin efisien apabila pengguna berurusan dengan banyak
field dan banyak tabel, selain itu juga menjadikan pernyataan SQL mudah dipahami.
Pernyataan SQL dengan fitur derived table seperti pernyataan dibawah ini :
Gambar 25. Efisiensi pernyataan SQL dengan memanfaatkan derived table;
Pada pernyataan SQL di atas, tabel karyawan dinotasikan dengan huruf k dan tabel
departemen menggunakan huruf d. Hasil eksekusi perintah SQL tersebut sama dengan hasil
eksekusi perintah SQL sebelumya.
Gambar 26. Hasil dari efisiensi pernyataan SQL dengan memanfaatkan derived table;
Pada gambar 23 dan 25 pernyataan SQL diatas memiliki hasil yang sama. Karena yang
diseleksi adalah nama karyawan dan nama departemen maka pernyataan keduanya
menghasilkan nama AGUS dengan nama_dep PENELITIAN dan CITRA dengan
nama_dep SDM. Pada pernyataan pertama sintaks dengan menambahkan keterangan
“karyawan.nama”
dan
“departemen.nama_dep”,
sedangkan
pernyataan
kedua
menggunakan fitur derived table yang menuliskan pernyataan secara efisien, karyawan
dinotasikan dengan huruf k dan departemen dengan huruf d.
3.3 Outer Join
3.3.1
Left Outer Join
Left outer join mengembalikan semua nilai dari tabel kiri ditambah dengan nilai dari
tabel kanan yang sesuai atau NULL jika tidak ada nilai yang sesuai. Contoh pernyataan
left outer join dalam tabel karyawan dengan departemen adalah sebagai berikut :
Gambar 27. Tabel karyawan left outer join tabel departemen;
Gambar 28. Hasil dari tabel karyawan left outer join tabel departemen;
Pada pernyataan di atas yang yang dijadikan patokan yaitu tabel karyawan, karena tabel
karyawan di left outer join dengan tabel departemen sehingga menghasilkan ada data
yang NULL yang ditampilkan pada gambar diatas. Alasannya karena data BUDI dengan
id_dep 16 dan DANI dengan id_dep 17 pada tabel karyawan, sedangkan data pada tabel
departemen hanya terdapat data id_dep 10, 11, 12, dan 13. Sehingga pada saat tabel
karyawan di left outer join dengan tabel departemen data BUDI dengan id_dep 16 dan
DANI dengan id_dep 17 memiliki NULL value pada field id_dep dan nama_dep pada
tabel departemen.
Left outer join dengan menggunakan klausa WHERE, seperti pada pernyataan SQL
dibawah ini :
Gambar 29. Tabel karyawan left outer join tabel departemen dengan klausa WHERE;
Gambar 30. Hasil dari tabel karyawan left outer join tabel departemen dengan klausa WHERE;
Pada pernyataan di atas yang yang dijadikan patokan yaitu tabel karyawan, karena tabel
karyawan di left outer join dengan tabel departemen, kemudian terdapat penambahan
query WHERE d.id_dep IS NULL mengakibatkan data yang tampil adalah Nama dan
id_dep pada tabel karyawan yang id_dep dan nama_dep pada tabel departemen berisi
NULL. Maka dari itu yang tampil adalah BUDI dengan id_dep 16 dan DANI dengan
id_dep 17 karena BUDI dan DANI tidak memiliki departemen (nama departemennya
tidak tercatat dalam tabel departemen).
3.3.2
Right Outer Join
Right outer join mengembalikan semua nilai dari tabel kanan ditambah dengan nilai dari
tabel kiri yang sesuai atau NULL jika tidak ada nilai yang sesuai. Contoh pernyataan
Right outer join dalam tabel karyawan dengan departemen adalah sebagai berikut :
Gambar 31. Tabel karyawan right outer join tabel departemen;
Gambar 32. Hasil dari tabel karyawan right outer join tabel departemen;
Pada pernyataan di atas yang yang dijadikan patokan yaitu tabel departemen, karena
tabel departemen berada disebelah kanan tabel karyawan, sehingga menghasilkan ada
data yang NULL yang ditampilkan pada gambar diatas. Alasannya karena data id_dep
11 dengan nama_dep PEMASARAN dan id_dep 13 dengan nama_dep KEUANGAN
pada tabel departemen, sedangkan data pada tabel karyawan hanya terdapat data id_dep
10 dengan nama AGUS dan id_dep 12 dengan nama CITRA. Sehingga pada saat kedua
tabel di right outer join data id_dep 11 dengan nama_dep PEMASARAN dan id_dep
13 dengan nama_dep KEUANGAN memiliki NULL value pada field Nama dan id_dep
pada tabel karyawan.
3.3.3
Full Outer Join
Full outer join pada hakikatnya merupakan kombinasi dari left outer join dan right outer
join. Karena pada beberapa DBMS tidak mendukung fungsionalitas full outer join maka
disimulasikan dengan memanfaatkan UNION. Dengan menggabungkan left outer join
dan right outer join seperti pernyataan SQL dibawah ini :
Gambar 33. Tabel karyawan full outer join tabel departemen;
Gambar 34. Hasil dari tabel karyawan full outer join tabel departemen;
Penjelasan dari pernyataan SQL full outer join adalah kombinasi penjelasan dari tugas
latihan 3.3.1 dan 3.3.2, pada keluaran diatas yaitu menampilkan semua data pada tabel
karyawan dan departemen meskipun ada data relasi yang dimana tabel karyawan dan
tabel departemen datanya NULL.
3.3.4
Cross Join
Cross join pada hakikatnya merupakan inner join dimana kondisi join selalu dievaluasi
true. Secara matematis, jika A dan B merupakan dua himpunan, maka cross join-nya
sama dengan X. Contoh pernyataan SQL dari cross join adalah sebagai berikut :
Gambar 35. Tabel karyawan cross join tabel departemen;
atau juga dapat menggunakan pernyataan SQL dalam bentuk implisitnya seperti ini :
Gambar 35. Tabel karyawan cross join tabel departemen secara implisit;
Gambar 36. Hasil dari tabel karyawan cross join tabel departemen (kiri); secara implisit (kanan);
Dari hasil pernyataan cross join diatas seperti perkalian silang yang hasilnya menjadi
sangat banyak seperti tabel diatas, dan juga hasil dari cross join banyak yang tidak
sinkron dengan yang direlasikan.
3.4 Union
Dalam latihan ini praktikkan membuat tabel baru dengan nama tabel karyawan2, yang
memiliki 2 field yaitu Nama yang bertipe data VARCHAR dengan length 30 dan di set NOT
NULL. Field kedua yaitu id_dep yang bertipe data INT yang memilik length 5 dan di set
NOT NULL, praktikkan memilih tipe data VARCHAR dan INT karena tipe data tersebut
lebih general sebenarnya penggunaan tipe data TEXT dan NUMBER juga diterima, namun
kurang standar. Primary key tidak di set karena sesuai dengan pernyataan pada modul.
ENGINE = MyISAM merupakan storage atau penyimpanan yang menangani tabel yang
non-transactional. Tipe tabel ini menyediakan penyimpanan dan retrieval berkecepatan
tinggi, dan juga kemampuan pencarian fulltext. MyISAM didukung di semua konfigurasi
MySQL dan merupakan engine penyimpanan default kecuali apabila pengguna telah
melakukan konfigurasi MySQL untuk menggunakan tipe lain sebagai defaultnya.
Kemudian eksekusi pernyataan penciptaan tabel dengan klik Go.
Gambar 37. CREATE TABLE karyawan2;
Gambar 38. Tabel karyawan2 telah berhasil dibuat
Untuk mengecek struktur dari tabel karyawan2 dengan klik karyawan pada modul5_005
kemudan pilih Structure.
Gambar 39. Struktur tabel karyawan2 pada database modul5_005
Praktikkan menambahkan data pada tabel karyawan2 sesuai dengan yang diperintahkan pada
modul, dengan data seperti pada gambar dibawah ini.
Gambar 39. INSERT INTO karyawan2;
Gambar 40. Data telah ditambahkan pada tabel karyawan2;
Untuk melihat data yang telah ditambahkan pada tabel karyawan2 dengan pernyataan
sebagai berikut :
Gambar 41. Melihat data pada tabel karyawan2;
Kemudian akan menampilkan data dari tabel karyawan2
Gambar 42. Data pada tabel karyawan2;
Setelah tabel telah dibuat maka praktikkan melakukan penggabungan dengan perintah
sebagai berikut :
Gambar 43. Contoh pernyataan UNION;
Gambar 44. Hasil dari pernyataan UNION;
Dari eksekusi pernyataan karyawan UNION karyawan2 memperoleh 6 data record dari
field nama dan field id_dep antara lain “AGUS, 10”, “BUDI, 16”, “CITRA, 12”, “DANI,
17”, “ANISA, 18”, “BAGUS, 12”. Hasil relasi tabel karyawan dengan tabel karyawan2
tersebut menjadi satu tabel, namun data nama DANI dengan id_dep 17, hanya tampil satu
saja, padahal data nama DANI dengan id_dep 17 terdapat pada tabel karyawan maupun
tabel karyawan2. Hal tersebut dapat terjadi, karena default statement UNION adalah
menghilangkan duplikat. Sehingga diperoleh data tanpa duplikasi.
Latihan selanjutnya adalah mengganti pernyataan SQL “UNION” diatas menjadi “UNION
ALL”, dapat diperhatikan pada pernyataan dibawah ini :
(a)
(b)
Gambar 45. Contoh pernyataan UNION ALL;
(a) karyawan UNION ALL karyawan2, (b) karyawan2 UNION ALL karyawan
(a)
(b)
Gambar 46. Contoh pernyataan UNION ALL;
(a) karyawan UNION ALL karyawan2, (b) karyawan2 UNION ALL karyawan
Dalam kedua pernyataan tersebut menghasilkan data yang berbeda, karena pada pernyataan
(a) adalah karyawan UNION ALL karyawan2, sedangkan pada pernyataan (b) adalah
karyawan2 UNION ALL karyawan. Namun tetap saja kedua pernyataan nya tidak
menghasilkan data yang benar. “Karena UNION ALL adalah statemen yang
mengkombinasikan dua buah atau lebih resulset dari beberapa tabel dengan statemen
SELECT sehingga menjadi satu buah result, dengan record duplikasi tetap di tampilkan.”.
Pada XAMPP v3.2.2 tidak support eksekusi UNION ALL, Sehingga untuk percobaan
latihan UNION ALL praktikkan mengeksekusi pernyataan tersebut menggunakan
command prompt.
Gambar 47. Contoh pernyataan UNION ALL beserta hasil menggunakan CMD; karyawan → karyawan2
Gambar 48. Contoh pernyataan UNION ALL beserta hasil menggunakan CMD; karyawan2 → karyawan
Hasil relasi tabel karyawan dengan tabel karyawan2 maupun relasi tabel karyawan2 dengan
tabel karyawan tersebut menjadi satu tabel. Dari eksekusi pernyataan karyawan UNION
ALL karyawan2 maupun karyawan2 UNION ALL karyawan memperoleh 7 data record
dari field nama dan field id_dep antara lain “AGUS, 10”, “BUDI, 16”, “CITRA, 12”,
“DANI, 17”, “DANI, 17”, “ANISA, 18”, “BAGUS, 12”. Bedanya hanya urutan record
saja, namun isi record atau data nya sama saja.
Perbedaan antara UNION dan UNION ALL adalah data nama DANI dengan id_dep 17
pada pernyataan UNION hanya tampil satu saja, padahal data nama DANI dengan id_dep
17 terdapat pada tabel karyawan maupun tabel karyawan2. Hal tersebut dapat terjadi,
karena default statement UNION adalah menghilangkan duplikat. Sehingga diperoleh data
tanpa duplikasi. Sedangkan pada UNION ALL data nama DANI dengan id_dep 17
ditampilkan semua atau terdapat dua data. Karena pada tabel karyawan dan tabel
karyawan2 sama-sama menyimpan data nama DANI dengan id_dep 17.
4. Tugas Praktikum
Pada praktikum kali ini praktikkan mengekspor data pada tugas praktikum minggu-minggu
sebelumnya,
kemudian
mengimpor
pada
database
baru
yang
dengan
nama
tugas_praktikum_modul5.
Dalam database tugas_praktikum_modul5 terdapat 3 tabel yaitu tabel tb_mahasiswa,
tb_mata_kuliah, dan tb_ambil_mk2, kemudian menghapus praktikkan menghapus isi yang
ada pada ketiga tabel tersebut, kemudian praktikkan menambahkan data pada tabel-tabel
tersebut sesuai dengan perintah pada modul.
Pada tabel tb_mahasiswa praktikkan menambahkan 7 record seperti pada gambar dibawah
ini :
Gambar 49. INSERT INTO tb_mahasiswa;
Gambar 50. Data berhasil ditambahkan pada tb_mahasiswa;
Untuk melihat data yang telah ditambahkan pada tabel tb_mahasiswa dengan pernyataan
sebagai berikut :
Gambar 51. Melihat data pada tabel tb_mahasiswa;
Kemudian akan menampilkan data dari tabel tb_mahasiswa
Gambar 52. Data pada tabel tb_mahasiswa;
Pada tabel kedua yaitu tabel tb_mata_kuliah praktikkan menambahkan 7 record seperti
pada gambar dibawah ini :
Gambar 53. INSERT INTO tb_mata_kuliah;
Gambar 54. Data berhasil ditambahkan pada tb_mata_kuliah;
Untuk melihat data yang telah ditambahkan pada tabel tb_mahasiswa dengan pernyataan
sebagai berikut :
Gambar 55. Melihat data pada tabel tb_mata_kuliah;
Kemudian akan menampilkan data dari tabel tb_mata_kuliah
Gambar 56. Data pada tabel tb_mata_kuliah;
Pada tabel ketiga yaitu tabel tb_ambil_mk2 praktikkan menambahkan 6 record seperti pada
gambar dibawah ini :
Gambar 57. INSERT INTO tb_ambil_mk2;
Gambar 58. Data berhasil ditambahkan pada tb_ambil_mk2;
Untuk melihat data yang telah ditambahkan pada tabel tb_mahasiswa dengan pernyataan
sebagai berikut :
Gambar 59. Melihat data pada tabel tb_ambil_mk2;
Kemudian akan menampilkan data dari tabel tb_ambil_mk2
Gambar 60. Data pada tabel tb_mata_kuliah;
Setelah data-data yang terdapat pada modul telah ditambahkan pada masing-masing tabel
maka praktikkan akan mencoba mengeksekusi perintah-perintah pada modul.
4.1 Dapatkan banyak mahasiswa yang mengambil matakuliah. Selesaikan dengan
pendekatan join eksplisit dan implisit.
EKSPLISIT atau “eksplisit join notation” menggunakan join keyword untuk menentukan
tabel untuk bergabung, dan ON keyword untuk menentukan predikat untuk bergabung,
seperti dalam contoh pernyataan berikut :
Gambar 61. Seleksi INNER JOIN dengan pendekatan Join Eksplisit dengan AS;
Gambar 62. Hasil seleksi INNER JOIN dengan pendekatan Join Eksplisit dengan AS;
Dalam
pernyataan
dihalaman
sebelumnya
menggunakan
COUNT(DISTINCT
tb_mahasiswa.NIM) untuk menghitung jumlah data NIM mahasiswa tanpa duplikat (data
yang sama dihitung hanya 1), AS Mahasiswa_yang_mengambil_matkul merupakan
perintah yang digunakan untuk menyimpan field sementara seleksi dari data yang dicari.
Jadi field Mahasiswa_yang_mengambil_matkul tersebut tidak tersimpan pada struktur
tabel yang sebenarnya. Kemudian relasi tabel tb_mahasiswa INNER JOIN tb_ambil_mk2
ON tb.mahasiswa.NIM = tb_ambil_mk2.NIM; mengakibatkan hanya NIM yang sama
antara NIM pada tabel tb_mahasiswa dan NIM pada tabel tb_ambil_mk2. Dari pernyataan
tersebut menampilkan hasil adalah 3.
Untuk melihat data nim dan nama mahasiswa yang mengambil matakuliah dapat
menggunakan pernyataan eksplisit join sebagai berikut :
Gambar 63. Penjabaran data dari seleksi INNER JOIN dengan pendekatan Join Eksplisit;
Gambar 64. Hasil dari penjabaran data dari seleksi INNER JOIN dengan pendekatan Join Eksplisit;
Dari hasil pernyataan tersebut membuktikan bahwa pernyataan pada gambar 61 yang
mendapatkan hasil 3 pada field Mahasiswa_yang_mengambil_matkul adalah benar karena
apabila seleksi dengan penjabaran menampilkan 3 record mahasiswa yang mengambil
matakuliah yaitu “101, ARIF”, “102, WATI”, “103, IKA”.
IMPLISIT atau “implicit join notation” hanya berisi daftar tabel untuk bergabung, dalam
klausa FROM dari pernyataan SELECT, menggunakan koma untuk memisahkannya,
klausa WHERE tambahan mungkin berlaku sebagai filter-predikat.
Gambar 65. Seleksi INNER JOIN dengan pendekatan Join Implisit dengan AS;
Gambar 66. Hasil dari seleksi INNER JOIN dengan pendekatan Join Implisit dengan AS;
Dari pernyataan implisit join tersebut menampilkan hasil yang sama dengan pernyataan
eksplisit join yaitu adalah 3. Perbedaan hanya cara penulisannya saja, apabila eksplisit
menggunakan ON sedangkan implisit menggunakan klausa WHERE.
Untuk melihat data nim dan nama mahasiswa yang mengambil matakuliah juga dapat
menggunakan pernyataan implisit join sebagai berikut :
Gambar 67. Penjabaran data dari seleksi INNER JOIN dengan pendekatan Join Implisit;
Gambar 68. Hasil dari penjabaran data dari seleksi INNER JOIN dengan pendekatan Join Implisit;
Hasil dari implisit join yang menyertakan kriteria NIM dan nama sama dengan hasil dari
eksplisit join, perbedaan juga hanya terletak pada penulisannya saja.
4.2 Kelompokkan data mahasiswa yang tidak mengambil matakuliah berdasarkan
jenis kelaminnya, kemudian hitung banyaknya.
Gambar 69. Seleksi LEFT OUTER JOIN;
Pada persoalan 4.2 menggunakan left outer join, yang diseleksi adalah field Jenis_kelamin,
COUNT(*) perhitungan dari seleksi data mahasiswa kemudian disimpan pada field
sementara sebagai Jumlah, sedangkan relasi tabel tb_mahasiswa LEFT OUTER JOIN
tb_ambil_mk_2 ON tb.mahasiswa.NIM = tb_ambil_mk2.NIM; mengakibatkan hanya NIM
yang sama antara NIM pada tabel tb_mahasiswa dan NIM pada tabel tb_ambil_mk2,
kemudian klausa WHERE dengan ketentuan kode_mk is NULL karena data yang dicari
adalah mahasiswa yang tidak mengambil matakuliah, GROUP BY Jenis_kelamin adalah
mengelompokkan seleksi data tersebut berdasarkan jenis kelamin.
Gambar 70. Hasil dari Seleksi LEFT OUTER JOIN;
Dari hasil pernyataan pada gambar 69 menampilkan field Jenis_kelamin dan Jumlah dengan
record “L, 3” dan “P, 1”, karena mahasiswa yang tidak mengambil matakuliah adalah
BUDI, TONO, IWAN yang berjenis kelamin L sehingga menampilkan hasil 3, dan SARI
yang berjenis kelamin P sehingga menampilkan hasil 1.
4.3 Dapatkan nim dan nama mahasiswa yang mengambil matakuliah beserta
kode_mk dan nama_mk yang diambilnya. Selesaikan dengan pendekatan join
eksplisit dan implisit.
EKSPLISIT
Gambar 71. Seleksi INNER JOIN dengan pendekatan Join Eksplisit;
Pada persoalan 4.3 menggunakan inner join dan memanfaatkan fitur derived table, yang
diseleksi adalah field a.NIM, m.Nama, a.kode_mk, k.nama_mk dari relasi tabel
tb_mahasiswa yang dinotasikan dengan huruf m, tb_ambil_mk_2 yang dinotasikan dengan
huruf a, dan tb_mata_kuliah yang dinotasikan dengan huruf k ON m.NIM = a.NIM
mengakibatkan hanya NIM yang sama antara NIM pada tabel tb_mahasiswa dan NIM pada
tabel tb_ambil_mk2, kemudian AND a.kode_mk = k.kode_mk mengakibatkan hanya
kode_mk yang sama antara kode_mk pada tabel tb_ambil_mk2 dan kode_mk pada tabel
tb_mata_kuliah karena yang diseleksi adalah mahasiswa yang mengambil matakuliah
beserta beserta kode_mk dan nama_mk.
Gambar 72. Hasil dari seleksi INNER JOIN dengan pendekatan Join Eksplisit;
Dari hasil pernyataan pada gambar 71 menampilkan field NIM, Nama, kode_mk, dan
nama_mk dengan 4 record yaitu “101, ARIF, PTI447, PRAKTIKUM BASIS DATA”,
“103, WATI, TIK333, SISTEM OPERASI”, “104, IKA, PTI333, BASIS DATA
TERDISTRIBUSI”, dan “103, WATI, TIK333, SISTEM OPERASI”.
IMPLISIT
Gambar 73. Seleksi INNER JOIN dengan pendekatan Join Implisit;
Gambar 74. Hasil dari seleksi INNER JOIN dengan pendekatan Join Implisit;
Dari pernyataan implisit join tersebut menampilkan hasil yang sama dengan pernyataan
eksplisit join yaitu “101, ARIF, PTI447, PRAKTIKUM BASIS DATA”, “103, WATI,
TIK333, SISTEM OPERASI”, “104, IKA, PTI333, BASIS DATA TERDISTRIBUSI”, dan
“103, WATI, TIK333, SISTEM OPERASI”. Perbedaan hanya cara penulisannya saja,
apabila eksplisit menggunakan ON sedangkan implisit menggunakan klausa WHERE.
4.4 Dapatkan nim, nama, dan total sks yang diambil oleh mahasiswa, Dimana total
sksnya lebih dari 4 dan kurang dari 10.
Gambar 75. Seleksi INNER JOIN dengan pendekatan Join Implisit;
Pada persoalan 4.4 menggunakan inner join implisit dengan memanfaatkan fitur derived
table, yang diseleksi adalah field m.NIM, m.Nama, SUM(k.sks) AS Total_sks, Total_sks
sebagai field sementara dari hasil SUM sks tabel tb_mata_kuliah. Relasi inner join
tb_ambil_mk_2 yang dinotasikan dengan huruf a, tabel tb_mahasiswa yang dinotasikan
dengan huruf m, dan tb_mata_kuliah yang dinotasikan dengan huruf k kemudian
menggunakan klausa WHERE m.NIM = a.NIM mengakibatkan hanya NIM yang sama
antara NIM pada tabel tb_mahasiswa dan NIM pada tabel tb_ambil_mk2 AND a.kode_mk
= k.kode_mk mengakibatkan hanya kode_mk yang sama antara kode_mk pada tabel
tb_ambil_mk2 dan kode_mk pada tabel tb_mata_kuliah, lalu GROUP BY m.NIM berarti
mengelompokkan berdasarkan NIM pada tabel tb_mahasiswa dan HAVING SUM(sks)>4
AND SUM(sks)