Dalam angsuran sebelumnya dari seri MySQL ini, saya menunjukkan bagaimana Anda dapat mengambil data menggunakan klausa MySQL. Pada bagian ini kita akan belajar tentang fungsi Joins di MySQL, mengapa mereka digunakan dan bagaimana menggunakannya. Mari kita mulai.
Bagaimana Saya Dapat Menautkan Dua Tabel di MySQL
MySQL Joins memungkinkan Anda mengakses data dari beberapa tabel. MySQL Join dilakukan setiap kali dua atau lebih tabel digabungkan dalam pernyataan SQL. MySQL Joins meliputi:MySQL Inner Join (juga dikenal sebagai Simple Join), MySQL Left Outer Join (juga disebut Left Join, ini mengembalikan catatan yang cocok dari tabel kiri), Right Join (ini mengembalikan catatan yang cocok dari tabel kiri). tabel kanan), dan Gabung Penuh (ini mengembalikan catatan yang cocok dari semua tabel). Dengan menggunakan MySQL JOIN, Anda dapat menggabungkan lebih dari dua tabel.
Di MySQL, Gabung Dalam adalah Gabung Default. Pada kata kunci tertentu pada saat itu, ia memilih semua baris dari kedua tabel, selama ada koordinat antara kolom di kedua tabel.
Tidak seperti SQL, MySQL tidak menganggap Outer Join sebagai tipe Join yang terpisah. Untuk mendapatkan hasil yang sama dengan Gabung Luar, Anda harus bergabung dengan Gabung Luar Kiri dan Gabung Luar Kanan.
Berapa Banyak Tabel yang Dapat Digabung di MySQL
Menurut dokumentasi resmi MySQL 8.0, jumlah maksimum tabel dalam pernyataan JOIN adalah 61. Namun, perhatikan bahwa pernyataan JOIN dapat memerlukan banyak sumber daya server karena jumlah tabel meningkat. Jika demikian halnya dengan kueri Anda, saya sangat menyarankan untuk memecahnya menjadi beberapa kueri untuk mengurangi beban di server.
Mari kita mulai dengan menambahkan tabel baru di database kami yang akan berisi pesan bersama dengan ID pengguna yang telah mengirim pesan ini, kami akan menamainya pesan. Skema tabel kita adalah:
BUAT `pesan` TABEL (
`id` int(11) BUKAN NULL,
`message` varchar(255) NOT NULL
)
Kami akan menggunakan fungsi selectdata . yang sama yang telah kita buat di crud.php mengajukan. Sekarang mari kita mulai dengan menggabungkan dua tabel ini. Anda juga dapat mengisi meja Anda sehingga Anda dapat mempraktikkannya.
Berhenti Membuang Waktu di Server
Cloudways menangani manajemen server untuk Anda sehingga Anda dapat fokus membuat aplikasi hebat dan membuat klien Anda senang.
Mulai GratisGabungan Dalam
Inner Join menggabungkan tabel sedemikian rupa sehingga hanya menampilkan hasil yang cocok dengan kondisi yang diberikan dan menyembunyikan yang lain. Struktur kueri Inner Join adalah:
PILIH nama_kolom
DARI tabel1
tabel INNER JOIN2
ON table1.column_name=table2.column_name;
Inner Join dan simple join keduanya sama. Anda juga dapat menulis kueri Anda seperti ini:
PILIH nama_kolom
DARI tabel1
JOIN table2
ON table1.column_name=table2.column_name;
Sekarang mari kita ambil Nama dan pesan dari database kita menggunakan Inner join. Querynya akan seperti ini
$sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message From myguests INNER JOIN messages ON myguests.id = messages.id";
CONCAT fungsi digunakan untuk menggabungkan dua kolom string di MySQL. Sekarang buka index.php Anda yang telah kita buat sebelumnya salin kode berikut di dalamnya.
<table> <tr> <td> Name</td> <td> Email</td> <td> Message</td> <!-- <td> Message</td> <td> Date</td>!--> </tr> <?php include 'crud.php'; $sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message From myguests INNER JOIN messages ON myguests.id = messages.id"; $result = selectdata($sql); if($result != "zero") { while($row = $result->fetch_assoc()) { echo "<tr>"; echo "<td>" . $row['name'] . "</td>"; echo "<td>" . $row['email'] . "</td>"; if($row['message'] === null){echo "<td>" . 'null'. "</td>";} else { echo "<td>" . $row['message']. "</td>"; } ; echo "</tr>"; } } else { echo $result; } ?> </table> ?>
Saat Anda menjalankan halaman ini di server hosting web PHP, hasilnya akan terlihat seperti ini:
Seperti yang dapat Anda lihat dengan jelas, itu hanya mengembalikan hasil yang cocok dengan user_id dan di mana pesan bukan nol.
KANAN GABUNG
RIGHT JOIN menggabungkan dua tabel sedemikian rupa sehingga mengembalikan semua nilai dari kanan dan nilai yang cocok dari tabel kiri dan juga mengembalikan null pada tabel kiri ketika tidak ditemukan kecocokan. Struktur untuk RIGHT JOIN adalah:
PILIH nama_kolom
DARI tabel1
KANAN GABUNG tabel2
ON table1.column_name=table2.column_name;
Sekarang mari kita ambil Nama dan pesan dari database kita membuat pesan di meja kanan kami dan tamu saya di meja kiri kami.
$sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message From myguests RIGHT JOIN messages ON messages.id = myguests.id";
Sekarang buka index.php dan ganti $sql pertanyaan dengan di atas. Saat Anda menjalankannya, hasilnya adalah:
Jika Anda melihat pesan tabel, Anda akan melihat beberapa ID yang tidak cocok dengan ID pengguna mana pun, itulah sebabnya kueri ini mengembalikan nol di kolom nama dan email yang tidak akan menemukan kecocokan di kolom kiri.
KIRI GABUNG
LEFT Joins menggabungkan dua tabel sedemikian rupa sehingga mengembalikan semua nilai dari kiri dan nilai yang cocok dari tabel kanan dan juga mengembalikan null pada tabel kanan ketika tidak ditemukan kecocokan. Struktur untuk LEFT JOIN adalah:
PILIH nama_kolom
DARI tabel1
KIRI GABUNG tabel2
ON table1.column_name=table2.column_name;
Sekarang mari kita ambil Nama dan pesan dari database kita membuat pesan di meja kanan kami dan tamu saya di meja kiri kami.
$sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message From myguests LEFT JOIN messages ON messages.id = myguests.id";
Sekarang buka index.php dan query sebagai ganti $sql dengan di atas. Saat Anda menjalankannya, hasilnya adalah:
Jika Anda melihat pesan tabel, Anda akan menemukan beberapa ID yang tidak cocok dengan ID pengguna mana pun, itulah sebabnya kueri ini mengembalikan null di kolom Pesan yang tidak akan menemukan kecocokan di kolom kanan.
UNION
UNION di MySQL digunakan untuk menyatukan beberapa kolom dari tabel yang berbeda menjadi satu kolom. Struktur kueri UNION untuk memilih nilai unik adalah:
PILIH nama_kolom DARI tabel1
PERSATUAN
SELECT column_name(s) FROM table2;
Dan untuk memilih nilai berulang dari kolom adalah:
PILIH nama_kolom DARI tabel1
SERIKAT SEMUA
SELECT column_name(s) FROM table2;
Sekarang mari kita ambil ID dari tabel kita.
$sql = "SELECT id FROM myguests UNION SELECT id FROM messages";
Sekarang buka index.php dan ganti $sql pertanyaan dengan di atas. Saat Anda menjalankannya, hasilnya adalah:
Kueri telah mengambilkan kami semua ID unik yang ditemukan di kedua tabel.
Cross JOIN atau Produk Cartesian
Jenis GABUNG ini mengembalikan produk kartesius baris dari tabel di Gabung. Ini akan mengembalikan tabel yang terdiri dari record yang menggabungkan setiap baris dari tabel pertama dengan setiap baris dari tabel kedua.
Sintaks Cross JOIN adalah,
SELECT column-name-list from table-name1 CROSS JOIN table-name2;
Self JOIN
Self JOIN adalah join biasa, tetapi tabel bergabung dengan dirinya sendiri.
SELECT column_name(s) FROM table1 T1, table1 T2 WHERE condition;
GABUNG LUAR PENUH
Kata kunci FULL OUTER JOIN mengembalikan semua record ketika ada kecocokan pada record tabel kiri (table1) atau kanan (table2).
Catatan:FULL OUTER JOIN berpotensi mengembalikan kumpulan hasil yang sangat besar!
SELECT column_name(s) FROM table1 FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;
Bergabung dengan Beberapa Tabel
Di blog sebelumnya, Anda telah mempelajari cara menggabungkan dua tabel menggunakan kueri gabungan SQL yang berbeda. Tetapi jika Anda sedang mengerjakan aplikasi besar yaitu membangun toko e-niaga dan membuat beberapa tabel di dalamnya seperti pelanggan, pesanan, dan produk, kerumitan dalam menggabungkan tabel pasti dapat muncul. Untuk mengatasinya, Anda perlu mendapatkan semua produk yang dipesan oleh pelanggan tertentu. Skemanya tetap sama, jadi saya tidak menyatakannya di sini. Mari kita lihat kuerinya:
SELECT * FROM table1 LEFT JOIN table2 ON table2.id = table1.id LEFT JOIN table3 ON table3.id = table1.id
Kami pertama menggabungkan tabel 1 dan tabel 2 yang memberikan tabel sementara dengan data gabungan dari tabel1 dan tabel2, yang kemudian digabungkan ke tabel3. Persamaan ini dapat diperluas hingga lebih dari 3 tabel menjadi N tabel, Anda hanya perlu memastikan bahwa query SQL harus memiliki N-1 pernyataan join dalam arrange to join N tabel.
Kueri di atas akan memungkinkan Anda untuk mencocokkan baris dari tabel1 (dalam kasus apa pun) ke baris dari dua tabel lainnya. Menggunakan LEFT JOIN memungkinkan Anda untuk menggabungkan table2 dan table3 dengan table1 (tidak hanya table2 dengan table1 dan table3 dengan table2).
Anda juga dapat menambahkan kondisi seperti WHERE, AND, dan ORDERBY
SELECT * FROM table1 LEFT JOIN table2 ON table2.id = table1.id LEFT JOIN table3 ON table3.id = table2.id WHERE month = 'numberHere' AND (table2.email IS NOT NULL OR table3.email IS NOT NULL) ORDER BY submitdate DESC
Kesimpulan:
Dalam tutorial ini, kita belajar tentang join yang banyak digunakan dalam database relasional. Gabung tidak hanya digunakan untuk dua tabel saja dan Anda dapat menggabungkan lebih dari dua tabel menggunakan teknik yang sama. Dalam angsuran kedelapan dan terakhir dari seri MySQL ini, saya akan membahas cara menggunakan Regular Expressions (REGEX) untuk mengambil dan menyortir data di MySQL. Untuk itu, berlangganan buletin blog kami dan Anda juga dapat mendaftar ke Managed PHP Stack kami dan mulai menguji tutorial ini di server kami yang dioptimalkan PHP.
Pertanyaan yang Sering DiajukanQ. Bagaimana cara menggabungkan dua tabel?
Jawab: Menggabungkan dua tabel dalam SQL dapat dilakukan dengan empat cara utama:Inner Join (mengembalikan baris dengan kolom yang cocok), Left Join (SEMUA record di tabel kiri dan record yang cocok di tabel kanan), Right Join (ALL record di tabel kanan). dan catatan yang cocok di tabel kiri), dan Union (menghapus duplikat).
Q. Perintah SQL apa yang dapat Anda gunakan untuk menggabungkan dua tabel?
Jawab: Dua tabel dapat digabungkan menggunakan pernyataan INNER JOIN yang mengembalikan record yang cocok dari kedua tabel.
Q. Bagaimana cara menggabungkan dua tabel dalam SQL tanpa bergabung?
Jawab: Anda dapat menggunakan pernyataan berikut untuk menggabungkan tabel tanpa benar-benar menggunakan pernyataan JOIN
SELECT * FROM TableA a, TableB b