Rumah > Artikel > pangkalan data > Apakah Perbezaan Utama Antara MySQL JOIN dan LEFT JOIN?
Memahami Perbezaan antara MySQL JOIN vs LEFT JOIN
MySQL JOIN ialah operasi asas yang menggabungkan baris daripada dua atau lebih jadual berdasarkan lajur biasa. Secara lalai, MySQL melakukan INNER JOIN, yang hanya mengembalikan baris yang sepadan dalam semua jadual yang dicantumkan.
Walau bagaimanapun, salah faham yang biasa timbul apabila pengguna menganggap bahawa ketiadaan jenis gabungan yang jelas menunjukkan LEFT JOIN. Ini tidak berlaku; jenis gabungan lalai kekal JOIN DALAM.
Contoh LEFT JOIN vs INNER JOIN
Pertimbangkan pertanyaan berikut:
SELECT `DM_Server`.`Jobs`.*, `DM_Server`.servers.Description AS server, digital_inventory.params, products.products_id, products.products_pdfupload, customers.customers_firstname, customers.customers_lastname FROM `DM_Server`.`Jobs` INNER JOIN `DM_Server`.servers ON servers.ServerID = Jobs.Jobs_ServerID JOIN `cpod_live`.`digital_inventory` ON digital_inventory.jobname = Jobs.Jobs_Name JOIN `cpod_live`.`products` ON products.products_pdfupload = CONCAT(digital_inventory.jobname, ".pdf") JOIN `cpod_live`.`customers` ON customers.customers_id = products.cID ORDER BY `DM_Server`.`Jobs`.Jobs_StartTime DESC LIMIT 50
Pertanyaan ini berfungsi INNER JOIN pada semua jadual, hanya mengembalikan baris yang mempunyai nilai yang sepadan dalam semua yang dicantumkan jadual.
Sekarang, mari kita ubah suai pertanyaan untuk menggunakan LEFT JOIN:
SELECT `DM_Server`.`Jobs`.*, `DM_Server`.servers.Description AS server, digital_inventory.params, products.products_id, products.products_pdfupload, customers.customers_firstname, customers.customers_lastname FROM `DM_Server`.`Jobs` LEFT JOIN `DM_Server`.servers ON servers.ServerID = Jobs.Jobs_ServerID LEFT JOIN `cpod_live`.`digital_inventory` ON digital_inventory.jobname = Jobs.Jobs_Name LEFT JOIN `cpod_live`.`products` ON products.products_pdfupload = CONCAT(digital_inventory.jobname, ".pdf") LEFT JOIN `cpod_live`.`customers` ON customers.customers_id = products.cID ORDER BY `DM_Server`.`Jobs`.Jobs_StartTime DESC LIMIT 50
LEFT JOIN dalam pertanyaan ini mengembalikan semua baris dari jadual kiri ("Jobs") dan hanya memadankan baris dari jadual yang betul. Ini bermakna walaupun tiada baris yang sepadan dalam jadual yang betul, baris daripada "Pekerjaan" akan tetap disertakan dalam hasil carian.
Perwakilan Visual Gabungan
Di bawah ialah perwakilan visual JOIN DALAM dan SERTAI KIRI:
INNER SERTAI:
TABLE 1 TABLE 2 +-----------+------+ +-----------+------+ | Column 1 | KEY | | Column 3 | KEY | +-----------+------+ +-----------+------+ | ROW 1.1 | 1 | | ROW 2.1 | 1 | | ROW 1.2 | 2 | | | | | | | | ROW 2.2 | 2 | +-----------+------+ +-----------+------+ Result: | Column 1 | Column 3 | +-----------+-----------+ | ROW 1.1 | ROW 2.1 | | ROW 1.2 | ROW 2.2 |
KIRI SERTAI:
TABLE 1 TABLE 2 +-----------+------+ +-----------+------+ | Column 1 | KEY | | Column 3 | KEY | +-----------+------+ +-----------+------+ | ROW 1.1 | 1 | | ROW 2.1 | 1 | | ROW 1.2 | 2 | | | | | ROW 1.3 | 3 | | | | +-----------+------+ +-----------+------+ Result: | Column 1 | Column 3 | +-----------+-----------+ | ROW 1.1 | ROW 2.1 | | ROW 1.2 | NULL | | ROW 1.3 | NULL |
Atas ialah kandungan terperinci Apakah Perbezaan Utama Antara MySQL JOIN dan LEFT JOIN?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!