Rumah  >  Artikel  >  pangkalan data  >  Apakah Perbezaan Utama Antara MySQL JOIN dan LEFT JOIN?

Apakah Perbezaan Utama Antara MySQL JOIN dan LEFT JOIN?

Susan Sarandon
Susan Sarandonasal
2024-11-16 13:05:03391semak imbas

What's the Key Difference Between MySQL JOIN and 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn