MySQL Gabung: Dalam, Luar, Kiri, Kanan, Silang

โšก Ringkasan Cerdas

MySQL JOIN menggabungkan baris dari dua atau lebih tabel yang saling terkait menjadi satu set hasil. Sumber daya ini menjelaskan CROSS, INNER, LEFT, RIGHT, dan OUTER JOIN dengan kueri yang dapat dijalankan, data sampel, dan tabel keluaran yang jelas untuk pekerjaan basis data praktis.

  • ๐Ÿ”— Prinsip Inti: Operasi JOIN mencocokkan baris antar tabel menggunakan relasi kunci utama dan kunci asing.
  • โšก Why It Matters: Satu kueri JOIN menggunakan pengindeksan dan mengurangi perjalanan bolak-balik ke server dibandingkan dengan beberapa kueri terpisah.
  • ๏ธ Perilaku Gabungan Silang: Setiap baris pada tabel pertama berpasangan dengan setiap baris pada tabel kedua, menghasilkan hasil perkalian Kartesius.
  • ๐ŸŽฏ Perilaku JOIN Internal: Hanya baris yang memenuhi kondisi pencocokan di kedua tabel yang dikembalikan.
  • ๏ธ Perilaku JOIN Luar: LEFT dan RIGHT JOIN juga mengembalikan baris yang tidak cocok dan mengisi kolom yang hilang dengan NULL.
  • ๐Ÿงฉ ON versus USING: Penggunaan USING mengharuskan nama kolom yang identik, sedangkan ON mendukung ekspresi pencocokan apa pun.

MySQL BERGABUNG

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: JOIN adalah topik yang paling disalahpahami di kalangan pelajar SQL. Demi kesederhanaan dan kemudahan pemahaman, kita akan menggunakan basis data baru untuk berlatih contoh. Seperti yang ditunjukkan di bawah ini.

Setiap contoh di bawah ini menggunakan kedua tabel ini. The film_id kolom masuk anggota menunjuk ke id kolom masuk bioskop โ€” hubungan yang dicocokkan oleh setiap JOIN.

anggota

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

bioskop

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

Mengapa kita harus menggunakan JOINS?

Sebelum membahas setiap tipe JOIN, ada baiknya mengetahui mengapa JOIN lebih disukai daripada menjalankan beberapa kueri.

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.

Jenis-jenis JOIN

MySQL Mendukung beberapa tipe JOIN, masing-masing menjawab pertanyaan berbeda tentang dua tabel yang sama. Tabel di bawah ini membandingkannya; setiap tipe kemudian didemonstrasikan dengan kueri dan hasilnya.

JOIN tipe Baris yang dikembalikan Hasil berisi nilai NULL? Penggunaan khas
LINTAS BERGABUNG Setiap baris tabel A dipasangkan dengan setiap baris tabel B. Tidak Menghasilkan semua kombinasi yang mungkin
INNER JOIN Hanya baris yang sesuai dengan kondisi di kedua tabel Tidak Anggota yang benar-benar menyewa film
LEFT JOIN Semua baris dari tabel sebelah kiri, ditambah pasangan dari sebelah kanan. Ya, di sisi kanan. Semua film, bahkan yang tidak pernah disewa.
GABUNG BENAR Semua baris dari tabel sebelah kanan, ditambah pasangan dari sebelah kiri. Ya, di sisi kiri. Semua film, bahkan yang tidak ada anggota yang terlibat.

LINTAS BERGABUNG

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

CROSS JOIN mengembalikan setiap kemungkinan pasangan, yang jarang Anda inginkan. INNER JOIN mempersempit hasil ke pasangan yang benar-benar terkait.

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 dapat menggunakan INNER JOIN untuk itu, yang akan mengembalikan baris dari kedua tabel yang memenuhi kondisi yang diberikan.

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

INNER JOIN secara diam-diam menghapus baris yang tidak memiliki pasangan. Ketika baris yang tidak berpasangan tersebut penting, OUTER JOIN adalah pilihan yang tepat.

MySQL Outer JOIN mengembalikan semua record 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.

Terdengar membingungkan? Mari kita lihat sebuah 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 Workbench memberikan hasil. Anda dapat melihat pada hasil yang dikembalikan yang tercantum di bawah ini bahwa untuk film yang tidak disewa, kolom nama anggota memiliki nilai NULL. Itu berarti tidak ada anggota yang cocok yang ditemukan di tabel anggota untuk film tertentu 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โ€.

Setiap kueri sejauh ini telah mencocokkan baris dengan klausa ON. MySQL menawarkan alternatif yang lebih singkat ketika kolom yang cocok memiliki nama yang sama.

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 ke MENGGUNAKAN dengan GABUNG Anda dapat menggunakan banyak lainnya MySQL klausa seperti KELOMPOK OLEH, DI MANA dan bahkan berfungsi seperti JUMLAH, AVG, Dll

Pertanyaan Umum Demo Slot

Perintah JOIN menggabungkan kolom dari dua tabel secara berdampingan, mencocokkan baris berdasarkan kunci. Perintah UNION menumpuk hasil dari dua kueri secara vertikal dan membutuhkan pencocokan jumlah dan tipe kolom.

Ya. Rantai klausa JOIN tambahan, masing-masing dengan kondisi ON-nya sendiri. MySQL Menggabungkan dua tabel pertama, kemudian menggabungkan hasil sementara tersebut ke tabel berikutnya, dan seterusnya.

SELF JOIN menggabungkan sebuah tabel dengan dirinya sendiri menggunakan dua alias. Fungsinya adalah membandingkan baris di dalam satu tabel, misalnya mencocokkan baris data karyawan dengan baris data manajer karyawan tersebut.

Ya. Asisten AI yang terintegrasi dalam editor seperti MySQL Workbench Anda dapat membuat draf kueri JOIN dari perintah bahasa sederhana. Selalu tinjau kondisi ON yang dihasilkan, karena kunci yang salah akan menghasilkan hasil yang salah secara diam-diam.

Sebagian. Penasihat AI menyarankan indeks dan urutan penggabungan yang lebih baik, yang sering kali mengurangi waktu eksekusi. Pengoptimal tetap memilih rencana akhir, sehingga pengindeksan yang benar pada kunci penggabungan tetap menjadi faktor terbesar.

Ringkaslah postingan ini dengan: