0% menganggap dokumen ini bermanfaat (0 suara)
257 tayangan17 halaman

Jobsheet SELECT Multi-Tabel

Jobsheet-13 membahas penggunaan perintah SELECT pada lebih dari satu tabel database untuk menggabungkan dan menyaring data, termasuk INNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN, dan filter data menggunakan klausa WHERE."

Diunggah oleh

Nurul Huda
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
257 tayangan17 halaman

Jobsheet SELECT Multi-Tabel

Jobsheet-13 membahas penggunaan perintah SELECT pada lebih dari satu tabel database untuk menggabungkan dan menyaring data, termasuk INNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN, dan filter data menggunakan klausa WHERE."

Diunggah oleh

Nurul Huda
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 17

Jurusan Teknologi Informasi Politeknik Negeri Malang

Jobsheet-13: SELECT Multi-Tabel


Mata Kuliah Basis Data
Pengampu: Tim Ajar Basis Data
Mei 2021

Topik

SELECT pada lebih dari satu tabel

Tujuan

Mahasiswa diharapkan memahami dan mampu menggunakan statement:


1. SELECT - INNER JOIN.
2. SELECT - LEFT OUTER JOIN.
3. SELECT - RIGHT OUTER JOIN.
4. SELECT - CROSS JOIN
5. Implicit JOIN

Pendahuluan

Relationship adalah suatu hubungan antara beberapa entitas. Konsep ini sangat penting sekali di dalam basis
data, di mana memungkinkan entitas-entitas untuk saling berhubungan satu sama lain. Di dalam sebuah
relationship, primary key memiliki peran penting untuk mengaitkan entitas. Selain itu, primary key juga
digunakan untuk mendefinisikan batasan keterhubungan.

JOIN merupakan salah satu konstruksi dasar dari SQL dan basis data. Join dapat didefinisikansebagai
kombinasi record dari dua atau lebih tabel di dalam basis data relasional dan menghasilkan sebuah tabel
(temporary) baru yang disebut sebagai joined table. Join dapat diklasifikasikan ke dalam dua jenis: INNER
dan OUTER.

1. INNER JOIN
Inner join pada dasarnya adalah menemukan persimpangan (intersection) antara dua buah tabel.
Sintaks inner join diperlihatkan sebagai berikut:

Cara 1
SELECT A1, A2, ..., An
FROM r1
INNER JOIN r2
ON r1.join_key = r2.join_key

Inner join juga dapat direpresentasikan dalam bentuk implisit.

Cara 2
SELECT A1, A2, ..., An

1
FROM r1, r2
WHERE r1.key = r2.key
Misalkan terdapat tabel A dan B, maka hasil inner join dapat diperlihatkan—sebagai bidang terarsir—
dalam diagram Venn seperti Gambar 1.

Gambar 1. Representasi INNER JOIN

2. OUTER JOIN
LEFT OUTER JOIN
Left outer join (atau left join) mengembalikan semua nilai dari tabel kiri ditambah dengan nilai dari
tabel kanan yang sesuai (atau NULL jika tidak ada nilai yang sesuai).

Syntax
SELECT A1, A2, ..., An
FROM r1
LEFT OUTER JOIN r2
ON r1.join_key = r2.join_key

Left outer join antara tabel A dan B dapat diilustrasikan dalam diagram Venn seperti Gambar 2.

Gambar 2. Representasi LEFT OUTER JOIN

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 diperlihatkan sebagai berikut:

Syntax
SELECT A1, A2, ..., An
FROM r1
RIGHT OUTER JOIN r2
ON r1.join_key = r2.join_key

2
Right outer join antara tabel A dan B dapat diilustrasikan dalam diagram Venn seperti Gambar 3.

Gambar 3. Representasi RIGHT OUTER JOIN

FULL OUTER JOIN


Full outer join (atau full join) pada hakekatnya merupakan kombinasi dari left dan right join. Sintaks
full outer join diperlihatkan sebagai berikut:

Syntax
SELECT A1, A2, ..., An
FROM r1
FULL OUTER JOIN r2
ON r1.join_key = r2.join_key

Bentuk visual dari full outer join dapat diperlihatkan menggunakan diagram Venn seperti Gambar 4.

Gambar 4. Representasi FULL OUTER JOIN

Selain empat jenis join yang utama di atas, masih ada beberapa variasi join lainnya, seperti CROSS JOIN
(cartesian product), NATURAL JOIN, dan sebagainya. Perlu juga diperhatikan, join bisa diimplementasikan
dalam bentuk bersarang (nested join). Jadi, di dalam sebuah operasi join bisa terdapat operasi join lainnya.

3
Praktikum – Bagian 1: Menyiapkan Database untuk Percobaan

Langkah Keterangan
Bersama jobsheet ini disertakan sebuah file bernama percobaan_join.sql, eksekusilah file
tersebut pada server MySQL Anda dengan cara apapun yang Anda bisa.
1
Pada contoh di bawah ini, SQL dieksekusi dengan menggunakan perintah SOURCE melalui
MySQL Shell. Anda juga dapat mengimpor SQL tersebut melalui PHPMyAdmin atau MySQL
Workbench, atau tools yang lain yang Anda sukai.

4
Jika Anda telah berhasil mengimpor/mengeksekusi/menjalankan file percobaan_join.sql
2
tersebut, maka di server MySQL Anda akan dibuatkan database dengan struktur seperti berikut.

Pastikan pada database Anda terdapat tabel-tabel seperti di bawah ini dengan menjalankan
3
SQL dibawah. Jika tabel-tabelnya sudah sesuai, lanjutkan ke Praktikum – Bagian 2.

5
Praktikum – Bagian 2: INNER JOIN

Langkah Keterangan
Apabila kita ingin menampilkan data yang kolom-kolomnya terdapat pada tabel yang berbeda,
maka kita dapat menggunakan sintaksis INNER JOIN. Sintaksis ini akan menampilkan nilai kolom
pada 2 atau lebih tabel yang saling bersesuaian dalam 1 baris.

Contoh: “Tampilkan nama kelas berikut nama prodinya!”

Solusi: Jalankan query berikut ini, dan akan ditampilkan 52 baris nama kelas berikut nama
prodinya yang bersesuaian (kolom kode_prodi di tabel kelas sama nilainya dengan kolom
kode_prodi di tabel prodi).

Pada contoh sebelumnya, jika diperhatikan baik-baik, setiap nama kolom yang ingin
ditampilkan harus disebutkan nama tabel asalnya dengan notasi dot/titik
(nama_tabel.nama_kolom). Hal ini masuk akal karena hal tersebut memiliki tujuan untuk
menghilangkan ambiguitas karena bisa saja 2 tabel yang berbeda memiliki kolom dengan nama
yang sama.
2
Namun demikian akan sedikit merepotkan apabila kita secara berulang-ulang menuliskan nama
tabel di sebelah nama kolom, lagi dan lagi. Apalagi jika nama tabelnya Panjang.

Solusinya adalah dengan menggunakan alias yaitu sintaksis AS. Dengan menggunakan sintaksis
ini, query kita akan menjadi lebih singkat namun dengan hasil yang sama. Jalankan SQL berikut
untuk mengetahui hasilnya!

6
Pada contoh sebelumnya kita telah menampilkan 2 kolom yang terletak pada 2 tabel yang
berbeda namun penggunaan INNER JOIN tidaklah terbatas pada 2 tabel saja. Kita juga dapat
menampilkan data yang lebih banyak dari beberapa tabel sekaligus.

Contoh: “Tampilkan nama dosen berikut kelas yang diajar dan harinya!”

Solusi: Jalankan SQL berikut. Jika benar akan ditampilkan 320 baris. Pada query tersebut
dilibatkan 4 tabel yaitu tabel jadwal, dosen, kelas, dan hari.

7
SELECT JOIN juga bisa difilter. Tentu saja dengan menggunakan klausa WHERE.

Contoh: “Tampilkan nama kelas berikut nama prodinya, hanya untuk kelas yang A saja!”

Solusi: Jalankan SQL berikut ini. Jika benar akan ditampilkan 7 baris yaitu semua kelas dari kelas
1-4 di masing-masing prodi yang namanya diakhiri huruf “A”

5 Lanjutkan ke Praktikum – Bagian 3.

8
Praktikum - Bagian 3: OUTER JOIN

Langkah Keterangan
Jika INNER JOIN hanya menampilan baris-baris pada 2 atau lebih tabel yang saling
bersesuaian. Maka untuk menampilkan data pada tabel yang saling bersesuaian ditambah
yang tidak bersesuaian, kita dapat menggunakan sintaksis OUTER JOIN.

OUTER JOIN dibagi menjadi 2:


- LEFT OUTER JOIN dan;
- RIGHT OUTER JOIN

OUTER JOIN pada umumnya beguna untuk mengecek data yang tidak ada pasangannya di
tabel yang di-JOIN-kan.

Contoh: “Tampilkan data semua kelas berikut nama prodinya, beserta kelas yang tidak ada
prodinya!”

Solusi: Jalankan query berikut. Jika benar akan ditampilkan 57 baris data dimana 52 baris
adalah nama kelas yang ada prodinya, dan 5 baris sisanya adalah nama kelas yang tidak
terdaftar di prodi manapun.

9
Apabila hanya ingin menampilkan data yang tidak ada pasangannya saja, maka kita bisa
menggunakan filter melalui penambahan klausa WHERE.

Query berikut akan menampilkan data seperti sebelumnya, namun hanya yang tidak ada
pasangannya saja.

Selain LEFT OUTER JOIN juga ada RIGHT OUTER JOIN. Keduanya sama-sama menampilkan data
yang bersesuaian ditambah yang tidak bersesuaian. Bedanya dalah letak data yang TIDAK
NULL-nya di sebelah mana. Tabel kiri atau tabel kanan.

Bagaimana menentukan tabel kiri dan tabel kanan?


- Tabel kiri adalah yang ditulis di sebelah KIRI (SEBELUM) kata-kata JOIN.
- Tabel kanan adalah yang ditulis di sebelah KANAN (SESUDAJH) kata-kata JOIN.

LEFT OUTER JOIN à NULL-nya di tabel kanan, data yang lengkap di tabel KIRI (LEFT)
3 RIGHT OUTER JOIN à NULL-nya di tabel kiri, data yang lengkap di tabel KANAN (RIGHT)

Contoh: “Terdapat prodi baru yang belum ada kelasnya, tampilkan nama kelas berikut nama
prodinya serta nama prodi-prodi baru yang belum ada kelasnya tersebut!”

Solusi: Jalankan query berikut. Apabila benar akan ditampilkan 55 baris dimana 52 baris adalah
data yang bersesuaian (prodi dan nama kelasnya masing-masing), sedangkan 3 baris sisanya
adalah prodi baru yang belum ada kelasnya. Perhatikan data yang lengkap ada di kolom
nama_prodi yang merupakan kolom dari tabel prodi yang ditulis di sebelah KANAN (RIGHT)
dari kata JOIN pada sintaksis SQL-nya.

10
Jika kit ingin menampilkan semua data yang bersesuaian, ditambah dengan data yang tidak
bersesuaian di tabel KANAN dan KIRI sekaligus, maka kita dapat menggunakan sintaksis FULL
JOIN.

Pada beberapa DBMS tertentu, sintaksis eksplisit FULL JOIN telah didukung, namun pada
MySQL, sintaksis ini belum didukung.

Untuk mengakalinya kita dapat menggunakan sintaksis UNION ALL yang akan menggabungkan
2 buah himpunan hasil SELECT yang berbeda.

Namun jangan lupa bahwa:


4
- pada sintaksis ini, kedua buah hasil SELECT harus memiliki jumlah kolom yang sama.
Jika tidak, maka datanya tidak akan dapat ditampilkan.
- Semikolon (;) harus diletakkan sekali saja di akhir statement SELECT yang paling
belakang.
- Jangan gunakan UNION saja karena data yang sama (duplikat) akan dihilangkan.

Jalankan query berikut ini untuk menampilkan hasil FULL join terhadap tabel kelas dan tabel
prodi. Apabila benar, maka akan ditampilkan sebanyak 112 baris data dengan rincian:
- 104 data yang lengkap ada prodi dan kelasnya.
- 5 baris data kelas yang tidak ada prodinya
- 3 baris nama prodi yang tidak ada kelasnya

11

5 Lanjutkan ke Praktikum – Bagian 5.

12
Praktikum - Bagian 4: INNER JOIN Implisit dan CROSS JOIN

Langkah Keterangan
Sintaksis JOIN yang kita pelajari sebelumnya merupakan sintaksis ANSI SQL yang lebih baru.
Sekedar pengetahuan saja, bahwa sebelum distandarkannya format sintaksis tersebut,
sebelumnya JOIN dilakukan dengan menggunakan sintaksis yang tidak ada kata JOIN-nya.
Format ini disebut sebagai IMPLICIT JOIN. Sedangkan format sintaksis kita sebelumnya disebut
sebagai EXPLICIT JOIN.

Kita dianjurkan untuk menggunakan format yang baru, yaitu yang ada kata JOIN-nya karena
cenderung lebih jelas dan menghindari terjadinya kesalahan maksud pada SQL yang kita tulis.
Dengan menuliskan kata-kata JOIN, berarti kita secara sadar memang ingin menampilkan data
dari 2 tabel atau lebih.

Namun demikian untuk sekedar pengetahuan Anda, jalankan sintaksis SQL berikut, hasilnya
akan sama dengan hasil pada Praktikum – Bagian 1 Langkah 1.

Perhatikan pada sintaksis ini tidak ada kata-kata “JOIN”-nya.

INNER JOIN Implisit juga bisa diberikan alias nama tabel agar tidak terlalu Panjang.

Alias nama tabel dituliskan pada klausa FROM, sama seperti pada Explicit JOIN.
2
Jalankan query berikut. Hasilnya akan sama dengan langkah sebelumnya, namun dengan
penulisan SQL yang lebih singkat.

13
Selain INNER JOIN, OUTER JOIN, dan FULL JOIN, terdapat satu jenis JOIN lagi yaitu CROSS JOIN.

CROSS JOIN akan menampilkan kombinasi satu-satu dari setiap kolom pada semua tabel tanpa
mempedulikan kesesuaian antar tabel atau tidak.

Jumlah baris yang dihasilkan adalah perkalian jumlah baris pada kedua buah tabel yang di
CROSS-kan.

14
CROSS JOIN juga dapt dilakukan secara IMPLICIT yaitu dengan tanpa memberikan WHERE pada
sintaksis JOIN IMPLICIT.

Jalankan query di bawah ini, hasilnya akan sama dengan langkah sebelumnya.
4

15
Tugas
1. Jalankan semua SQL pada praktikum-praktikum di atas, pahami maksudnya dan Screenshot-lah
hasilnya!
2. Tampilkan nama dosen berikut mata kuliah yang mereka ampu (186 baris) dengan ketentuan:
a. Tidak ada data yang duplikat
b. Urut berdasarkan nama dosen dari A-Z.
c. Nama kolom yang ditampilkan harus sesuai dengan contoh di bawah.

3. Tampilkan ruang yang digunakan untuk perkuliahan pada hari 'Selasa' berikut jam-nya (79 baris)
dengan ketentuan:
a. Harus ditampilkan ruangan tersebut dipakai mulai dari jam berapa sampai dengan jam
berapa.
b. Nama kolom yang ditampilkan harus sesuai contoh di bawah.

4. Tampilkan dosen yang tidak mendapatkan jadwal mengajar! Catatan: Nama kolom harus sesuai
contoh.

16
5. Tampilkan nama mata kuliah berikut dosen pengampunya berikut (192 baris) yang tidak ada dosen
pengampunya! Ketentuan:
a. Nama Kolom harus sesuai contoh
b. Anda bisa menggunakan RIGHT OUTER JOIN agar lebih mudah

6. Tampilkan nama-nama dosen (88 baris) berikut jumlah jadwal mereka! Ketentuan:
a. Nama kolom harus sesuai contoh
b. Apabila ada dosen yang tidak mendapatkan jadwal, jumlah_jadwal_mengajarnya haruslah =
0

-- Selamat Mengerjakan --

17

Anda mungkin juga menyukai