Klauzule WHERE i HAVING zostały szczegółowo omówione w tym artykule. Służą także do filtrowania rekordów w zapytaniach SQL. Najczęstsze pytanie zadawane podczas rozmowy kwalifikacyjnej to różnica pomiędzy klauzulą WHERE i HAVING. Główna różnica między nimi polega na tym, że klauzula WHERE służy do określenia warunku filtrowania rekordów przed dokonaniem grupowania, natomiast klauzula HAVING służy do określenia warunku filtrowania wartości z grupy. Zanim dokonamy porównania, najpierw je poznamy SQL-a klauzule.
GDZIE Klauzula
Klauzula WHERE w MySQL jest używana z SELECT, WSTAWIĆ , AKTUALIZACJA , I USUWAĆ zapytania do filtrowania danych z tabeli lub relacji. Opisuje specyficzny warunek podczas pobierania rekordów z pojedynczej tabeli lub wielu tabel przy użyciu klauzuli JOIN. Jeśli określony warunek jest spełniony, zwraca określoną wartość z tabeli. Klauzula WHERE umieszcza warunki na wybranych kolumnach.
Klauzula WHERE w MySQL może również zaimplementuj łączniki logiczne ORAZ, LUB i NIE. Są one znane jako warunek boolowski, który musi być PRAWDA aby odzyskać dane. Wyrażenia logiczne łączące używają operatorów porównania jako swoich operandów<, ,>=, = i . Operatory porównania są zwykle używane do porównywania ciągów i wyrażeń arytmetycznych.,>
Poniższa składnia ilustruje użycie klauzuli WHERE:
np. średnia
SELECT column_lists, FROM table_name WHERE conditions GROUP BY column_lists;
Weźmy przykład, aby zrozumieć tę klauzulę. Załóżmy, że mamy tabelę o nazwie pracownicy które zawierają następujące dane:
rodzaje testowania oprogramowania
Jeśli chcemy aby uzyskać szczegółowe informacje o pracowniku, którego godziny pracy są większe niż 9 , to możemy użyć następującego wyrażenia:
mysql> SELECT * FROM employees WHERE working_hour > 9;
Otrzymamy poniższe dane wyjściowe, w których możemy zobaczyć szczegóły pracownika, którego godziny pracy są większe niż 9:
Jeśli użyjemy powyższego zapytania z GRUPUJ WEDŁUG klauzuli, otrzymamy inny wynik:
mysql> SELECT * FROM employees WHERE working_hour > 9 GROUP BY name;
Oto dane wyjściowe:
POSIADAJĄC klauzulę
Klauzula HAVING w MySQL używane w połączeniu z GROUP BY Klauzula umożliwia nam określenie warunków filtrujących, które wyniki grupowe pojawią się w wyniku. Zwraca tylko te wartości z grup w wyniku końcowym, które spełniają określone warunki. Podczas selekcji możemy także użyć razem klauzul WHERE i HAVING. W tym przypadku klauzula WHERE najpierw filtruje poszczególne wiersze, następnie wiersze są grupowane, wykonuje obliczenia zbiorcze, a na koniec klauzula HAVING filtruje grupy.
Ta klauzula nakłada warunki na grupy utworzone za pomocą klauzuli GROUP BY. Zachowuje się jak klauzula WHERE, gdy instrukcja SQL nie używa słowa kluczowego GROUP BY. Możemy używać funkcji agregujących (grupowych), takich jak SUM, MIN, MAX, AVG i LICZYĆ tylko z dwiema klauzulami: SELECT i HAVING.
Poniższa składnia ilustruje użycie klauzuli HAVING:
emoji iPhone'a na telefonie z Androidem
SELECT column_lists, aggregate_function (expression) FROM table_name WHERE conditions GROUP BY column_lists HAVING condition;
Weźmy przykład, aby zrozumieć tę klauzulę. Tutaj rozważamy tę samą tabelę pracownicy do demonstracji.
Java dla typów pętli
Jeśli chcemy aby uzyskać łączny czas pracy każdego pracownika, którego wymiar czasu pracy przekracza 6 godzin , to możemy użyć następującego wyrażenia:
mysql> SELECT name, SUM(working_hour) AS 'Total working hours' FROM employees GROUP BY name HAVING SUM(working_hour) > 6;
Otrzymamy poniższe dane wyjściowe, w których możemy zobaczyć łączny czas pracy każdego pracownika:
Kluczowe różnice między klauzulą WHERE i HAVING
Poniższe punkty wyjaśniają główne różnice między bazą danych a schematem:
- Klauzula WHERE filtruje pojedyncze wiersze, natomiast klauzula HAVING filtruje grupy, a nie pojedynczy wiersz.
- Nie możemy używać klauzuli WHERE z funkcjami agregującymi, ponieważ działa ona przy filtrowaniu pojedynczych wierszy. Natomiast HAVING może współpracować z funkcjami agregującymi, ponieważ służy do filtrowania grup.
- Operacje na wierszach są obsługiwane przez klauzulę WHERE, natomiast klauzula HAVING obsługuje operacje na kolumnach na podsumowanych wierszach lub grupach.
- WHERE występuje przed GROUP BY, co oznacza, że klauzula WHERE filtruje wiersze przed wykonaniem obliczeń zbiorczych. HAVING następuje po GROUP BY, co oznacza, że klauzula HAVING filtruje wiersze po wykonaniu obliczeń zagregowanych. W związku z tym HAVING jest wolniejszy niż WHERE pod względem wydajności i należy go unikać, jeśli to możliwe.
- Możemy połączyć klauzule WHERE i HAVING w zapytaniu SELECT. W tym przypadku do filtrowania poszczególnych wierszy używana jest najpierw klauzula WHERE. Następnie wiersze są grupowane, przeprowadzane są obliczenia zbiorcze, a na koniec do filtrowania grup używana jest klauzula HAVING.
- Klauzula WHERE pobiera żądane dane na podstawie określonego warunku. Z drugiej strony klauzula HAVING najpierw pobiera całe dane, a następnie następuje separacja na podstawie określonego warunku.
- Bez instrukcji SELECT nie możemy użyć klauzuli HAVING. I odwrotnie, możemy używać WHERE z instrukcjami SELECT, UPDATE i DELETE.
- Klauzula WHERE jest filtrem wstępnym, natomiast klauzula HAVING jest filtrem końcowym.
GDZIE i MIEĆ tabela porównawcza
Poniższa tabela porównawcza wyjaśnia w szybki sposób ich główne różnice:
Podstawa porównania | GDZIE Klauzula | POSIADAJĄC klauzulę |
---|---|---|
Definicja | Służy do przeprowadzenia filtracji na poszczególnych wierszach. | Służy do przeprowadzania filtracji po grupach. |
Podstawowy | Jest zaimplementowany w operacjach na wierszach. | Jest zaimplementowany w operacjach kolumnowych. |
Pobieranie danych | Klauzula WHERE pobiera określone dane z poszczególnych wierszy na podstawie określonego warunku | Klauzula HAVING najpierw pobiera pełne dane. Następnie rozdziela je według zadanego warunku. |
Funkcje agregujące | Klauzula WHERE nie pozwala na pracę z funkcjami agregującymi. | Klauzula HAVING może współpracować z funkcjami agregującymi. |
Zachowuje się jak | Klauzula WHERE działa jak filtr wstępny. | Klauzula HAVING działa jak filtr końcowy. |
Używany z | Klauzuli WHERE możemy używać z instrukcjami SELECT, UPDATE i DELETE. | Klauzuli HAVING można używać tylko z instrukcją SELECT. |
GRUPUJ WEDŁUG | Klauzula GROUP BY występuje po klauzuli WHERE. | Klauzula GROUP BY występuje przed klauzulą HAVING. |
Wniosek
W tym artykule dokonaliśmy porównania klauzul WHERE i HAVING. Tutaj dochodzimy do wniosku, że obie klauzule działają w ten sam sposób przy filtrowaniu danych, z tą różnicą, że dodatkowa funkcja zwiększa popularność klauzuli HAVING. Możemy efektywnie pracować z funkcjami agregującymi w klauzuli HAVING, podczas gdy WHERE nie pozwala na funkcje agregujące.