Jika kami menganggap bahwa Anda menggunakan INNER JOINalih-alih LEFT JOIN(yang tampaknya adalah maksud Anda), kedua kueri ini secara fungsional setara. Pengoptimal permintaan akan meninjau dan mengevaluasi kriteria dalam WHEREklausa Anda dan klausa Anda FROMdan mempertimbangkan semua faktor ini ketika membangun rencana kueri untuk mencapai rencana eksekusi yang paling efisien. Jika kita melakukan EXPLAINpada kedua pernyataan, kita mendapatkan hasil yang sama:
Pertanyaan 1 :
EXPLAIN
SELECT
tableA.ColA
,tableA.ColB
,tableA.ColC
,tableA.ColD
,tableA.ColE
FROM tableA
JOIN tableB ON tableA.ColA=tableB.ColA
WHERE
tableA.ColB=tableB.ColB
AND tableA.ColC=tableB.ColC
AND tableA.ColD=tableB.ColD
AND tableA.ColE=tableB.ColE
[Hasil] :
| ID | SELECT_TYPE | TABLE | TYPE | POSSIBLE_KEYS | KEY | KEY_LEN | REF | ROWS | EXTRA |
------------------------------------------------------------------------------------------------------------------------
| 1 | SIMPLE | tableA | ALL | (null) | (null) | (null) | (null) | 1 | |
| 1 | SIMPLE | tableB | ALL | (null) | (null) | (null) | (null) | 1 | Using where; Using join buffer |
Pertanyaan 2 :
EXPLAIN
SELECT
tableA.ColA
,tableA.ColB
,tableA.ColC
,tableA.ColD
,tableA.ColE
FROM tableA
JOIN tableB ON tableA.ColA=tableB.ColA
AND tableA.ColB=tableB.ColB
AND tableA.ColC=tableB.ColC
AND tableA.ColD=tableB.ColD
WHERE
tableA.ColE=tableB.ColE
[Hasil] :
| ID | SELECT_TYPE | TABLE | TYPE | POSSIBLE_KEYS | KEY | KEY_LEN | REF | ROWS | EXTRA |
------------------------------------------------------------------------------------------------------------------------
| 1 | SIMPLE | tableA | ALL | (null) | (null) | (null) | (null) | 1 | |
| 1 | SIMPLE | tableB | ALL | (null) | (null) | (null) | (null) | 1 | Using where; Using join buffer |
Anda dapat meninjau detail lengkapnya dengan tautan berikut. Saya juga membuat contoh SQL 2008 sehingga Anda dapat membandingkan cara kerja dua mesin (yang sama):
Contoh permintaan MySQL
Contoh kueri SQL 2008 (Pastikan Anda 'Lihat Rencana Eksekusi' untuk kedua hasil)
INNER JOIN, tetapi denganLEFT JOINini akan menghasilkan hasil yang berbeda. Pada dasarnya, kondisi yang Anda tambahkan padaWHEREpermintaan kedua Anda mengubah AndaJOINpadaINNER JOIN