Rumah > pangkalan data > tutorial mysql > Bolehkah HAVING Digunakan dalam SQL Tanpa Klausa GROUP BY?

Bolehkah HAVING Digunakan dalam SQL Tanpa Klausa GROUP BY?

Susan Sarandon
Lepaskan: 2024-12-29 18:12:10
asal
1001 orang telah melayarinya

Can HAVING be Used in SQL Without a GROUP BY Clause?

Bolehkah Klausa HAVING Digunakan Tanpa Klausa KUMPULAN MENGIKUT?

Piawaian SQL menggariskan kriteria khusus untuk menggunakan klausa HAVING, yang merangkumi merujuk lajur yang berfungsi bergantung pada klausa GROUP BY atau rujukan luar. Walau bagaimanapun, pertanyaan yang diberikan menimbulkan persoalan sama ada boleh menggunakan HAVING tanpa GROUP BY.

Spesifikasi SQL Standard

Mengikut standard, klausa HAVING tanpa klausa GROUP BY tidak dilarang secara jelas. Walau bagaimanapun, pertanyaan mempamerkan tingkah laku yang boleh dipersoalkan:

SELECT *
FROM Book
HAVING NumberOfPages = MAX(NumberOfPages)
Salin selepas log masuk

Pertanyaan ini menggunakan fungsi agregat (MAX) dalam klausa HAVING, tetapi ia tidak menunjukkan baris tertentu yang harus dipilih. Oleh itu, tingkah lakunya tidak ditakrifkan secara ketat oleh standard.

Pelaksanaan MySQL

MySQL mentafsir pertanyaan ini seolah-olah terdapat klausa GROUP BY tersirat, memilih baris sahaja dengan nilai NumberOfPages maksimum. Tingkah laku ini tidak mematuhi standard.

Sebab Ketidakpatuhan Standard

Standard memerlukan klausa HAVING untuk beroperasi pada kumpulan baris yang ditakrifkan oleh klausa GROUP BY. Tujuannya adalah untuk menapis kumpulan berdasarkan nilai agregat. Menggunakan HAVING tanpa GROUP BY akan membenarkan penapisan pada keadaan sewenang-wenangnya, yang berpotensi membawa kepada hasil yang tidak dijangka.

Pertanyaan SQL Standard yang Sah

Pertanyaan SQL Standard yang sah menggunakan HAVING tanpa GROUP BY ialah:

SELECT 'T' AS result
FROM Book
HAVING MIN(NumberOfPages) < MAX(NumberOfPages);
Salin selepas log masuk

Pertanyaan ini menyemak sama ada NumberOfPages minimum nilai kurang daripada nilai maksimum, mengembalikan satu baris dengan hasil 'T' jika benar dan set kosong jika palsu. Tingkah laku ini konsisten dengan keperluan standard yang HAVING digunakan pada fungsi agregat yang beroperasi pada keseluruhan jadual.

Atas ialah kandungan terperinci Bolehkah HAVING Digunakan dalam SQL Tanpa Klausa GROUP BY?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan