SQL में, HAVING
क्लॉज का उपयोग किसी समूह या समुच्चय के लिए खोज शर्त निर्दिष्ट करने के लिए किया जा सकता है।
HAVING
क्लॉज का प्रयोग आमतौर पर GROUP BY
. के साथ किया जाता है खंड। ऐसे मामलों में जहां यह नहीं है, वहां एक अंतर्निहित एकल, समेकित समूह होता है।
HAVING
क्लॉज WHERE
. के समान है खंड, सिवाय इसके कि WHERE
अलग-अलग पंक्तियों को फ़िल्टर करता है, जबकि HAVING
फ़िल्टर समूह। WHERE
क्लॉज डेटा को पहले फ़िल्टर करता है यह समूहीकृत है, जबकि HAVING
बाद data डेटा फ़िल्टर करता है यह समूहीकृत है।
उदाहरण 1 - HAVING
COUNT()
. के साथ
मान लीजिए हमारे पास निम्न तालिका है:
SELECT * FROM Pets;
परिणाम:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +---------+-------------+-----------+-----------+------------+
हम इस तालिका के विरुद्ध निम्न क्वेरी चला सकते हैं:
SELECT
PetTypeId,
COUNT(PetTypeId) AS Count
FROM Pets
GROUP BY PetTypeId
HAVING COUNT(PetTypeId) > 2
ORDER BY Count DESC;
परिणाम:
+-------------+---------+ | PetTypeId | Count | |-------------+---------| | 3 | 4 | | 2 | 3 | +-------------+---------+
इस मामले में, हमने HAVING
. का उपयोग किया है GROUP BY
. के संयोजन में क्लॉज केवल उन पंक्तियों को वापस करने के लिए खंड जिनमें COUNT(PetTypeId)
. है 2
. से अधिक का . यह COUNT()
. का उपयोग करता है फ़ंक्शन, जो कि अधिकांश प्रमुख RDBMS में उपलब्ध SQL मानक समुच्चय फ़ंक्शन है।
अगर हम HAVING
. को छोड़ देते हैं खंड, हमें एक और परिणाम मिलता है:
SELECT
PetTypeId,
COUNT(PetTypeId) AS Count
FROM Pets
GROUP BY PetTypeId
ORDER BY Count DESC;
परिणाम:
+-------------+---------+ | PetTypeId | Count | |-------------+---------| | 3 | 4 | | 2 | 3 | | 1 | 1 | +-------------+---------+
उदाहरण 2 - HAVING
SUM()
. के साथ
यहाँ एक और उदाहरण है। इस बार हम HAVING
. का उपयोग करते हैं SUM()
. के साथ क्लॉज फ़ंक्शन, जो कि अधिकांश प्रमुख RDBMS में उपलब्ध एक और समग्र कार्य है (देखें SQLite SUM()
दूसरे उदाहरण के लिए)।
SELECT
CountryCode,
District,
SUM(Population) AS Population
FROM City
WHERE CountryCode IN ('AGO', 'ARE', 'AUS')
GROUP BY CountryCode, District
HAVING SUM(Population) > 1000000
ORDER BY CountryCode;
परिणाम:
+---------------+-----------------+--------------+ | CountryCode | District | Population | |---------------+-----------------+--------------| | AGO | Luanda | 2022000 | | AUS | New South Wales | 3993949 | | AUS | Queensland | 1805236 | | AUS | Victoria | 2990711 | | AUS | West Australia | 1096829 | +---------------+-----------------+--------------+
उदाहरण 3 - HAVING
IN
. के साथ संचालिका
आप केवल ) ऑपरेटर फॉर बिगिनर्स तक सीमित नहीं हैं">ऑपरेटर से बड़ा (>
) HAVING
. का उपयोग करते समय खंड। आप उन्हीं ऑपरेटरों का उपयोग कर सकते हैं जिनका उपयोग आप WHERE
. के साथ कर सकते हैं खंड (जैसे =
, ) Operator for Beginners"><
, =) Operator for Beginners">>=
, IN
, LIKE
, आदि)।
यहां एक उदाहरण दिया गया है जो IN
. का उपयोग करता है वापस करने के लिए कुल मूल्यों की एक श्रृंखला निर्दिष्ट करने के लिए ऑपरेटर।
SELECT
CountryCode,
District,
SUM(Population) AS Population
FROM City
WHERE CountryCode IN ('AGO', 'ARE', 'AUS')
GROUP BY CountryCode, District
HAVING SUM(Population) IN (2022000, 3993949, 2990711)
ORDER BY CountryCode;
परिणाम:
+---------------+-----------------+--------------+ | CountryCode | District | Population | |---------------+-----------------+--------------| | AGO | Luanda | 2022000 | | AUS | New South Wales | 3993949 | | AUS | Victoria | 2990711 | +---------------+-----------------+--------------+
उदाहरण 4 - HAVING
बिना GROUP BY
. के खंड
हालांकि HAVING
आमतौर पर GROUP BY
. के साथ प्रयोग किया जाता है खंड, इसका उपयोग इसके बिना भी किया जा सकता है। जब इसके बिना उपयोग किया जाता है, तो एक निहित एकल, समेकित समूह होता है।
आपको मिलने वाले परिणाम आपके डीबीएमएस पर निर्भर हो सकते हैं, लेकिन यहां एक उदाहरण दिया गया है जो SQL सर्वर में किया गया था।
SELECT
SUM(Population) AS Population
FROM City
HAVING SUM(Population) > 2000000;
परिणाम:
+--------------+ | Population | |--------------| | 1429559884 | +--------------+
यह उदाहरण केवल तालिका में सभी शहरों की कुल जनसंख्या देता है।
यदि हम ऑपरेटर से बड़ा स्वैप करते हैं तो यहां क्या होता है (>
) कम से कम ऑपरेटर के साथ (<
)।
SELECT
SUM(Population) AS Population
FROM City
HAVING SUM(Population) < 2000000;
परिणाम:
(0 rows affected)