MySQL Tutorial JOINS: DALAM, LUAR, KIRI, KANAN, SILANG
Apa itu GABUNG?
Bergabung membantu mengambil data dari dua atau lebih tabel database.
Tabel-tabel tersebut saling berhubungan menggunakan kunci utama dan kunci asing.
Catatan: GABUNG adalah topik yang paling disalahpahami di kalangan pemula SQL. Demi kesederhanaan dan kemudahan pemahaman, kami akan menggunakan Database baru untuk contoh latihan. Seperti yang ditunjukkan di bawah ini
id | nama depan | nama keluarga | film_id |
---|---|---|---|
1 | Adam | Smith | 1 |
2 | Ravi | Kumar | 2 |
3 | Susan | Davidson | 5 |
4 | Jenny | Adrianna | 8 |
5 | Lee | Pong | 10 |
id | judul | kategori |
---|---|---|
1 | KEPERCAYAAN ASSASSIN: EMBER | animasi |
2 | Baja Asli (2012) | animasi |
3 | Alvin and the Chipmunks | animasi |
4 | Petualangan Tin Tin | animasi |
5 | Aman (2012) | Tindakan |
6 | Rumah Aman (2012) | Tindakan |
7 | SUDAH | 18 + |
8 | Batas waktu 2009 | 18 + |
9 | Gambar Kotor | 18 + |
10 | aku dan marley | Roman |
Jenis-jenis gabungan
Silang GABUNG
Cross JOIN adalah bentuk GABUNG paling sederhana yang mencocokkan setiap baris dari satu tabel database ke semua baris tabel lainnya.
Dengan kata lain ini memberi kita kombinasi setiap baris tabel pertama dengan semua record di tabel kedua.
Misalkan kita ingin mendapatkan semua catatan anggota terhadap semua rekaman film, kita dapat menggunakan skrip di bawah ini untuk mendapatkan hasil yang kita inginkan.
SELECT * FROM `movies` CROSS JOIN `members`
Menjalankan skrip di atas dalam MySQL meja kerja memberi kita hasil sebagai berikut.
id | title | id | first_name | last_name | movie_id | |
---|---|---|---|---|---|---|
1 | ASSASSIN'S CREED: EMBERS | Animations | 1 | Adam | Smith | 1 |
1 | ASSASSIN'S CREED: EMBERS | Animations | 2 | Ravi | Kumar | 2 |
1 | ASSASSIN'S CREED: EMBERS | Animations | 3 | Susan | Davidson | 5 |
1 | ASSASSIN'S CREED: EMBERS | Animations | 4 | Jenny | Adrianna | 8 |
1 | ASSASSIN'S CREED: EMBERS | Animations | 6 | Lee | Pong | 10 |
2 | Real Steel(2012) | Animations | 1 | Adam | Smith | 1 |
2 | Real Steel(2012) | Animations | 2 | Ravi | Kumar | 2 |
2 | Real Steel(2012) | Animations | 3 | Susan | Davidson | 5 |
2 | Real Steel(2012) | Animations | 4 | Jenny | Adrianna | 8 |
2 | Real Steel(2012) | Animations | 6 | Lee | Pong | 10 |
3 | Alvin and the Chipmunks | Animations | 1 | Adam | Smith | 1 |
3 | Alvin and the Chipmunks | Animations | 2 | Ravi | Kumar | 2 |
3 | Alvin and the Chipmunks | Animations | 3 | Susan | Davidson | 5 |
3 | Alvin and the Chipmunks | Animations | 4 | Jenny | Adrianna | 8 |
3 | Alvin and the Chipmunks | Animations | 6 | Lee | Pong | 10 |
4 | The Adventures of Tin Tin | Animations | 1 | Adam | Smith | 1 |
4 | The Adventures of Tin Tin | Animations | 2 | Ravi | Kumar | 2 |
4 | The Adventures of Tin Tin | Animations | 3 | Susan | Davidson | 5 |
4 | The Adventures of Tin Tin | Animations | 4 | Jenny | Adrianna | 8 |
4 | The Adventures of Tin Tin | Animations | 6 | Lee | Pong | 10 |
5 | Safe (2012) | Action | 1 | Adam | Smith | 1 |
5 | Safe (2012) | Action | 2 | Ravi | Kumar | 2 |
5 | Safe (2012) | Action | 3 | Susan | Davidson | 5 |
5 | Safe (2012) | Action | 4 | Jenny | Adrianna | 8 |
5 | Safe (2012) | Action | 6 | Lee | Pong | 10 |
6 | Safe House(2012) | Action | 1 | Adam | Smith | 1 |
6 | Safe House(2012) | Action | 2 | Ravi | Kumar | 2 |
6 | Safe House(2012) | Action | 3 | Susan | Davidson | 5 |
6 | Safe House(2012) | Action | 4 | Jenny | Adrianna | 8 |
6 | Safe House(2012) | Action | 6 | Lee | Pong | 10 |
7 | GIA | 18+ | 1 | Adam | Smith | 1 |
7 | GIA | 18+ | 2 | Ravi | Kumar | 2 |
7 | GIA | 18+ | 3 | Susan | Davidson | 5 |
7 | GIA | 18+ | 4 | Jenny | Adrianna | 8 |
7 | GIA | 18+ | 6 | Lee | Pong | 10 |
8 | Deadline(2009) | 18+ | 1 | Adam | Smith | 1 |
8 | Deadline(2009) | 18+ | 2 | Ravi | Kumar | 2 |
8 | Deadline(2009) | 18+ | 3 | Susan | Davidson | 5 |
8 | Deadline(2009) | 18+ | 4 | Jenny | Adrianna | 8 |
8 | Deadline(2009) | 18+ | 6 | Lee | Pong | 10 |
9 | The Dirty Picture | 18+ | 1 | Adam | Smith | 1 |
9 | The Dirty Picture | 18+ | 2 | Ravi | Kumar | 2 |
9 | The Dirty Picture | 18+ | 3 | Susan | Davidson | 5 |
9 | The Dirty Picture | 18+ | 4 | Jenny | Adrianna | 8 |
9 | The Dirty Picture | 18+ | 6 | Lee | Pong | 10 |
10 | Marley and me | Romance | 1 | Adam | Smith | 1 |
10 | Marley and me | Romance | 2 | Ravi | Kumar | 2 |
10 | Marley and me | Romance | 3 | Susan | Davidson | 5 |
10 | Marley and me | Romance | 4 | Jenny | Adrianna | 8 |
10 | Marley and me | Romance | 6 | Lee | Pong | 10 |
INNER JOIN
JOIN bagian dalam digunakan untuk mengembalikan baris dari kedua tabel yang memenuhi kondisi tertentu.
Misalkan, Anda ingin mendapatkan daftar anggota yang telah menyewa film beserta judul film yang mereka sewa. Anda cukup menggunakan INNER JOIN untuk itu, yang mengembalikan baris dari kedua tabel yang memenuhi kondisi tertentu.
SELECT members.`first_name` , members.`last_name` , movies.`title` FROM members ,movies WHERE movies.`id` = members.`movie_id`
Menjalankan skrip di atas berikan
first_name | last_name | title |
---|---|---|
Adam | Smith | ASSASSIN'S CREED: EMBERS |
Ravi | Kumar | Real Steel(2012) |
Susan | Davidson | Safe (2012) |
Jenny | Adrianna | Deadline(2009) |
Lee | Pong | Marley and me |
Perhatikan skrip hasil di atas juga dapat ditulis sebagai berikut untuk mencapai hasil yang sama.
SELECT A.`first_name` , A.`last_name` , B.`title` FROM `members`AS A INNER JOIN `movies` AS B ON B.`id` = A.`movie_id`
GABUNG Luar
MySQL GABUNG luar mengembalikan semua catatan yang cocok dari kedua tabel.
Itu dapat mendeteksi catatan yang tidak cocok dalam tabel yang digabungkan. Itu kembali NULL nilai untuk catatan tabel yang digabungkan jika tidak ditemukan kecocokan.
Kedengarannya Membingungkan? Mari kita lihat contoh –
LEFT JOIN
Asumsikan sekarang Anda ingin mendapatkan judul semua film beserta nama anggota yang menyewanya. Jelas bahwa beberapa film tidak disewa oleh siapa pun. Kita cukup menggunakan LEFT JOIN untuk tujuan.
LEFT JOIN mengembalikan semua baris dari tabel di sebelah kiri meskipun tidak ada baris yang cocok ditemukan di tabel di sebelah kanan. Jika tidak ditemukan kecocokan pada tabel di sebelah kanan, NULL dikembalikan.
SELECT A.`title` , B.`first_name` , B.`last_name` FROM `movies` AS A LEFT JOIN `members` AS B ON B.`movie_id` = A.`id`
Menjalankan skrip di atas dalam MySQL meja kerja memberi. Anda dapat melihat bahwa dalam hasil yang dikembalikan yang tercantum di bawah ini untuk film yang tidak disewa, bidang nama anggota memiliki nilai NULL. Itu berarti tidak ada anggota yang cocok menemukan tabel anggota untuk film tersebut.
title | first_name | last_name |
---|---|---|
ASSASSIN'S CREED: EMBERS | Adam | Smith |
Real Steel(2012) | Ravi | Kumar |
Safe (2012) | Susan | Davidson |
Deadline(2009) | Jenny | Adrianna |
Marley and me | Lee | Pong |
Alvin and the Chipmunks | NULL | NULL |
The Adventures of Tin Tin | NULL | NULL |
Safe House(2012) | NULL | NULL |
GIA | NULL | NULL |
The Dirty Picture | NULL | NULL |
GABUNG BENAR
GABUNG KANAN jelas merupakan kebalikan dari GABUNG KIRI. RIGHT JOIN mengembalikan semua kolom dari tabel di sebelah kanan meskipun tidak ada baris yang cocok ditemukan di tabel di sebelah kiri. Jika tidak ditemukan kecocokan pada tabel di sebelah kiri, NULL dikembalikan.
Dalam contoh kita, asumsikan Anda perlu mendapatkan nama anggota dan film yang disewa oleh mereka. Sekarang kami memiliki anggota baru yang belum menyewa film apa pun
SELECT A.`first_name` , A.`last_name`, B.`title` FROM `members` AS A RIGHT JOIN `movies` AS B ON B.`id` = A.`movie_id`
Menjalankan skrip di atas dalam MySQL workbench memberikan hasil sebagai berikut.
first_name | last_name | title |
---|---|---|
Adam | Smith | ASSASSIN'S CREED: EMBERS |
Ravi | Kumar | Real Steel(2012) |
Susan | Davidson | Safe (2012) |
Jenny | Adrianna | Deadline(2009) |
Lee | Pong | Marley and me |
NULL | NULL | Alvin and the Chipmunks |
NULL | NULL | The Adventures of Tin Tin |
NULL | NULL | Safe House(2012) |
NULL | NULL | GIA |
NULL | NULL | The Dirty Picture |
Klausul “ON” dan “USING”.
Dalam contoh kueri GABUNG di atas, kami telah menggunakan klausa ON untuk mencocokkan catatan antar tabel.
Klausa USING juga dapat digunakan untuk tujuan yang sama. Bedanya dengan MENGGUNAKAN itu perlu memiliki nama yang identik untuk kolom yang cocok di kedua tabel.
Dalam tabel “film” sejauh ini kami menggunakan kunci utamanya dengan nama “id”. Kami merujuk hal yang sama di tabel “anggota” dengan nama “movie_id”.
Mari kita ganti nama kolom “film” tabel menjadi “id” menjadi “movie_id”. Kami melakukan ini untuk mendapatkan nama bidang yang sama dan cocok.
ALTER TABLE `movies` CHANGE `id` `movie_id` INT( 11 ) NOT NULL AUTO_INCREMENT;
Selanjutnya mari kita gunakan USING dengan contoh LEFT JOIN di atas.
SELECT A.`title` , B.`first_name` , B.`last_name` FROM `movies` AS A LEFT JOIN `members` AS B USING ( `movie_id` )
Selain menggunakan ON dan MENGGUNAKAN dengan GABUNG Anda dapat menggunakan banyak lainnya MySQL klausa seperti KELOMPOK BERDASARKAN, DI MANA dan bahkan berfungsi seperti JUMLAH, AVG, Dll
Mengapa kita harus menggunakan gabungan?
Sekarang Anda mungkin berpikir, mengapa kami menggunakan GABUNG ketika kami dapat melakukan tugas yang sama dengan menjalankan kueri. Terutama jika Anda memiliki pengalaman dalam pemrograman database, Anda tahu kami dapat menjalankan kueri satu per satu, gunakan output masing-masing dalam kueri yang berurutan. Tentu saja hal itu mungkin terjadi. Namun dengan menggunakan GABUNG, Anda dapat menyelesaikan pekerjaan hanya dengan menggunakan satu kueri dengan parameter pencarian apa pun. Di samping itu MySQL dapat mencapai kinerja yang lebih baik dengan GABUNG karena dapat menggunakan Pengindeksan. Cukup gunakan satu kueri GABUNG alih-alih menjalankan beberapa kueri akan mengurangi overhead server. Sebaliknya, menggunakan beberapa kueri akan menghasilkan lebih banyak transfer data MySQL dan aplikasi (perangkat lunak). Lebih jauh lagi, ini memerlukan lebih banyak manipulasi data di akhir aplikasi juga.
Jelas bahwa kami bisa mencapai yang lebih baik MySQL dan kinerja aplikasi dengan menggunakan GABUNG.
Kesimpulan
- JOINS memungkinkan kita menggabungkan data dari lebih dari satu tabel ke dalam satu kumpulan hasil.
- JOINS memiliki kinerja yang lebih baik dibandingkan dengan sub query
- INNER JOINS hanya mengembalikan baris yang memenuhi kriteria yang diberikan.
- OUTER JOINS juga dapat mengembalikan baris yang tidak ditemukan kecocokannya. Baris yang tidak cocok dikembalikan dengan kata kunci NULL.
- Tipe JOIN yang utama meliputi Inner, Left Outer, Right Outer, Cross JOINS, dll.
- Klausa yang sering digunakan dalam operasi JOIN adalah “ON”. Klausa “USING” mengharuskan kolom yang cocok memiliki nama yang sama.
- JOINS juga dapat digunakan dalam klausa lain seperti GROUP BY, WHERE, SUB QUERIES, AGREGATE FUNCTIONS dll.