SQL JOIN: Perbezaan Klausa WHERE dan ON dalam Penapisan Data
KlausaSQL WHERE
dan ON
kerap digunakan dalam cantuman, tetapi ia melaksanakan fungsi penapisan yang berbeza. Memahami perbezaan ini adalah penting untuk reka bentuk pertanyaan yang cekap.
Fasal WHERE
: Penapisan Selepas Sertai
Klausa WHERE
, yang muncul selepas pernyataan JOIN
, menapis keseluruhan set hasil yang dihasilkan oleh cantuman. Ia bertindak sebagai penapis selepas bergabung, mengalih keluar baris yang tidak memenuhi syarat yang ditetapkan selepas operasi gabungan selesai. Contohnya:
<code class="language-sql">SELECT * FROM Orders LEFT JOIN OrderLines ON OrderLines.OrderID = Orders.ID WHERE Orders.ID = 12345;</code>
Di sini, klausa WHERE
menapis hasil untuk hanya memasukkan baris dengan Orders.ID
ialah 12345. Baris yang tidak memenuhi syarat ini akan dihapuskan selepas LEFT JOIN
telah pun menggabungkan data daripada Orders
dan OrderLines
.
Fasal ON
: Penapisan Pra-Sertai
Sebaliknya, klausa ON
, yang terletak dalam pernyataan JOIN
itu sendiri, mentakrifkan kriteria sertai. Ia menentukan baris mana daripada jadual bercantum harus dipadankan sebelum cantuman dilaksanakan. Pertimbangkan pertanyaan ini:
<code class="language-sql">SELECT * FROM Orders LEFT JOIN OrderLines ON OrderLines.OrderID = Orders.ID AND Orders.ID = 12345;</code>
Klausa ON
menetapkan bahawa baris dicantumkan hanya apabila OrderLines.OrderID
sepadan dengan Orders.ID
dan Orders.ID
bersamaan dengan 12345. Penapisan pra-gabungan ini mengurangkan data yang diproses sebelum pencantuman sebenar berlaku .
Kesamaan Fungsian lwn. Perbezaan Semantik
Walaupun hasil yang setara dari segi fungsi kadangkala boleh dicapai menggunakan mana-mana klausa, maknanya berbeza dengan ketara. WHERE
menapis selepas gabungan, manakala ON
mempengaruhi proses gabungan itu sendiri.
Perbezaan semantik ini amat ketara dengan LEFT
atau RIGHT JOINs
. Keadaan klausa WHERE
mungkin mengecualikan baris daripada jadual kiri atau kanan, walaupun LEFT
atau RIGHT JOIN
direka bentuk untuk memasukkan semua baris daripada jadual itu. Menggunakan ON
untuk keadaan penapisan memastikan bahawa cantuman itu sendiri menghormati kemasukan yang dimaksudkan untuk semua baris daripada jadual yang ditentukan.
Untuk INNER JOINs
, kesannya selalunya serupa, tetapi perbezaan semantiknya kekal.
Atas ialah kandungan terperinci SQL JOINs: WHERE vs. ON: Bilakah Mereka Berbeza dalam Hasil Penapisan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!