Memahami SQL sering kali soal mengajukan pertanyaan yang tepat. Saat Anda berurusan dengan data yang tersebar di beberapa tabel, operasi full outer join jelas sangat berguna. Meskipun cukup umum di beberapa sistem manajemen database, konsep FULL OUTER JOIN sedikit lebih rumit di MySQL. Kenapa? Karena MySQL tidak mendukungnya secara bawaan. Menarik, bukan? Tapi tunggu, ada solusinya!
Dalam tutorial ini, kita akan membahas secara mendetail cara mengimplementasikan full outer join di MySQL. Bersiaplah, teman-teman. Kita akan menyelami banyak contoh kode.
🔖 Referensi Cepat: Butuh rujukan cepat untuk semua jenis JOIN? Lihat SQL JOIN Cheat Sheet kami yang dilengkapi diagram visual dan contoh kode.
Apa itu Full Outer Join?
Sebelum mulai, mari kita definisikan apa itu FULL OUTER JOIN. Di SQL, full outer join menggabungkan efek dari left outer join dan right outer join sekaligus. Dengan kata lain, operasi ini mengambil record yang memiliki nilai cocok di kedua tabel, serta semua record dari kedua tabel yang nilainya tidak muncul di tabel lainnya.
Berikut contohnya. Misalkan kita punya dua tabel, Employees dan Departments.
Tabel Employees:
| id | name |
|---|---|
| 1 | Alice |
| 2 | Bob |
| 3 | Charlie |
Tabel Departments:
| id | department |
|---|---|
| 2 | HR |
| 3 | IT |
| 4 | Marketing |
Menggunakan query FULL OUTER JOIN:
SELECT * FROM Employees
FULL OUTER JOIN Departments ON Employees.id = Departments.id;
Hasilnya adalah:
| Employees.id | Employees.name | Departments.id | Departments.department |
|---|---|---|---|
| 1 | Alice | NULL | NULL |
| 2 | Bob | 2 | HR |
| 3 | Charlie | 3 | IT |
| NULL | NULL | 4 | Marketing |
Output ini menggabungkan semua record dari Employees dan Departments. Isinya mencakup:
- Record dengan nilai
idyang cocok di kedua tabel (Bob dan Charlie). - Record dari
Employeesyang tidak punya pasangan diDepartments(Alice). - Record dari
Departmentsyang tidak punya pasangan diEmployees(Marketing).
Meski sangat berguna, sintaks ini tidak didukung langsung di MySQL. Jadi, apa solusinya? Mari kita cari tahu.
Menyimulasikan Full Outer Join di MySQL
Seperti disebutkan di atas, MySQL tidak secara eksplisit mendukung keyword FULL OUTER JOIN. Namun, kita tetap bisa mendapatkan output yang diinginkan dengan mengombinasikan LEFT JOIN dan UNION
Ide untuk menyimulasikan full outer join di MySQL terdiri dari dua langkah:
- Lakukan
LEFT JOINpada tabel pertama untuk mengambil semua record dari tabel pertama, beserta record yang cocok dari tabel kedua. - Gunakan
UNIONuntuk menggabungkan hasilnya dengan hasilRIGHT JOINguna mengambil semua record dari tabel kedua beserta record yang cocok dari tabel pertama.
Berikut cara kerja masing-masing komponen:
Left Join:
Right Join:
Contoh Full Outer Join di MySQL
Berikut contoh solusinya menggunakan data yang sama seperti sebelumnya
SELECT
Employees.id AS Employees_id,
Employees.name,
Departments.id AS Departments_id,
Departments.department
FROM
Employees
LEFT JOIN
Departments ON Employees.id = Departments.id
UNION
SELECT
Employees.id AS Employees_id,
Employees.name,
Departments.id AS Departments_id,
Departments.department
FROM
Departments
RIGHT JOIN
Employees ON Departments.id = Employees.id;
Query ini terdiri dari dua bagian:
LEFT JOINuntuk mengambil semua record dari tabelEmployeesdan record yang cocok dari tabelDepartments.RIGHT JOINuntuk mengambil semua record dari tabelDepartmentsdan record yang cocok dari tabelEmployees.
UNION menggabungkan hasil kedua query ini sekaligus menghapus baris duplikat.
Dengan tabel contoh yang sama, hasilnya adalah:
| Employees_id | name | Departments_id | department |
|---|---|---|---|
| 1 | Alice | NULL | NULL |
| 2 | Bob | 2 | HR |
| 3 | Charlie | 3 | IT |
| NULL | NULL | 4 | Marketing |
Output ini, seperti FULL OUTER JOIN di SQL, menggabungkan semua record dari Employees dan Departments.
UNION Menyaring Duplikat Secara Otomatis
Dalam kasus contoh kita dengan tabel Employees dan Departments, UNION yang digunakan dalam solusi MySQL untuk FULL OUTER JOIN tidak akan menghasilkan duplikat. Ini karena operator UNION secara otomatis menghapus baris duplikat dari hasilnya.
Untuk memperjelas, mari kita lihat cara kerja UNION dalam konteks ini:
-
Bagian pertama query (
LEFT JOIN) mengambil semua record dari tabel Employees dan record yang cocok dari tabel Departments. Ini mencakup baris dengan nilai id yang cocok di kedua tabel serta baris dari Employees yang tidak punya pasangan di Departments. -
Bagian kedua query (
RIGHT JOIN) mengambil semua record dari tabel Departments dan record yang cocok dari tabel Employees. Ini mencakup baris dengan nilai id yang cocok di kedua tabel serta baris dari Departments yang tidak punya pasangan di Employees.
Karena UNION menghapus duplikat, baris dengan nilai id yang cocok (yang muncul di hasil LEFT JOIN maupun RIGHT JOIN) hanya akan muncul sekali di hasil akhir.
Singkatnya, menggunakan UNION dalam konteks ini memastikan setiap kombinasi unik data Employees dan Departments hanya muncul sekali di hasil, sehingga meniru perilaku FULL OUTER JOIN tanpa duplikat.
Berlatih di Beekeeper Studio
Semoga tutorial full outer join MySQL ini bermanfaat bagi Anda. Di postingan berikutnya, kita akan terus menjelajahi fitur MySQL tingkat lanjut lainnya, berbagi lebih banyak contoh kode, dan membahas lebih dalam mengapa dan bagaimana fitur-fitur tersebut bekerja. Sampai saat itu, terus asah kemampuan SQL Anda, idealnya dengan menggunakan Beekeeper Studio.
Beekeeper Studio Adalah GUI Database Gratis & Open Source
Tool query & editor SQL terbaik yang pernah saya pakai. Semua yang saya butuhkan untuk mengelola database ada di sini. - ⭐⭐⭐⭐⭐ Mit
Beekeeper Studio cepat, intuitif, dan mudah digunakan. Beekeeper mendukung banyak sekali database, dan berjalan mulus di Windows, Mac, dan Linux.
Apa Kata Pengguna Tentang Beekeeper Studio
"Beekeeper Studio sepenuhnya menggantikan workflow SQL lama saya. Cepat, intuitif, dan membuat pekerjaan database kembali menyenangkan."
"Saya sudah mencoba banyak GUI database, tapi Beekeeper punya keseimbangan sempurna antara fitur dan kesederhanaan. Langsung berfungsi."