Perbezaan Antara WHERE dan HAVING dalam SQL
Kedua-dua klausa WHERE dan HAVING digunakan untuk menapis data dalam pertanyaan SQL, tetapi ia mempunyai tujuan yang berbeza dan digunakan pada peringkat pelaksanaan pertanyaan yang berbeza. Berikut ialah perbandingan terperinci:
1. Tujuan
-
FASAL MANA:
- Tapis baris sebelum sebarang pengumpulan dilakukan.
- Digunakan untuk menentukan syarat pada baris individu.
-
MENDAPAT Klausa:
- Menapis data dikumpulkan selepas klausa GROUP BY telah digunakan.
- Biasanya digunakan dengan fungsi agregat seperti SUM(), COUNT(), AVG(), dll.
2. Permohonan
-
DI MANA:
- Tidak boleh digunakan dengan fungsi agregat (cth., SUM, COUNT).
- Contoh:
SELECT * FROM employees WHERE salary > 50000;
Salin selepas log masuk
Salin selepas log masuk
- Ini menapis pekerja dengan gaji melebihi 50,000.
-
MEMILIH:
- Digunakan khusus untuk menapis kumpulan yang dibuat oleh GROUP BY.
- Boleh menggunakan fungsi agregat untuk keadaan.
- Contoh:
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 60000;
Salin selepas log masuk
Salin selepas log masuk
- Ini menapis jabatan yang purata gajinya melebihi 60,000.
3. Perintah Pelaksanaan
-
DI MANA:
- Digunakan awal dalam pertanyaan, sebelum baris dikumpulkan.
- Menjejaskan baris mana yang disertakan dalam kumpulan.
-
MEMILIH:
- Digunakan selepas GROUP BY telah mencipta kumpulan.
- Menapis hasil agregat kumpulan.
4. Perbezaan Utama
Aspek |
WHERE Fasal |
MEMPUNYAI Klausa |
Aspect |
WHERE Clause |
HAVING Clause |
Purpose |
Filters rows before grouping. |
Filters aggregated groups. |
Use with Aggregates |
Cannot use aggregate functions. |
Can use aggregate functions. |
Execution Order |
Applied before GROUP BY. |
Applied after GROUP BY. |
Scope |
Operates on individual rows. |
Operates on grouped data. |
Tujuan |
Menapis baris sebelum mengumpulkan. |
Menapis kumpulan agregat. |
Gunakan dengan Agregat |
Tidak boleh menggunakan fungsi agregat. |
Boleh menggunakan fungsi agregat. |
Perintah Pelaksanaan |
Digunakan sebelum GROUP BY. |
Digunakan selepas GROUP BY. |
Skop |
Beroperasi pada baris individu. |
Beroperasi pada data terkumpul. |
Contoh
Menggunakan WHERE:
SELECT * FROM employees WHERE salary > 50000;
Salin selepas log masuk
Salin selepas log masuk
- Menapis baris individu yang gajinya melebihi 50,000.
Menggunakan HAVING:
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 60000;
Salin selepas log masuk
Salin selepas log masuk
- Tapis jabatan yang bilangan pekerja melebihi 10.
Contoh Gabungan:
SELECT employee_id, first_name, salary
FROM employees
WHERE salary > 50000;
Salin selepas log masuk
-
WHERE: Menapis baris yang gajinya melebihi 30,000.
-
BERHASIL: Menapis kumpulan yang purata gaji melebihi 50,000.
Bila Gunakan WHERE vs HAVING
- Gunakan WHERE untuk menapis baris berdasarkan keadaan mudah (bukan agregat).
- Gunakan HAVING untuk menapis kumpulan selepas menggunakan GROUP BY atau fungsi agregat.
Kesimpulan
Klausa WHERE memfokuskan pada menapis baris individu sebelum sebarang pengumpulan, manakala klausa HAVING memperkatakan menapis data agregat selepas pengumpulan. Memahami perbezaan ini adalah penting untuk menulis pertanyaan SQL yang cekap yang mengendalikan kedua-dua penapisan peringkat baris dan peringkat kumpulan.
Hai, saya Abhay Singh Kathayat!
Saya seorang pembangun timbunan penuh dengan kepakaran dalam kedua-dua teknologi hadapan dan belakang. Saya bekerja dengan pelbagai bahasa pengaturcaraan dan rangka kerja untuk membina aplikasi yang cekap, berskala dan mesra pengguna.
Jangan ragu untuk menghubungi saya melalui e-mel perniagaan saya: kaashshorts28@gmail.com.
Atas ialah kandungan terperinci Memahami Perbezaan Antara WHERE dan HAVING dalam SQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!