Différence entre HAVING et WHERE

Les clauses WHERE et HAVING sont principalement utilisées dans des requêtes SQL, elles permettent de limiter une résultat en utilisant un prédicat spécifique. La principale différence entre WHERE et HAVING est que la clause WHERE spécifie les conditions de sélection des tuples (lignes) dans les tables, y compris les conditions de jointure si nécessaire. En revanche, la clause HAVING spécifie une condition sur les groupes sélectionnés plutôt que sur des tuples individuels.

SQL signifie Structured Query Language; c’est un langage de base de données complet ou déclaratif utilisé pour accéder aux données des bases de données.

 

 

Table de comparaison
WHEREHAVING
ImplémentationImplémenté dans les opérations de ligne.Implémenté dans les opérations de colonne.
Fonctions d’agrégat(MAX(), MIN(), AVG() …)Ne peut pas apparaître dans la clause WHERE.Peut apparaître dans la clause HAVING.
Utilisé avecSELECT et d’autres instructions telles que UPDATE, DELETEUtilisé que avec l’instruction SELECT.
Fonctionne commePré-filtrePost-filtre
GROUP BYVient après WHERE.Vient avant HAVING.
Récupération de donnéesIl récupère uniquement les données d’une ligne particulière en fonction d’une condition.Au début, les données complètes sont récupérées puis il en sépare en fonction de la condition.
Différence entre trigger et procédure stockéeDifférence entre trigger et procédure stockéeQuelle est la différence entre trigger et procédure stockée ? – trigger et procédure stockée sont des composants avancé de SQL. Les deux exécutent une…Lire plus

 

Définition de la clause WHERE

La clause WHERE de SQL est utilisée pour décrire une condition au moment de la récupération des données à partir d’une seule table ou en joignant plusieurs tables. Il ne renvoie que la valeur particulière de la table si la condition donnée est remplie. La clause WHERE est utilisée pour imprégner les enregistrements et extraire uniquement les enregistrements nécessaires.

Prenons un exemple. Le tableau ci-dessous nommé « Employé » se compose des attributs « Nom« , « Prénom » et « Salaire« .

Différence entre HAVING et WHERE

 

La requête suivante doit être écrite pour calculer le salaire total de Bob et Ali.

SELECT Prenom, SUM(Salaire) AS Salaire_Total
FROM Employee
WHERE Prenom in ('Bob', 'Ali')
GROUP BY Prenom;
Différence entre HAVING et WHERE

 

La sortie suivante est la sortie résultante où les lignes sont filtrées en premier, les lignes de Ali et de Bob sont extraites, puis la fonction d’agrégation est exécutée.

Questions techniques sur MYSQLQuestions techniques sur MYSQL – Partie 1Nous avons divisé cette collection de questions techniques sur MYSQL sous sept chapitres là, c’est la premiere, puis vous trouverez la deuxième partie, la troisième…Lire plus
Définition de la clause HAVING

SQL fournit la clause HAVING qui peut être utilisée conjointement avec la clause GROUP BY. La clause HAVING aide à récupérer les valeurs pour les groupes qui remplissent certaines conditions. La clause WHERE peut également être utilisée avec la clause HAVING lors de la sélection, la clause WHERE filtre une ligne individuellement. Les lignes sont ensuite regroupées et le calcul d’agrégat sera effectué.

Il se comporte comme WHERE lorsque le mot-clé GROUP BY n’est pas utilisé. Les fonctions de groupe telles que min, max, avg, sum et count ne peuvent apparaître que dans deux clauses: SELECT et HAVING. Il fournit une condition sur les tuples correspondant à chaque valeur du groupe d’attributs. Le seul ensemble d’enregistrements satisfaisant à la condition sera affiché comme résultat.

Nous prenons le même exemple que la clause WHERE et considérons la même table « Employé« . Lorsque nous voulons calculer le salaire total de Bob et Ali à l’aide de la clause HAVING, nous allons écrire la requête suivante.

SELECT Prenom, SUM(Salaire) AS Salaire_Total
FROM Employee
GROUP BY Prenom
HAVING Prenom in ('Bob', 'Ali');

La requête génère la sortie suivante dans laquelle les prénoms sont extraits en premier, puis la fonction d’agrégat (somme) est exécutée et, au final, les groupes sont filtrés contrairement à la clause WHERE.

Différence entre HAVING et WHERE
QCM Oracle - Bases de données et instancesQCM Bases de données Oracle – Architecture d’oracle 11gVous souhaitez faire évoluer votre carrière vers Architecte ? Ici, nous vous offrons toutes les QCMs avec le corrigé. Diverses entreprises de premier plan offrent…Lire plus

 

Différences clés entre la clause HAVING et WHERE
  • La clause WHERE est utilisée dans les opérations de ligne et appliquée sur une seule ligne, tandis que la clause HAVING est utilisée dans les opérations de colonne et peut être appliquée aux lignes ou aux groupes résumés.
  • Dans la clause WHERE, les données souhaitées sont extraites en fonction de la condition appliquée. En revanche, la clause HAVING récupère des données entières, puis la séparation est effectuée en fonction de la condition.
  • Les fonctions d’agrégation telles que min, sum, max, avg ne peuvent jamais apparaître avec la clause WHERE. Par contre, ces fonctions peuvent apparaître dans la clause HAVING.
  • La clause HAVING ne peut pas être utilisée sans l’instruction SELECT. Inversement, WHERE peut être utilisé avec SELECT, UPDATE, DELETE, etc.
  • La clause WHERE se comporte comme un pré-filtre tandis que la clause HAVING agit comme un post-filtre.
  • La clause WHERE, lorsqu’elle est utilisée avec GROUP BY, est placé avant GROUP BY. Cela signifie que WHERE filtre les lignes avant que les calculs d’agrégation ne soient effectués. Tandis que, HAVING vient après GROUP BY, ce qui signifie qu’il filtre une fois les calculs d’agrégat effectués.
Différence entre JDBC et ODBCDifférence entre JDBC et ODBCQuelle est la différence entre JDBC et ODBC ? – JDBC et ODBC sont des APIs (Application Programming Interface) qui aident les applications côté client…Lire plus
Conclusion

La clause WHERE et HAVING fonctionne de la même manière, juste, La clause HAVING peut fonctionner efficacement avec les fonctions d’agrégation alors que WHERE ne peut pas être exploité avec les fonctions d’agrégat.
 
 

Partagez cet article

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *