Zalecane, 2019

Wybór Redakcji

Różnica między Where and Having Clause w SQL

WHERE i HAVING są używane głównie w deklaracji zapytań SQL, dzięki czemu możemy ograniczyć połączenie w relacji wyniku poprzez użycie określonego predykatu. Główną różnicą między WHERE i HAVING jest to, że klauzula WHERE określa warunki wyboru krotek (wierszy) z relacji, w tym warunków łączenia, jeśli to konieczne. Z drugiej strony, klauzula HAVING określa warunek na wybranych grupach, a nie na poszczególnych krotkach.

SQL oznacza Structured Query Language ; jest to obszerny lub deklaratywny język bazy danych służący do uzyskiwania dostępu do danych z baz danych.

Wykres porównania

Podstawa do porównaniaGDZIEMAJĄCY
PodstawowyWdrożono w operacjach na wierszach.Wdrożony w operacjach kolumnowych.
DotyczyJeden rządPodsumowany rząd lub grupy.
Pobieranie danychPobiera tylko określone dane z poszczególnych wierszy zgodnie z warunkiem.Na początku kompletne dane są pobierane, a następnie rozdzielane zgodnie z warunkiem.
Funkcje agregująceNie można wyświetlić w klauzuli WHERE.Może pojawić się w klauzuli HAVING.
Używany zSELECT i inne instrukcje, takie jak UPDATE, DELETE lub jeden z nich.Nie można go używać bez instrukcji SELECT.
Zachowuje się jakFiltr wstępnyPo filtrze
GRUPUJ WEDŁUGPrzychodzi po GDZIE.Występuje po HAVING.

Definicja Where Clause

Klauzula WHERE SQL jest używana do opisania warunku w czasie pobierania danych z pojedynczej tabeli lub łączenia z wieloma tabelami. Zwraca ona tylko określoną wartość z tabeli, jeśli dany warunek jest spełniony. Klauzula WHERE służy do przenikania rekordów i pobierania tylko niezbędnych rekordów.

SQL implementuje również logiczne połączenia i ( lub) nie w klauzuli WHERE, które są również znane jako warunek boolowski ; warunek musi być prawdziwy, aby pobrać krotki. Operandy logicznych wyrażeń connectives obejmują operatory porównania, takie jak <, <=, >, > =, = i . Operatory porównania porównują łańcuchy znaków i wyrażenia arytmetyczne. Może być używany w instrukcji SELECT, a także w instrukcjach UPDATE, DELETE .

Weźmy przykład. Poniższa tabela określona jako tabela " Sprzedaż " składa się z atrybutów " Produkt " i " Wartość zamówienia ".

Poniższe zapytanie należy zapisać, aby obliczyć wartość Total_sale telefonu i głośników.

 WYBIERZ Produkt, suma (ilość_sprzedaży) AS Całkowita_sprzedaż ze sprzedaży GDZIE Produkt w ("Telefon", "Głośniki") GROUP BY Produkt; 

Po wynikach wyjściowych powstaje wynik, w którym wiersze są najpierw filtrowane, a wiersze telefonu i głośnika są pobierane, a następnie wykonywana jest funkcja agregująca.

Definicja posiadanej klauzuli

SQL udostępnia klauzulę HAVING, która może być używana w połączeniu z klauzulą GROUP BY . Ta klauzula HAVING pomaga w pobieraniu wartości dla grup, które spełniają określone warunki. WHERE klauzula może również używać w połączeniu z klauzulą ​​HAVING podczas selekcji, klauzula WHERE filtruje pojedynczy wiersz. Wiersze są następnie grupowane i wykonywane są obliczenia agregacji, na końcu klauzula HAVING filtruje grupy.

Zachowuje się tak samo jak WHERE, gdy słowo kluczowe GROUP BY nie jest używane. Funkcje grupy takie jak min, max, avg, suma i count mogą pojawiać się tylko w dwóch klauzulach: SELECT i HAVING. Zapewnia warunek dotyczący krotek odpowiadających każdej wartości w grupie atrybutów. W wyniku zostanie wyświetlony tylko zestaw rekordów spełniających warunek.

Tutaj również przyjmujemy ten sam przykład, co klauzula WHERE i biorąc pod uwagę tę samą tabelę " Sprzedaż ". Kiedy chcemy obliczyć Total_sales telefonu i głośników za pomocą klauzuli HAVING, napiszemy następujące zapytanie.

 SELECT Produkt, suma (ilość_sprzedaży) AS Całkowita_sprzedaż Z grupy sprzedaży według produktu POSIADAJĄC Produkt w ("telefon", "Głośniki"); 

Kwerenda generuje następujące dane wyjściowe, w których produkty są pobierane jako pierwsze, a następnie funkcja agregująca (suma) jest wykonywana, a na końcu grupy są filtrowane w przeciwieństwie do klauzuli WHERE.

Kiedy chcemy znaleźć tylko te produkty, w których Total_sales jest większe niż 1000. Zapytanie można zapisać jako:

 SELECT Produkt, suma (ilość_sprzedaży) AS Całkowita_sprzedaż Z grupy sprzedaży według produktu MAJĄCĄ sumę (wartość_sprzeday)> 1000; 

Wytworzona produkcja to:

Nie można tego zrobić przy użyciu klauzuli WHERE pomimo HAVING i generuje komunikat o błędzie, ponieważ klauzula WHERE nie może być używana z funkcjami agregującymi.

Kluczowe różnice między klauzulami Where and Having

  1. WHERE klauzula jest używana w operacjach wiersza i stosowana w jednym wierszu, podczas gdy klauzula HAVING jest używana w operacjach kolumnowych i może być stosowana do podsumowanych wierszy lub grup.
  2. W klauzuli WHERE żądane dane są pobierane zgodnie z zastosowanym warunkiem. Natomiast klauzula HAVING pobiera całe dane, a separacja odbywa się zgodnie z warunkiem.
  3. Funkcje agregujące takie jak min, sum, max, avg nigdy nie mogą pojawić się razem z klauzulą ​​WHERE. W przeciwieństwie do tego, funkcje te mogą pojawić się w klauzuli HAVING.
  4. Klauzula HAVING nie może być używana bez instrukcji SELECT. Odwrotnie, WHERE może być używane z SELECT, UPDATE, DELETE itp.
  5. WHERE klauzula zachowuje się jak filtr wstępny, a klauzula HAVING działa jako filtr końcowy.
  6. Klauzula WHERE używana w GROUP BY pojawia się przed GROUP BY. Oznacza to, że WHERE wierszy filtrów przed obliczeniami zbiorczymi są wykonywane. Z drugiej strony HAVING następuje po GROUP BY, co oznacza, że ​​filtry są wykonywane po wykonaniu obliczeń agregacyjnych.

Wniosek

GDZIE i klauzula HAVING działa w taki sam sposób, z wyjątkiem dodatkowej funkcji, która jest popularna dla klauzuli HAVING. Klauzula HAVING może efektywnie pracować z funkcjami agregującymi, a WHERE nie może działać z funkcjami zagregowanymi.

Top