Rumah >pangkalan data >tutorial mysql >Memahami Perbezaan Antara WHERE dan HAVING dalam SQL

Memahami Perbezaan Antara WHERE dan HAVING dalam SQL

Linda Hamilton
Linda Hamiltonasal
2024-12-23 00:03:08510semak imbas

Understanding the Difference Between WHERE and HAVING in SQL

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;
    
    • 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;
    
    • 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;
  • 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;
  • Tapis jabatan yang bilangan pekerja melebihi 10.

Contoh Gabungan:

SELECT employee_id, first_name, salary
FROM employees
WHERE salary > 50000;
  • 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn