W SQL klauzule w zapytaniu typu SELECT pełnią różne role na różnych etapach przetwarzania danych. Kluczowe jest rozróżnienie filtrowania wierszy od filtrowania grup.
Odpowiedź poprawna: "Filtruje wyniki zapytania po grupowaniu."
Klauzula HAVING działa po utworzeniu grup przez GROUP BY. Jest używana wtedy, gdy chcemy nałożyć warunek na wynik agregacji (np. liczebność grupy, suma wartości, średnia). Przykładowo: wyświetl tylko te kategorie, dla których COUNT rekordów jest większy od określonej wartości.
Dlaczego pozostałe odpowiedzi są błędne?
- "Filtruje wyniki zapytania przed grupowaniem." – to opis klauzuli WHERE. WHERE ogranicza wiersze wejściowe jeszcze zanim zostaną pogrupowane i zanim policzone zostaną agregaty. Nie służy do warunków na agregatach dla całych grup.
- "Sortuje wyniki zapytania według jednej lub więcej kolumn." – sortowanie realizuje klauzula ORDER BY. HAVING nie wpływa na kolejność wyników, tylko na to, które grupy zostaną w ogóle zwrócone.
- "Łączy dwie tabele na podstawie wspólnej kolumny." – łączenie tabel realizuje JOIN (np. INNER JOIN, LEFT JOIN). HAVING nie łączy tabel, jedynie filtruje już zbudowany wynik (po ewentualnych JOIN) na poziomie grup.
Wskazówka egzaminacyjna: jeśli warunek dotyczy pojedynczych rekordów (np. data, status, miasto) – zwykle użyjesz WHERE. Jeśli warunek dotyczy agregacji (np. liczba zamówień, suma kwot, średnia ocen) – zwykle potrzebujesz GROUP BY oraz HAVING.