Apa itu JOINS?
Gabungan membantu mengambil data dari dua atau lebih tabel database. Tabel-tabel tersebut saling terkait menggunakan kunci utama dan asing.Catatan: BERGABUNG adalah topik yang paling disalahpahami di antara SQL leaners. Demi kesederhanaan dan kemudahan pemahaman, kami akan menggunakan Database baru untuk mempraktikkan sampel. Seperti yang ditunjukkan di bawah ini
Indo | nama depan | nama keluarga | movie_id |
---|---|---|---|
1 | Adam | Smith | 1 |
2 | Ravi | Kumar | 2 |
3 | Susan | Davidson | 5 |
4 | Jenny | Adrianna | 8 |
6 | Lee | Pong | 10 |
Indo | judul | kategori |
---|---|---|
1 | Kredo ASSASSIN: EMBERS | Animasi |
2 | Baja Asli (2012) | Animasi |
3 | Alvin dan Chipmunks | Animasi |
4 | Petualangan Tin Tin | Animasi |
5 | Aman (2012) | Tindakan |
6 | Safe House (2012) | Tindakan |
7 | GIA | 18+ |
8 | Batas waktu 2009 | 18+ |
9 | Gambar Kotor | 18+ |
10 | Marley dan saya | Percintaan |
Jenis gabungan
Cross GABUNG
Cross JOIN adalah bentuk JOIN yang paling sederhana yang mencocokkan setiap baris dari satu tabel database ke semua baris lainnya.
Dengan kata lain, ini memberi kita kombinasi dari setiap baris tabel pertama dengan semua catatan di tabel kedua.
Misalkan kita ingin mendapatkan semua catatan anggota terhadap semua catatan film, kita dapat menggunakan skrip yang ditunjukkan di bawah ini untuk mendapatkan hasil yang diinginkan.
SELECT * FROM `movies` CROSS JOIN `members`
Menjalankan skrip di atas di meja kerja MySQL 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 |
GABUNG DALAM
Inner JOIN digunakan untuk mengembalikan baris dari kedua tabel yang memenuhi kondisi yang diberikan.
Misalkan, Anda ingin mendapatkan daftar anggota yang telah menyewa film beserta judul film yang disewa oleh mereka. 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 ,moviesWHERE 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 script 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 AINNER JOIN `movies` AS BON B.`id` = A.`movie_id`
GABUNG luar
MySQL Outer JOIN mengembalikan semua catatan yang cocok dari kedua tabel.
Itu dapat mendeteksi catatan yang tidak memiliki kecocokan dalam tabel yang digabungkan. Ini mengembalikan nilai NULL untuk catatan tabel yang digabungkan jika tidak ada kecocokan yang ditemukan.
Kedengarannya Membingungkan? Mari kita lihat contoh -
KIRI BERGABUNG
Asumsikan sekarang Anda ingin mendapatkan judul dari semua film bersama dengan nama anggota yang telah menyewanya. Jelas bahwa beberapa film belum disewa oleh siapa pun. Kami hanya dapat menggunakan LEFT JOIN untuk tujuan tersebut.
LEFT JOIN mengembalikan semua baris dari tabel di sebelah kiri meskipun tidak ada baris yang cocok ditemukan pada tabel di sebelah kanan. Jika tidak ada kecocokan yang ditemukan pada tabel di sebelah kanan, NULL dikembalikan.
SELECT A.`title` , B.`first_name` , B.`last_name`FROM `movies` AS ALEFT JOIN `members` AS BON B.`movie_id` = A.`id`
Menjalankan skrip di atas di meja kerja MySQL 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 yang 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 KANAN
RIGHT JOIN jelas merupakan kebalikan dari LEFT JOIN. RIGHT JOIN mengembalikan semua kolom dari tabel di sebelah kanan meskipun tidak ada baris yang cocok ditemukan dalam tabel di sebelah kiri. Jika tidak ada kecocokan yang ditemukan di tabel di sebelah kiri, NULL dikembalikan.
Dalam contoh kita, anggaplah Anda perlu mendapatkan nama anggota dan film yang mereka sewa. Sekarang kami memiliki anggota baru yang belum menyewa film apa pun
SELECT A.`first_name` , A.`last_name`, B.`title`FROM `members` AS ARIGHT JOIN `movies` AS BON B.`id` = A.`movie_id`
Menjalankan skrip di atas di meja kerja MySQL 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 |
Klausa "AKTIF" dan "MENGGUNAKAN"
Dalam contoh kueri JOIN di atas, kami telah menggunakan klausa ON untuk mencocokkan rekaman antar tabel.
Klausa USING juga dapat digunakan untuk tujuan yang sama. Perbedaannya dengan MENGGUNAKAN adalah 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 disebut sama dalam tabel "anggota" dengan nama "movie_id".
Mari kita ganti nama bidang "film" tabel "id" menjadi nama "movie_id". Kami melakukan ini untuk memiliki nama bidang yang cocok dan identik.
ALTER TABLE `movies` CHANGE `id` `movie_id` INT( 11 ) NOT NULL AUTO_INCREMENT;
Selanjutnya mari kita gunakan MENGGUNAKAN dengan contoh LEFT JOIN di atas.
SELECT A.`title` , B.`first_name` , B.`last_name`FROM `movies` AS ALEFT JOIN `members` AS BUSING ( `movie_id` )
Selain menggunakan ON dan USING dengan JOIN, Anda dapat menggunakan banyak klausa MySQL lainnya seperti GROUP BY, WHERE dan bahkan fungsi seperti SUM , AVG , dll.
Mengapa kita harus menggunakan gabungan?
Sekarang Anda mungkin berpikir, mengapa kita menggunakan JOIN ketika kita 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 keluaran masing-masing dalam kueri yang berurutan. Tentu saja itu mungkin. Tetapi menggunakan JOIN, Anda bisa menyelesaikan pekerjaan hanya dengan menggunakan satu kueri dengan parameter pencarian apa pun. Di sisi lain MySQL dapat mencapai kinerja yang lebih baik dengan JOIN karena dapat menggunakan Pengindeksan. Cukup gunakan satu kueri JOIN alih-alih menjalankan beberapa kueri akan mengurangi overhead server. Alih-alih, menggunakan beberapa kueri yang mengarahkan lebih banyak transfer data antara MySQL dan aplikasi (perangkat lunak). Selain itu, dibutuhkan lebih banyak manipulasi data di akhir aplikasi juga.
Jelas bahwa kita dapat mencapai kinerja MySQL dan aplikasi yang lebih baik dengan menggunakan JOIN.
Ringkasan
- GABUNG memungkinkan kita menggabungkan data dari lebih dari satu tabel menjadi satu kumpulan hasil.
- GABUNG memiliki kinerja yang lebih baik dibandingkan dengan sub kueri
- INNER JOINS hanya mengembalikan baris yang memenuhi kriteria yang ditentukan.
- OUTER JOINS juga dapat mengembalikan baris yang tidak ditemukan kecocokan. Baris yang tidak cocok dikembalikan dengan kata kunci NULL.
- Jenis JOIN utama termasuk 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.
- GABUNG juga dapat digunakan di klausa lain seperti GROUP BY, WHERE, SUB QUERIES, AGGREGATE FUNCTIONS, dll.