Database
 sql >> Baza danych >  >> RDS >> Database

Jak używać klauzuli HAVING w SQL

W tym artykule dowiemy się o koncepcji klauzuli HAVING i jak jej używać w SQL.

Co to jest klauzula HAVING?

W Structured Query Language klauzula HAVING używana z klauzulą ​​GROUP BY określa warunki filtrowania wyników pojawiających się w danych wyjściowych. Zwraca tylko te dane z grupy, które spełniają warunki.

Dzięki klauzuli HAVING możemy użyć klauzuli WHERE również w zapytaniu. Jeśli użyjemy obu klauzul jednocześnie, klauzula WHERE zostanie wykonana jako pierwsza, gdzie będzie filtrować poszczególne wiersze, następnie wiersze zostaną pogrupowane, a na końcu klauzula HAVING filtruje grupy.

Warunki klauzuli HAVING są umieszczane po klauzuli GROUP BY. Klauzula HAVING zachowywała się tak samo jak klauzula WHERE w strukturalnym języku zapytań nie używa klauzuli GROUP BY. Możemy używać funkcji agregujących, takich jak MIN, MAX, SUM, AVG i COUNT. Ta funkcja jest używana tylko z klauzulą ​​SELECT i klauzulą ​​HAVING.

Składnia klauzuli HAVING:

SELECT COLUMNS, AGGREGATE FUNCTION, FROM TABLENAME WHERE CONDITION GROUP BY COLUMN HAVING CONDITIONS; 

Musimy się nauczyć kilku kroków, jak używać klauzuli HAVING w zapytaniu SQL:

1. Utwórz nową bazę danych lub użyj istniejącej bazy danych, wybierając bazę danych za pomocą słowa kluczowego USE, po którym następuje nazwa bazy danych.

2. Utwórz nową tabelę w wybranej bazie danych lub możesz użyć już utworzonej tabeli.

3. Jeśli tabela została utworzona jako nowa, wstaw rekordy w nowo utworzonej bazie danych za pomocą zapytania INSERT i wyświetl wstawione dane za pomocą zapytania SELECT bez klauzuli HAVING.

4. Teraz jesteśmy gotowi do użycia klauzuli HAVING w zapytaniach SQL.

Krok 1:Utwórz nową bazę danych lub użyj już utworzonej bazy danych.

Stworzyłem już bazę danych. Użyję mojej istniejącej nazwy utworzonej bazy danych.

USE SCHOOL;

Szkoła to nazwa bazy danych.

Ci, którzy nie stworzyli bazy danych, wykonaj poniższe zapytanie, aby utworzyć bazę danych:

CREATE DATABASE database_name;

Po utworzeniu bazy danych wybierz bazę danych, używając słowa kluczowego USE, a następnie nazwy bazy danych.

Krok 2:Utwórz nową tabelę lub użyj już istniejącej:

Stworzyłem już tabelę. Użyję istniejącej tabeli o nazwie Student.

Aby utworzyć nowe tabele, postępuj zgodnie z poniższą składnią CREATE TABLE:

CREATE TABLE table_name(

columnname1 datatype(column size),

columnname2 datatype(column size),

columnname3 datatype(column size)

);

Krok 3:wstaw rekordy do nowo utworzonej tabeli za pomocą zapytania INSERT i wyświetl rekordy za pomocą zapytania SELECT.

Użyj poniższej składni, aby wstawić nowe rekordy do tabeli:

INSERT INTO table_name VALUES(value1, value2, value3);

Aby wyświetlić rekordy z tabeli, używając poniższej składni:

SELECT * FROM table_name;

Następujące zapytanie wyświetli rekordy pracowników

SELECT * FROM Student;

Dane wyjściowe powyższego zapytania SELECT to:

STUDENT_ID NAZWISKO UCZNIA PHYSICS_MARKS CHEMISTRY_MARKS MATHS_MARKS TOTAL_MARKS
1 NEHA 85 88 100 273
2 VISHAL 70 90 82 242
3 SAMKEET 75 88 96 259
4 NIKHIL 60 75 80 215
5 JOGESZ 56 65 78 199
6 ANKITA 95 85 96 276
7 SONAM 98 89 100 287
8 WININA 85 90 100 275
9 KOSZULKA 86 78 65 229
10 PRACI 90 80 75 245

Krok 4:Jesteśmy gotowi do użycia klauzuli HAVING w ustrukturyzowanym języku zapytań.

Za pomocą przykładów przyjrzymy się teraz klauzuli HAVING.

Mamy tabelę o nazwie Student, która zawiera następujące rekordy.

STUDENT_ID NAZWISKO UCZNIA PHYSICS_MARKS CHEMISTRY_MARKS MATHS_MARKS TOTAL_MARKS
1 NEHA 85 88 100 273
2 VISHAL 70 90 82 242
3 SAMKEET 75 88 96 259
4 NIKHIL 60 75 80 215
5 JOGESZ 56 65 78 199
6 ANKITA 95 85 96 276
7 SONAM 98 89 100 287
8 WININA 85 90 100 275
9 KOSZULKA 86 78 65 229
10 PRACI 90 80 75 245

Przykład 1: Napisz zapytanie, aby wyświetlić sumę ocen z fizyki, gdy suma ocen z fizyki jest większa niż 60 grup według identyfikatora ucznia.

SELECT STUDENT_ID, STUDENT_NAME, SUM(PHYSICS_MARKS) AS PHYSICS_MARKS FROM STUDENT GROUP BY STUDENT_ID  HAVING SUM(PHYSICS_MARKS) > 60;

W powyższym zapytaniu przyjęliśmy funkcję agregującą o nazwie SUM(), po której następuje nazwa kolumny Physical_marks, która zsumuje kolumnę. Najpierw wykonywane jest polecenie Sum(physics_marks), a na końcu warunek klauzuli HAVING i wyświetlany jest wynik końcowy. Użyliśmy klauzuli GROUP BY, po której następuje nazwa kolumny Student_Id, aby pogrupować te same wartości i uznać je za jedną grupę. Jeśli wartości nie są takie same, nie zostanie utworzona żadna grupa dla wartości. I na koniec użyliśmy klauzuli HAVING, w której postawiliśmy warunek, który pomoże wyświetlić tylko te szczegóły uczniów, których suma ocen z fizyki jest większa niż 60. Jeśli oceny uczniów z fizyki są mniejsze niż 60, nie wyświetli się rekordy.

Wynikiem powyższego zapytania jest:

STUDENT_ID NAZWISKO UCZNIA PHYSICS_MARKS
1 NEHA 85
2 VISHAL 70
3 SAMKEET 75
6 ANKITA 95
7 SONAM 98
8 WININA 85
9 KOSZULKA 86
10 PRACI 90

Jak widać w wynikach, wyświetlane są tylko te identyfikatory, nazwiska i oceny z fizyki uczniów, dla których suma ocen z fizyki jest większa niż 60. Ponieważ użyliśmy klauzuli GROUP BY i żadne wartości nie są podobne, są one liczone jako jedna grupa .

Przykład 2: Napisz zapytanie, aby wyświetlić maksymalne oceny z chemii, gdy maksymalna ocena z chemii jest mniejsza niż 90 grup według identyfikatora ucznia.

SELECT STUDENT_ID, STUDENT_NAME, MAX(CHEMISTRY_MARKS) AS CHEMISTRY_MARKS FROM STUDENT GROUP BY STUDENT_ID  HAVING MAX(CHEMISTRY_MARKS) < 90;  

W powyższym zapytaniu przyjęliśmy funkcję agregującą o nazwie MAX(), po której następuje nazwa kolumny chemistry_marks, która znajdzie maksymalne oznaczenia kolumny. Użyliśmy klauzuli GROUP BY, po której następuje nazwa kolumny Student_Id, aby pogrupować te same wartości i uznać je za jedną grupę. Jeśli wartości nie są takie same, dla wartości zostanie utworzona osobna grupa. I na koniec użyliśmy klauzuli HAVING, w której umieściliśmy warunek, który pomoże wyświetlić tylko te szczegóły uczniów, których maksymalna ocena z chemii jest mniejsza niż 90. Jeśli oceny z chemii uczniów są większe niż 90, nie będzie wyświetlić rekordy. Najpierw zostanie wykonane MAX(chemistry_marks), następnie warunek klauzuli HAVING zostanie wykonany na końcu i wyświetlony zostanie wynik końcowy. Wynikiem powyższego zapytania jest:

STUDENT_ID NAZWISKO UCZNIA CHEMISTRY_MARKS
1 NEHA 88
3 SAMKEET 88
4 NIKHIL 75
5 JOGESZ 65
6 ANKITA 85
7 SONAM 89
9 KOSZULKA 78
10 PRACI 80

Jak widać w danych wyjściowych, wyświetlane są tylko te legitymacje, nazwiska i oceny z chemii uczniów, dla których maksymalna ocena z chemii jest mniejsza niż 90. Ponieważ użyliśmy klauzuli GROUP BY i żadne wartości nie są podobne, są one liczone jako pojedyncze grupa.

Przykład 3: Napisz zapytanie, aby wyświetlić oceny z matematyki, w których minimalna ocena z matematyki jest większa niż 70 grup według identyfikatora ucznia.

SELECT STUDENT_ID, STUDENT_NAME, MIN(MATHS_MARKS) AS MATHS_MARKS FROM STUDENT GROUP BY STUDENT_ID  HAVING MIN(MATHS_MARKS) >70;

W powyższym zapytaniu przyjęliśmy funkcję agregującą o nazwie MIN(), po której następuje nazwa kolumny maths_marks, która znajdzie minimalne znaczniki kolumny. Użyliśmy klauzuli GROUP BY, po której następuje nazwa kolumny Student_Id, aby pogrupować te same wartości i uznać je za jedną grupę. Jeśli wartości nie są takie same, dla wartości zostanie utworzona osobna grupa. I na koniec użyliśmy klauzuli HAVING, w której postawiliśmy warunek, który pomoże wyświetlić tylko te szczegóły uczniów, w których minimalna ocena z matematyki jest większa niż 70. Jeśli oceny z matematyki Studenta są mniejsze niż 70, nie będzie wyświetlić rekordy. Najpierw wykonywane jest MIN(maths_marks), następnie warunek klauzuli HAVING jest wykonywany na końcu i wyświetlany jest wynik końcowy.

Wynikiem powyższego zapytania jest:

STUDENT_ID NAZWISKO UCZNIA MATHS_MARKS
1 NEHA 100
2 VISHAL 82
3 SAMKEET 96
4 NIKHIL 80
5 JOGESZ 78
6 ANKITA 96
7 SONAM 100
8 WININA 100
10 PRACI 75

Jak widać w danych wyjściowych, wyświetlane są tylko te identyfikatory, nazwiska i znaki matematyczne uczniów, dla których minimalna ocena z matematyki jest większa niż 70. Ponieważ użyliśmy klauzuli GROUP BY i żadne wartości nie są podobne, są one liczone jako pojedyncze grupa.

Przykład 4: Napisz zapytanie, aby wyświetlić szczegóły uczniów, w których minimalna ocena z fizyki jest większa niż 56, ORAZ maksymalna ocena z matematyki jest mniejsza niż 98.

SELECT STUDENT_ID, STUDENT_NAME, MIN(PHYSICS_MARKS) AS PHYSICS_MARKS , MAX(MATHS_MARKS) AS MATHS_MARKS FROM STUDENT GROUP BY STUDENT_ID HAVING MIN(PHYSICS_MARKS) >58 AND MAX(MATHS_MARKS)<98;

Użyliśmy funkcji podwójnej agregacji w pojedynczym zapytaniu min() i max() w powyższym zapytaniu. Min() służy do znalezienia minimalnych ocen z fizyki, a Max() służy do znalezienia maksymalnych ocen matematycznych. Najpierw zapytanie znajdzie znaki min() i max() z fizyki i matematyki z tabeli uczniów. Ponieważ użyliśmy klauzuli GROUP BY, więc podobne wartości są mapowane jako jedna grupa, w przeciwnym razie wartości będą tak samo oddzielone. Ponieważ w tabeli nie ma podobnych wartości, wszystkie wartości zostały rozdzielone. Żadne wartości nie będą mapowane jako jedna grupa. Następnie użyliśmy klauzuli HAVING, która działa jako różnica klauzuli WHERE tylko klauzula HAVING mapowana do grupy. Po pierwsze, warunek to MIN(PHYSICS_MARKS)> 58. Ponieważ żadne wartości nie są podobne, każda wartość będzie traktowana jako wartość minimalna i porównana z warunkiem, to samo podejście jest stosowane dla MAX(MATHS_MARKS). Ponieważ w zapytaniu użyliśmy operatora AND, warunki te spełniają oba warunki. Tylko rekordy tych uczniów są wyświetlane w ostatecznym wyniku.

Wynikiem powyższego zapytania jest:

STUDENT_ID NAZWISKO UCZNIA PHYSICS_MARKS MATHS_MARKS
2 VISHAL 70 82
3 SAMKEET 75 96
4 NIKHIL 60 80
6 ANKITA 95 96
9 KOSZULKA 86 65
10 PRACI 90 75

Jak widać na wyjściu, wyświetlane są tylko te rekordy uczniów, w których minimalne oceny z wartości fizycznych są większe niż 56, ORAZ maksymalne oceny matematyczne są mniejsze niż 98.

W powyższym przykładzie, jeśli zostanie użyty operator OR zamiast operatora AND, to wszystkie dziesięć rekordów zostanie wyświetlonych, ponieważ operator OR mówi, że jeśli jeden warunek nie powiedzie się, a inne są spełnione, to rekordy tabeli spełniają warunki.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Polecenie T-SQL do rzeczy

  2. Tworzenie modelu danych do wspólnych przejazdów

  3. Jak działa logowanie na połączonych serwerach (przykłady T-SQL)

  4. Skuteczna obsługa wartości NULL za pomocą funkcji SQL COALESCE dla początkujących

  5. Jak uzyskać miesiąc z daty w T-SQL?