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.

Jenis-jenis gabungan

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.

INNER JOIN

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.

GABUNG Luar

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
Note: Null is returned for non-matching rows on right

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

GABUNG BENAR

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
Note: Null is returned for non-matching rows on left

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.