SQL jest standardowym językiem do pracy z relacyjnymi bazami danych. Ma w swoim arsenale wiele potężnych narzędzi do manipulowania danymi przechowywanymi w formie tabel.
Niewątpliwie możliwość grupowania danych za pomocąich pobieranie próbek według pewnej cechy jest jednym z takich narzędzi. Instrukcja SQL HAVING, wraz z klauzulą WHERE, pozwala zdefiniować warunki próbkowania dla danych już pogrupowanych w jakiś sposób.
Przede wszystkim należy zauważyć, że ten parametrjest opcjonalne i jest używane wyłącznie w połączeniu z parametrem GROUP BY. Jak pamiętacie, GROUP BY jest używany, gdy SELECT używa funkcji agregujących, a wyniki ich obliczeń muszą być uzyskane przez pewne grupy. Jeśli GDZIE pozwala ustawić warunki dla selekcji przed grupowaniem danych, HAVING zawiera warunki odnoszące się do danych już w samych grupach. Dla lepszego zrozumienia przyjrzyjmy się przykładowi z diagramem pokazanym na poniższym rysunku.
Jest to świetny przykład, dając HAVING opis SQL. Tabela zawiera listę nazw produktów, firm, które je produkują, oraz kilka innych pól. W kwerendzie w prawym górnym rogu próbujemy uzyskać informacje o tym, ile nazw produktów produkuje każda firma, podczas gdy chcemy produkować tylko te firmy, które produkują więcej niż 2 tytuły. Parametr GROUP BY utworzył trzy grupy odpowiadające nazwom firm, dla których obliczono liczbę produktów (wierszy). Ale parametr HAVING według jego stanu odcina jedną grupę z wynikowej próbki, ponieważ nie spełnia warunku. W rezultacie otrzymujemy dwie grupy, odpowiadające firmom z liczbą produktów 5 i 3.
Może pojawić się pytanie, dlaczego warto skorzystać z tej funkcjiPOSIADAJĄC, jeśli istnieje WHERE w SQL. Jeśli użyjemy GDZIE, to będzie to wyglądać na całkowitą liczbę wierszy w tabeli, a nie w grupach, a warunek nie ma sensu w tym przypadku. Często jednak doskonale współistnieją w jednym wniosku.
W powyższym przykładzie widzimy najpierw, jakistnieje zbiór danych dotyczących nazw pracowników określonych w parametrze WHERE, a następnie zgrupowany wynik GROUP BY przekazuje dodatkową kontrolę wysokości wynagrodzenia dla każdego pracownika.
Rozważmy niektóre funkcje składniPOSIADAJĄC SQL. Opis tego parametru jest dość prosty. Po pierwsze, jak już wspomniano, jest on używany wyłącznie w połączeniu z parametrem GROUP BY i jest określany bezpośrednio po nim i przed ORDER BY, jeśli jest taki w zapytaniu. Jest to zrozumiałe, ponieważ HAVING definiuje warunki dla już pogrupowanych danych. Po drugie, w warunku tego parametru można używać tylko zagregowanych funkcji i pól określonych w parametrze GROUP BY. Wszystkie warunki w tym parametrze są określone dokładnie w taki sam sposób, jak w przypadku WHERE.
Jak widać, nic w tym operatorze nie jest skomplikowanenie. Semantycznie używa się go w taki sam sposób jak GDZIE. Ważne jest, aby zrozumieć, że WHERE jest używane w odniesieniu do wszystkich wybieralnych danych, a HAVING jest tylko względne w stosunku do grup zdefiniowanych w parametrze GROUP BY. Przedstawiliśmy wyczerpujący opis HAVING SQL, który wystarczy do pewnej pracy z nim.
</ p>