SQL ayant vs où

SQL ayant vs où
Dans certains cas, vous pouvez rencontrer des cas où vous devez filtrer les enregistrements à partir d'une base de données en utilisant la clause WHERE. Cela vous permet de spécifier une condition spécifique et d'appliquer uniquement les actions définies aux lignes qui correspondent aux conditions.

Un autre cas d'utilisation typique est lorsque vous devez appliquer un filtre à un groupe d'enregistrements en une seule unité. C'est là que la clause. Il est similaire à la clause où mais peut être appliqué à un résultat global.

Quelle est la différence?

Il n'y a qu'une seule différence entre les clauses où et avoir des clauses:

  1. La clause où est appliquée aux lignes individuelles dans un tableau.
  2. D'un autre côté, la clause ayant une clause est appliquée à un groupe de lignes qui répondent à la condition spécifiée. Vous pouvez également utiliser la clause ayant dans une fonction agrégée.

Exemple de clause

Considérez le tableau des employés contenant des données d'échantillons comme prévu dans les déclarations ci-dessous:

Créer des employés de table (
Clé primaire en série ID,
full_name varchar (255),
Email Varchar (255),
Département Varchar (100),
Date start_date,
bool actif,
Catégorie Varchar (50)
));
Insérer dans les employés (full_name, e-mail, département, start_date, actif, catégorie)
VALEURS
('Meghan Edwards', 'Edwards @ Exemple.com ',' Game Development ',' 2016-06-22 ', True,' Dev-G1 '),
('Sam Davis', 'davios @ am.com ',' Game Development ',' 2014-01-04 ', false,' dev-g1 '),
('Taylor Miller', 'Miller @ Tayl.org ',' game Development ',' 2019-10-06 ', true,' dev-g1 '),
('Wilson Smitty', 'Smitty_wilson @ Exemple.net ',' database Developer ',' 2016-12-23 ', True,' Dev-db1 '),
('Barbara Moore', 'Moore @ Mail.à ',' Database Developer ',' 2015-12-23 ', True,' Dev-DB1 '),
('Raj Chan', 'Chan.raj @ courrier.net ',' database Developer ',' 2017-12-23 ', false,' dev-db1 '),
('Susan Brown', 'Brown @ Susan.IO ',' DevOps Engineer ',' 2011-12-23 ', True,' Dev-Ops1 '),
('Marial Anderson', 'Anderson @ Exemple.org ',' DevOps Engineer ',' 2015-12-23 ', True,' Dev-OPS1 '),
('Nancy Thomas', 'Thomas_Nancy @ Exampl.net ',' DevOps Engineer ',' 2014-12-23 ', false,' Dev-OPS1 ');

Nous pouvons utiliser la sélection avec la clause WHERE pour récupérer les lignes où la catégorie est égale à «Dev-OPS-1».

Un exemple d'expression est tel que montré:

SÉLECTIONNER *
Des employés
Où catégories = 'dev-ops1';

La requête ci-dessus est appliquée sur la ligne par ligne et renvoie l'ensemble de résultats comme indiqué:

Avoir un exemple de clause

Comme indiqué, la clause ayant est appliquée sur les agrégats. Par exemple, considérez le tableau avec des exemples de données comme indiqué dans la requête ci-dessous:

Créer une table youtube_stats (
id série,
Channel_id Varchar (50),
VIDEO_ID VARCHAR (50),
vues_count int
));
Insérer dans youtube_stats (channel_id, vidéo_id, vues_count)
VALEURS
('chan1', 'vid1', 100000),
('Chan1', 'vid2', 500000),
('Chan2', 'vid1', 400000),
('Chan2', 'vid2', 1000000),
('Chan3', 'vid1', 800000),
('chan4', 'vid1', 262529);

Nous pouvons utiliser les groupes d'agrégats de clause ayant comme indiqué:

Sélectionner l'ID,
IDENTIFIANT DE LA CHAINE,
Vidéo_id,
Sum (vues_count) comme total_views
De youtube_stats
Groupe par canal_id
Avoir Total_views> = 100000

La requête ci-dessus ne doit retourner que les éléments où la somme est supérieure ou égale à l'état ci-dessus.