LEFT JOIN dengan Syarat: Di manakah Perbezaan Antara ON dan WHERE?
Dalam SQL Server, LEFT JOIN menggabungkan baris daripada dua jadual berdasarkan syarat bergabung yang ditentukan. Walaupun klausa ON mentakrifkan syarat cantum dalam pernyataan LEFT JOIN, klausa WHERE menapis baris selepas operasi cantuman. Perbezaan halus ini boleh membawa kepada hasil yang tidak dijangka jika tidak difahami dengan betul.
Pertimbangkan pertanyaan berikut:
SELECT t1.f2 FROM t1 LEFT JOIN t2 ON t1.f1 = t2.f1 AND cond2 AND t2.f3 > something
Anehnya, pertanyaan ini tidak menghasilkan keputusan yang sama seperti berikut:
SELECT t1.f2 FROM t1 LEFT JOIN t2 ON t1.f1 = t2.f1 AND cond2 WHERE t2.f3 > something
Penjelasan
Penjelasan Klausa ON memainkan peranan penting dalam menentukan baris mana yang mengambil bahagian dalam gabungan. Syarat yang dinyatakan dalam HIDUP mestilah benar untuk baris dipadankan dan disertakan dalam hasil gabungan. Sebaliknya, klausa WHERE menapis baris yang telah dicantumkan.
Dalam pertanyaan pertama, syarat t2.f3 > sesuatu adalah sebahagian daripada klausa ON. Akibatnya, hanya baris dengan t2.f3 lebih besar daripada sesuatu akan disertakan dalam gabungan. Ini bermakna mana-mana baris yang sepadan dengan t2.f3 tidak lebih besar daripada sesuatu akan dikecualikan daripada hasilnya.
Dalam pertanyaan kedua, syarat t2.f3 > sesuatu adalah sebahagian daripada klausa WHERE. Klausa ini dinilai selepas gabungan telah dilakukan. Oleh itu, semua baris yang memenuhi syarat klausa ON (t1.f1 = t2.f1 dan cond2) akan menjadi sebahagian daripada hasil gabungan. Klausa WHERE kemudian menapis baris ini, mengekalkan hanya baris yang t2.f3 lebih besar daripada sesuatu.
Contoh
Untuk menggambarkan konsep ini, pertimbangkan jadual calon ( calon) dan jadual undi (undi). Jika kita ingin mencari calon yang telah menerima undi, kita boleh menggunakan LEFT JOIN:
SELECT * FROM candidates c LEFT JOIN votes v ON c.name = v.voted_for
Pertanyaan ini mengembalikan semua calon, malah mereka yang belum menerima sebarang undi. Jika kita mengalihkan syarat kepada klausa WHERE:
SELECT * FROM candidates c LEFT JOIN votes v ON c.name = v.voted_for WHERE v.voted_for IS NOT NULL
Keputusan kini hanya termasuk calon yang telah menerima sekurang-kurangnya satu undi.
Kesimpulan
Memahami perbezaan antara klausa ON dan WHERE dalam LEFT JOIN adalah penting untuk memanipulasi data dengan berkesan. Dengan meletakkan syarat dengan teliti dalam klausa yang sesuai, anda boleh memastikan pertanyaan anda mengembalikan hasil yang diingini.
Atas ialah kandungan terperinci LEFT JOIN dalam SQL: Apakah Perbezaan Utama Antara Klausa `ON` dan `WHERE`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!