SQL har vs hvor

SQL har vs hvor
I noen tilfeller kan du møte tilfeller der du trenger å filtrere poster fra en database ved å bruke WHERE -leddet. Dette lar deg spesifisere en spesifikk tilstand og bare bruke de angitte handlingene på rader som samsvarer med forholdene.

En annen typisk brukssak er når du trenger å bruke et filter på en gruppe poster som en enhet. Det er her å ha klausulen kommer inn. Det ligner på hvor leddet, men kan brukes på et samlet resultat.

Hva er forskjellen?

Det er bare en forskjell mellom hvor og å ha klausuler:

  1. Where -leddet brukes på individuelle rader i en tabell.
  2. På den annen side brukes Have -klausulen på en gruppe rader som oppfyller den spesifiserte tilstanden. Du kan også bruke klausulen i en samlet funksjon.

Hvor klausuleksemplet

Tenk på de ansatte -tabellen som inneholder eksempeldata som angitt i uttalelsene nedenfor:

Lag tabellansatte (
ID Seriell primærnøkkel,
full_name varchar (255),
E -post varchar (255),
Avdeling varchar (100),
start_date dato,
aktiv bool,
Kategori varchar (50)
);
Sett inn i ansatte (full_navn, e -post, avdeling, start_date, aktiv, kategori)
Verdier
('Meghan Edwards', '[email protected] ',' Game Development ',' 2016-06-22 ', True,' Dev-G1 '),
('Sam Davis', '[email protected] ',' Game Development ',' 2014-01-04 ', False,' Dev-G1 '),
('Taylor Miller', '[email protected] ',' Game Development ',' 2019-10-06 ', True,' Dev-G1 '),
('Wilson Smitty', '[email protected] ',' Database Developer ',' 2016-12-23 ', True,' Dev-DB1 '),
('Barbara Moore', '[email protected] ',' Database Developer ',' 2015-12-23 ', True,' DEV-DB1 '),
('Raj Chan', '[email protected] ',' Database Developer ',' 2017-12-23 ', False,' Dev-DB1 '),
('Susan Brown', '[email protected] ',' DevOps Engineer ',' 2011-12-23 ', True,' Dev-ops1 '),
('Marial Anderson', '[email protected] ',' Devops Engineer ',' 2015-12-23 ', True,' Dev-ops1 '),
('Nancy Thomas', '[email protected] ',' DevOps Engineer ',' 2014-12-23 ', False,' Dev-ops1 ');

Vi kan bruke Select med hvor leddet for å hente radene der kategorien tilsvarer 'dev-ops-1'.

Et eksempeluttrykk er som vist:

PLUKKE UT *
Fra ansatte
Hvor kategori = 'dev-ops1';

Spørringen over brukes på rad per radbasis og returnerer resultatsettet som vist:

Har klausuleksempel

Som nevnt blir den å ha klausulen brukt på aggregat. Tenk for eksempel tabellen med prøvedata som vist i spørringen nedenfor:

Lag tabell YouTube_Stats (
ID Serial,
kanal_id varchar (50),
video_id varchar (50),
views_count int
);
Sett inn i youtube_stats (kanal_id, video_id, views_count)
Verdier
('Chan1', 'Vid1', 100000),
('Chan1', 'Vid2', 500000),
('Chan2', 'Vid1', 400000),
('Chan2', 'Vid2', 1000000),
('Chan3', 'Vid1', 800000),
('Chan4', 'Vid1', 262529);

Vi kan bruke klausulens samlede grupper som vist:

Velg ID,
Kanal_id,
Video_id,
Sum (views_count) som total_views
Fra YouTube_Stats
Gruppe av Channel_id
Har total_views> = 100000

Ovennevnte spørring skal bare returnere elementene der summen er større enn eller lik den ovennevnte tilstanden.