Les clauses WHERE et HAVING sont abordées en profondeur dans cet article. Ils sont également utilisés pour filtrer les enregistrements dans les requêtes SQL. La différence entre les clauses WHERE et HAVING est la question la plus fréquemment posée lors d'un entretien. La principale différence entre eux est que la clause WHERE est utilisée pour spécifier une condition de filtrage des enregistrements avant tout regroupement, tandis que la clause HAVING est utilisée pour spécifier une condition de filtrage des valeurs d'un groupe. Avant de faire la comparaison, nous allons d'abord connaître ces SQL clauses.
Clause OÙ
La clause WHERE dans MySQL est utilisée avec SELECT , INSÉRER , MISE À JOUR , et SUPPRIMER requêtes pour filtrer les données de la table ou de la relation. Il décrit une condition spécifique lors de la récupération d'enregistrements d'une seule table ou de plusieurs tables à l'aide de la clause JOIN. Si la condition spécifiée est satisfaite, il renvoie la valeur particulière de la table. La clause WHERE place des conditions sur les colonnes sélectionnées.
La clause WHERE dans MySQL peut également mettre en œuvre les connecteurs logiques ET , OU et NON. Elles sont connues sous le nom de condition booléenne qui doit être vrai pour récupérer les données. Les expressions de connecteurs logiques utilisent les opérateurs de comparaison comme opérandes comme<, ,>=, = et . Les opérateurs de comparaison sont généralement utilisés pour comparer des chaînes et des expressions arithmétiques.,>
La syntaxe suivante illustre l'utilisation de la clause WHERE :
tri par insertion java
SELECT column_lists, FROM table_name WHERE conditions GROUP BY column_lists;
Prenons un exemple pour comprendre cette clause. Supposons que nous ayons une table nommée employés qui contiennent les données suivantes :
tutoriel c#
Si nous voulons pour obtenir le détail des employés dont les heures de travail sont supérieures à 9 , alors nous pouvons utiliser l'instruction comme suit :
mysql> SELECT * FROM employees WHERE working_hour > 9;
Nous obtiendrons le résultat ci-dessous où nous pourrons voir les détails des employés dont les heures de travail sont supérieures à 9 :
Si nous utilisons la requête ci-dessus avec le PAR GROUPE clause , nous obtiendrons le résultat différent :
mysql> SELECT * FROM employees WHERE working_hour > 9 GROUP BY name;
Voici le résultat :
Clause AVOIR
Clause HAVING dans MySQL utilisé conjointement avec GROUP BY La clause nous permet de spécifier des conditions qui filtrent les résultats de groupe qui apparaissent dans le résultat. Il renvoie uniquement les valeurs des groupes du résultat final qui remplissent certaines conditions. Nous pouvons également utiliser les clauses WHERE et HAVING ensemble lors de la sélection. Dans ce cas, la clause WHERE filtre d'abord les lignes individuelles, puis les lignes sont regroupées, effectue des calculs agrégés et enfin la clause HAVING filtre les groupes.
Cette clause impose des conditions aux groupes créés par la clause GROUP BY. Elle se comporte comme la clause WHERE lorsque l'instruction SQL n'utilise pas le mot-clé GROUP BY. Nous pouvons utiliser les fonctions d'agrégation (groupe) telles que SUM, MIN, MAX, AVG et COMPTER seulement avec deux clauses : SELECT et HAVING.
La syntaxe suivante illustre l'utilisation de la clause HAVING :
instruction java
SELECT column_lists, aggregate_function (expression) FROM table_name WHERE conditions GROUP BY column_lists HAVING condition;
Prenons un exemple pour comprendre cette clause. Ici, nous considérons le même tableau employés pour démonstration.
caractère.comparer java
Si nous voulons pour obtenir le nombre total d'heures de travail pour chaque salarié dont le temps de travail est supérieur à 6 heures , alors nous pouvons utiliser l'instruction comme suit :
mysql> SELECT name, SUM(working_hour) AS 'Total working hours' FROM employees GROUP BY name HAVING SUM(working_hour) > 6;
Nous obtiendrons le résultat ci-dessous où nous pourrons voir les heures de travail totales de chaque employé :
Différences clés entre les clauses WHERE et HAVING
Les points suivants expliquent les principales différences entre la base de données et le schéma :
- La clause WHERE filtre les lignes individuelles, tandis que la clause HAVING filtre les groupes au lieu d'une ligne à la fois.
- Nous ne pouvons pas utiliser la clause WHERE avec des fonctions d'agrégation car elle fonctionne pour filtrer des lignes individuelles. En revanche, HAVING peut fonctionner avec des fonctions d'agrégation car il est utilisé pour filtrer les groupes.
- Les opérations sur les lignes sont gérées par la clause WHERE, tandis que la clause HAVING gère les opérations sur les colonnes sur les lignes ou les groupes résumés.
- WHERE vient avant GROUP BY, ce qui signifie que la clause WHERE filtre les lignes avant d'effectuer des calculs agrégés. HAVING vient après GROUP BY, ce qui signifie que la clause HAVING filtre les lignes après avoir effectué des calculs agrégés. Par conséquent, HAVING est plus lent que WHERE en termes d’efficacité et doit être évité autant que possible.
- Nous pouvons combiner les clauses WHERE et HAVING dans une requête SELECT. Dans ce cas, la clause WHERE est utilisée en premier pour filtrer les lignes individuelles. Les lignes sont ensuite regroupées, effectuent des calculs d'agrégation et enfin, la clause HAVING est utilisée pour filtrer les groupes.
- La clause WHERE récupère les données souhaitées en fonction de la condition spécifiée. D'un autre côté, la clause HAVING récupère d'abord l'intégralité des données, puis la séparation est effectuée en fonction de la condition spécifiée.
- Sans instruction SELECT, nous ne pouvons pas utiliser la clause HAVING. À l’inverse, nous pouvons utiliser un WHERE avec les instructions SELECT, UPDATE et DELETE.
- La clause WHERE est un pré-filtre, tandis que la clause HAVING est un post-filtre.
Tableau comparatif OÙ et HAVING
Le tableau comparatif suivant explique rapidement leurs principales différences :
Base de comparaison | Clause OÙ | Clause AVOIR |
---|---|---|
Définition | Il est utilisé pour effectuer une filtration sur des lignes individuelles. | Il est utilisé pour effectuer une filtration sur des groupes. |
Basique | Il est implémenté dans les opérations sur les lignes. | Il est implémenté dans les opérations de colonne. |
Récupération de données | La clause WHERE récupère les données spécifiques de lignes particulières en fonction de la condition spécifiée | La clause HAVING récupère d'abord les données complètes. Il les sépare ensuite selon la condition donnée. |
Fonctions d'agrégation | La clause WHERE ne permet pas de travailler avec des fonctions d'agrégation. | La clause HAVING peut fonctionner avec des fonctions d'agrégation. |
Agir comme | La clause WHERE agit comme un pré-filtre. | La clause HAVING agit comme un post-filtre. |
Utilisé avec | Nous pouvons utiliser la clause WHERE avec les instructions SELECT, UPDATE et DELETE. | La clause HAVING ne peut être utilisée qu'avec l'instruction SELECT. |
PAR GROUPE | La clause GROUP BY vient après la clause WHERE. | La clause GROUP BY précède la clause HAVING. |
Conclusion
Dans cet article, nous avons fait une comparaison entre les clauses WHERE et HAVING. Ici, nous concluons que les deux clauses fonctionnent de la même manière pour filtrer les données, sauf qu'une fonctionnalité supplémentaire rend la clause HAVING plus populaire. Nous pouvons travailler efficacement avec des fonctions d'agrégation dans la clause HAVING alors que WHERE ne permet pas les fonctions d'agrégation.