Tidak ada tipe gabungan "lebih baik" atau "lebih buruk". Mereka memiliki arti yang berbeda dan mereka harus digunakan tergantung padanya.
Dalam kasus Anda, Anda mungkin tidak memiliki karyawan tanpa work_log (tidak ada baris dalam tabel itu), jadi LEFT JOIN
dan JOIN
hasilnya akan setara. Namun, jika Anda memiliki hal seperti itu (karyawan baru tanpa work_log terdaftar), JOIN
hapus karyawan itu, sedangkan yang kiri bergabung (yang tabel pertamanya adalah karyawan) akan menunjukkan semuanya, dan nol di bidang dari work_log jika ada tidak cocok.
Sekali lagi, kinerja adalah hal sekunder untuk kebenaran permintaan. Beberapa orang mengatakan bahwa Anda tidak boleh menggunakan LEFT JOIN
s. Memang benar bahwa LEFT JOIN memaksa optimizer untuk mengeksekusi query dalam satu urutan tertentu, mencegah beberapa optimisasi (pemesanan ulang tabel) dalam beberapa kasus. Ini salah satu contohnya . Tetapi Anda tidak boleh memilih satu dari yang lain jika kebenaran / makna dikorbankan, karena INNER JOIN tidak secara inheren lebih buruk. Sisa dari optimasi yang biasa berlaku seperti biasa.
Singkatnya, jangan gunakan LEFT JOIN
jika Anda benar-benar jahat INNER JOIN
.
Di MySQL CROSS JOIN
, INNER JOIN
dan JOIN
sama. Dalam standar, dan secara semantik, a CROSS JOIN
adalah INNER JOIN
tanpa ON
klausa, sehingga Anda mendapatkan setiap kombinasi baris di antara tabel.
Anda memiliki contoh semua jenis semantik bergabung di Wikipedia . Dalam praktiknya, di MySQL, kita cenderung hanya menulis JOIN
dan LEFT JOIN
.