5.1 Déclaration AVOIR

Il existe un autre opérateur utile en SQL qui est utilisé avec GROUP BY, il s'appelle HAVING.

Dans sa signification, il est complètement analogue à l'opérateur WHERE. Il vous permet uniquement WHEREde définir un filtre de ligne avant le regroupement, et avec l'aide, HAVINGvous pouvez définir un filtre qui est appliqué aux enregistrements après le regroupement.

La vue générale de la requête lors de l'utilisation du regroupement et du filtrage des résultats de regroupement est la suivante :

SELECT columns
FROM table
WHERE condition
GROUP BY columns
HAVING condition

HAVINGne peut être utilisé que si la requête contient GROUP BY.

Écrivons une requête où nous affichons le nombre d'employés embauchés par année.

SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year

Et le résultat de cette requête :

location_année total
2012 1
2013 1
2014 1
2015 2
2018 1

Et maintenant, nous en excluons les années où un ou moins d'employés ont été embauchés. Exemple:

SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year
HAVING total > 1

Et le résultat de cette requête :

location_année total
2015 2

5.3 Ordre d'exécution des relevés

Pour écrire des requêtes SQL correctes et efficaces, vous devez comprendre comment elles sont exécutées par le serveur SQL.

La procédure d'exécution des actions est strictement réglementée et ne dépend pas de votre désir. Vous ne pouvez pas réorganiser les opérateurs et obtenir un ordre différent.

La requête SQL est exécutée en plusieurs étapes dans cet ordre.

  1. Étape 1 - récupération des lignes
    • Tout d'abord, toutes les lignes de la table spécifiée sont sélectionnées.
    • Ensuite, des champs calculés leur sont ajoutés.
    • Et puis de toutes les lignes, il ne reste que celles qui satisfont la conditionWHERE
  2. Étape 2 - regroupement
    • Le regroupement est ensuite appliqué aux résultats.
    • Lors du regroupement, des champs tels que COUNT(*).
    • Enfin, un filtre est appliqué au résultat du regroupement HAVING.
  3. Étape 3 - tri
    • Les lignes obtenues aux étapes précédentes sont triées à l'aide de ORDER BY.

Enfin, le résultat peut être ajusté avec LIMITet OFFSET.