Sahip (SQL) - Having (SQL)
Bir HAVINGde fıkra SQL belirttiği bir SQL olduğunu SELECTagrega değerleri belirtilen buluştuğu deyimi satırları dönmelidir koşulları .
HAVINGve WHEREgenellikle yeni başlayanlar tarafından karıştırılır, ancak farklı amaçlara hizmet ederler. WHEREtablolardan okunan satırları filtreleyerek sorgu yürütmenin daha önceki bir aşamasında dikkate alınır. Bir sorgu içeriyorsa GROUP BY, tablolardaki satırlar gruplandırılır ve toplanır. Toplama işlemi HAVINGuygulandıktan sonra, belirtilen koşullara uymayan satırlar filtrelenir. Bu nedenle, WHEREtablolardan okunan verilere uygulanır ve HAVINGyalnızca sorgunun ilk aşamasında bilinmeyen toplu verilere uygulanmalıdır.
Tarafından oluşturulan mevcut durumunu görüntülemek için GROUP BYmadde, HAVINGmaddesi kullanılır.
Örnekler
1 Ocak 2000 tarihinde toplam satışları 1000 ABD Dolarını aşan departman kimliklerinin ve o tarihteki satışlarının toplamının listesini döndürmek için:
SELECT DeptID, SUM(SaleAmount)
FROM Sales
WHERE SaleDate = '01-Jan-2000'
GROUP BY DeptID
HAVING SUM(SaleAmount) > 1000
Join örneğindeki örnek tablolara atıfta bulunularak , aşağıdaki sorgu 1'den fazla çalışanı olan departmanların listesini döndürür:
SELECT DepartmentName, COUNT(*)
FROM Employee
JOIN Department ON Employee.DepartmentID = Department.DepartmentID
GROUP BY DepartmentName
HAVING COUNT(*)>1;
HAVINGuygundur, ancak gerekli değildir. Yukarıdaki örneğe eşdeğer, ancak kullanmadan kod HAVINGşöyle görünebilir:
SELECT * FROM (
SELECT DepartmentName AS deptNam, COUNT(*) AS empCnt
FROM Employee AS emp
JOIN Department AS dept ON emp.DepartmentID = dept.DepartmentID
GROUP BY deptNam
) AS grp
WHERE grp.empCnt > 1;