Left Joins Disemak Semula: Perbezaan Antara Klausa ON dan WHERE
Dalam SQL Server, operasi LEFT JOIN memainkan peranan penting dalam mendapatkan data daripada berbilang jadual. Walau bagaimanapun, perbezaan yang halus namun ketara wujud antara menyatakan syarat cantuman dalam klausa ON dan klausa WHERE.
Pertimbangkan pertanyaan berikut:
SELECT t1.f2 FROM t1 LEFT JOIN t2 ON t1.f1 = t2.f1 AND cond2 AND t2.f3 > something
Pertanyaan ini cuba mendapatkan semula lajur f2 daripada jadual t1, manakala pilihan menyertai baris daripada jadual t2 berdasarkan nilai padanan dalam lajur f1 dan syarat tambahan (cond2 dan t2.f3 > sesuatu).
Sebaliknya, pertanyaan berikut menggunakan pendekatan yang berbeza:
SELECT t1.f2 FROM t1 LEFT JOIN t2 ON t1.f1 = t2.f1 AND cond2 WHERE t2.f3 > something
Di sini, syarat cantuman ditentukan semata-mata dalam klausa ON, manakala t2 .f3 > sesuatu keadaan ditambah sebagai penapis dalam klausa WHERE.
Memahami Perbezaan
Perbezaan utama antara dua pertanyaan ini terletak pada susunan operasi:
Contoh
Untuk menggambarkan perbezaan ini, pertimbangkan jadual calon (calon) dan jadual undi (undi):
candidates | name | |-------------| | Obama | | Romney | votes | voter | voted_for | |-------------|-------------| | Mickey Mouse | Romney | | Donald Duck | Obama |
Pertanyaan 1:
SELECT * FROM candidates c LEFT JOIN votes v ON c.name = v.voted_for AND v.voter = 'Donald Duck'
Pertanyaan ini mendapatkan semula semua calon, termasuk Romney, malah walaupun Donald Duck mengundi Obama. Ini kerana syarat v.voter = 'Donald Duck' dinyatakan dalam klausa ON, yang hanya mempengaruhi operasi cantum.
Pertanyaan 2:
SELECT * FROM candidates c LEFT JOIN votes v ON c.name = v.voted_for WHERE v.voter = 'Donald Duck'
Dalam pertanyaan ini, keadaan v.voter = 'Donald Duck' dialihkan ke klausa WHERE. Akibatnya, Romney dikecualikan daripada keputusan yang ditetapkan kerana dia tidak mempunyai undian yang sepadan daripada Donald Duck. Hanya Obama, yang menerima undian daripada Donald Duck, dikembalikan.
Kesimpulan
Memahami perbezaan antara klausa ON dan WHERE dalam operasi LEFT JOIN adalah penting untuk mendapatkan semula dengan berkesan data dalam SQL Server. Dengan meletakkan syarat dengan teliti dalam klausa yang sesuai, anda boleh mengawal kriteria padanan dan menapis set hasil gabungan dengan cekap.
Atas ialah kandungan terperinci LEFT JOIN dalam SQL Server: Apakah Perbezaan Antara Klausa `ON` dan `WHERE`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!