LEFT JOIN dengan Syarat: On vs. WHERE
Dalam SQL Server, LEFT JOIN sering digunakan untuk mendapatkan data daripada satu jadual semasa memaut ke jadual lain melalui lajur biasa. Walau bagaimanapun, perbezaan halus timbul apabila menggunakan syarat dalam klausa ON dan WHERE, yang membawa kepada hasil yang berbeza.
SERTAI PADA Klausa lwn. Klausa WHERE
Klausa ON dalam LEFT JOIN menentukan syarat yang menentukan baris mana dari jadual utama (jadual bercantum) akan dipadankan dengan baris daripada jadual kedua (meja bercantum). Sebaliknya, klausa WHERE menapis set hasil selepas gabungan dilakukan.
Contoh
Pertimbangkan dua pertanyaan berikut:
-- LEFT JOIN with Condition in ON Clause SELECT t1.f2 FROM t1 LEFT JOIN t2 ON t1.f1 = t2.f1 AND cond2 AND t2.f3 > something; -- LEFT JOIN with Condition in WHERE Clause SELECT t1.f2 FROM t1 LEFT JOIN t2 ON t1.f1 = t2.f1 AND cond2 WHERE t2.f3 > something;
Keputusan
Anehnya, kedua-dua pertanyaan ini tidak menghasilkan keputusan yang sama. Sebabnya terletak pada perbezaan antara klausa JOIN dan WHERE.
Dalam pertanyaan pertama, keadaan dalam klausa ON mengehadkan baris mana dari t2 yang dicantumkan dengan t1. Oleh itu, baris daripada t2 yang tidak memenuhi syarat (t2.f3 <= sesuatu) akan dikecualikan daripada cantuman. Akibatnya, set hasil tidak akan termasuk baris daripada t1 yang berpotensi memadankan baris yang dikecualikan daripada t2.
Dalam pertanyaan kedua, syarat dalam klausa WHERE digunakan selepas gabungan telah dilaksanakan. Akibatnya, semua baris daripada t1 dicantumkan dengan semua baris daripada t2, tidak kira sama ada ia memenuhi syarat. Selepas itu, klausa WHERE menapis baris yang tidak memenuhi syarat, memberikan set hasil yang berbeza berbanding dengan pertanyaan pertama.
Kesimpulan
Memahami perbezaan antara klausa ON dan WHERE adalah penting apabila bekerja dengan LEFT JOIN. Klausa ON menentukan baris padanan untuk cantuman, manakala klausa WHERE menapis set hasil selepas cantuman selesai. Pemahaman ini memastikan bahawa hasil yang diingini diperoleh daripada pertanyaan SQL yang melibatkan LEFT JOIN.
Atas ialah kandungan terperinci LEFT JOIN dalam SQL Server: ON vs. WHERE Klausa – Apakah Perbezaannya dan Bila Perlu Saya Gunakan Setiap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!