Pengertian Left, Right, Inner, Cross Join pada MySQL Lengkap

{tocify} $title={Daftar Isi}

Pendahuluan

Operasi join atau penggabungan pada MySQL adalah operasi yang menggabungkan dua atau lebih tabel sehingga menghasilkan tabel dan data (temporary) yang disebut tabel gabungan (joined table) tanpa perlu membuat tabel dan menginput data baru. Ada beberapa macam join yang dapat digunakan, yakni:
  • Left Join
  • Right Join
  • Inner Join
  • Cross Join
Sebelum menjelaskan lebih detail, berikut adalah tabel yang penulis gunakan untuk contoh pembahasan:
Tabel praktikum memiliki relasi dengan tabel matkul dengan memiliki kunci foreign yang mengambil referensi data dari tabel matkul

Right Join

Right join adalah join yang menggabungkan dua atau lebih tabel dengan mengembalikan semua nilai tabel kanan dan mengembalikan nilai tabel kiri yang memiliki pasangan dengan tabel kanan namun mengembalikan nilai NULL jika tidak memiliki pasangan. Bentuk umum right join dan contohnya sebagai berikut:
Bentuk Umum:
select tabel1.kolom1, tabel2.kolom2, tabelN.kolomN from tabel1 
right join tabel2 on tabel2.kolom2 = tabel1.kolom1 
right join tabelN on tabelN.kolomN = tabel1.kolom1;

Contoh:
mysql> select matkul.id_matkul, praktikum.id_prak, praktikum.matkul_id from praktikum right join matkul on matkul.id_matkul = praktikum.matkul_id;
+-----------+---------+-----------+
| id_matkul | id_prak | matkul_id |
+-----------+---------+-----------+
|         1 |       1 |         1 |
|         2 |    NULL |      NULL |
|         3 |    NULL |      NULL |
|         4 |    NULL |      NULL |
|         5 |       4 |         5 |
|         6 |    NULL |      NULL |
|         7 |    NULL |      NULL |
|         8 |       3 |         8 |
|         9 |    NULL |      NULL |
|        10 |       2 |        10 |
|        11 |    NULL |      NULL |
|        12 |    NULL |      NULL |
+-----------+---------+-----------+
12 rows in set (0.00 sec)
Penjelasan:
  • from tabel1: from tabel1 disini adalah tabel utama yang akan digabungkan dengan tabel2
  • right join tabel2: Adalah tabel yang hendak digabungkan dan mengembalikan semua baris dari tabel tersebut, sementara tabel1 yang tidak memiliki pasangan akan menampilkan nilai NULL.
  • Sebagai alternatif, kita bisa gunakan operator NOT NULL pada klausa where untuk mengeliminasi kolom tanpa pasangan (NULL) sehingga tidak ditampilkan seperti contoh berikut:
mysql> select matkul.id_matkul, praktikum.id_prak, praktikum.matkul_id from praktikum right join matkul on matkul.id_matkul = praktikum.matkul_id where praktikum.id_prak IS NOT NULL;
+-----------+---------+-----------+
| id_matkul | id_prak | matkul_id |
+-----------+---------+-----------+
|         1 |       1 |         1 |
|         5 |       4 |         5 |
|         8 |       3 |         8 |
|        10 |       2 |        10 |
+-----------+---------+-----------+
4 rows in set (0.03 sec)
  • on tabel2.kolom2 = tabel1.kolom1: Menunjuk pada kolom yang memiliki relasi dari dua tabel sebagai contoh, kolom matkul_id pada tabel praktikum memiliki relasi dengan kolom id_matkul pada tabel matkul.

Left Join

Kebalikan dari Right Join yakni baris yang tidak memiliki pasangan pada tabel sebelah kiri dari kata "Join" akan ditampilkan. Bentuk umum left join dan contohnya sebagai berikut:

Bentuk Umum:
 select tabel1.kolom1, tabel2.kolom2, tabelN.kolomN from tabel1 
Contoh:
mysql> select matkul.id_matkul, praktikum.id_prak, praktikum.matkul_id from matkul left join praktikum on praktikum.matkul_id = matkul.id_matkul;
+-----------+---------+-----------+ | id_matkul | id_prak | matkul_id | +-----------+---------+-----------+ | 1 | 1 | 1 | | 2 | NULL | NULL | | 3 | NULL | NULL | | 4 | NULL | NULL | | 5 | 4 | 5 | | 6 | NULL | NULL | | 7 | NULL | NULL | | 8 | 3 | 8 | | 9 | NULL | NULL | | 10 | 2 | 10 | | 11 | NULL | NULL | | 12 | NULL | NULL | +-----------+---------+-----------+ 12 rows in set (0.00 sec)

Perbedaan Left dan Right Join

Secara teknis tidak ada perbedaan antara left dan right join, left dan right hanya menempatkan tabel mana yang dijadikan sebagai tabel irisan

Inner Join

Join yang hanya menghasilkan kombinasi semua baris yang memiliki pasangan saja sedangkan baris yang tidak memiliki pasangan tidak akan ditampilkan, berikut bentuk umum inner join dan contohnya:

Contoh:
mysql> select matkul.id_matkul, praktikum.id_prak, praktikum.matkul_id from matkul inner join praktikum on praktikum.matkul_id = matkul.id_matkul;
+-----------+---------+-----------+
| id_matkul | id_prak | matkul_id |
+-----------+---------+-----------+
|         1 |       1 |         1 |
|         5 |       4 |         5 |
|         8 |       3 |         8 |
|        10 |       2 |        10 |
+-----------+---------+-----------+
4 rows in set (0.00 sec)

mysql> select matkul.id_matkul, praktikum.id_prak, praktikum.matkul_id from praktikum inner join matkul on matkul.id_matkul = praktikum.matkul_id;
+-----------+---------+-----------+
| id_matkul | id_prak | matkul_id |
+-----------+---------+-----------+
|         1 |       1 |         1 |
|         5 |       4 |         5 |
|         8 |       3 |         8 |
|        10 |       2 |        10 |
+-----------+---------+-----------+
4 rows in set (0.00 sec)
Dari contoh diatas keduanya menghasilkan output yang sama, hal itu dikarenakan inner join hanya menggabungkan data yang memiliki pasangan saja.

Join Tabel Tanpa Relasi

Umumnya penggabungan tabel dapat dilakukan hanya pada tabel yang saling memiliki relasi / hubungan seperti beberapa contoh diatas, namun penggabungan tabel dapat juga dilakukan pada tabel yang tidak saling memiliki relasi / hubungan seperti contoh berikut:
Contoh:
mysql> select count(*) AS jumlah from mahasiswa;
+--------+
| jumlah |
+--------+
|    102 |
+--------+
1 row in set (0.00 sec)

mysql> select count(*) AS jumlah from dosen;
+--------+
| jumlah |
+--------+
|     70 |
+--------+
1 row in set (0.00 sec)

mysql> select * from dosen, mahasiswa;
.................
7140 rows in set (0.10 sec) <Ada lebih dari 7000 data
mysql> select * from dosen cross join mahasiswa;
.................
7140 rows in set (0.10 sec)

mysql> select mahasiswa.id_mhs as Mahasiswa, dosen.id_dosen as Dosen from mahasiswa cross join dosen where mahasiswa.id_mhs = 1;
+-----------+-------+
| Mahasiswa | Dosen |
+-----------+-------+
|         1 |     1 |
|         1 |     2 |
|         1 |     3 |
.....................
|         1 |    70 |
+-----------+-------+
70 rows in set (0.02 sec)
Note: Data dipersingkat

Dari contoh diatas banyak hasil data (result set) yang dihasilkan adalah mengkalikan jumlah total data tersimpan tabel A dengan tabel B, hasil ini dikenal juga sebagai perkalian kartesian (cartesian product).
Bayu Radityo

Seorang lulusan teknik informatika yang senang dalam berbagi ilmu pengetahuan, dan membuat karya digital berupa photomanipulation dan digital drawing. instagram external-link

Posting Komentar

Lebih baru Lebih lama