Maison > base de données > tutoriel mysql > OÙ ou AVOIR : où doivent aller les colonnes calculées dans SQL ?

OÙ ou AVOIR : où doivent aller les colonnes calculées dans SQL ?

Susan Sarandon
Libérer: 2025-01-19 22:47:09
original
494 Les gens l'ont consulté

WHERE or HAVING: Where Should Calculated Columns Go in SQL?

Position correcte de la colonne calculée dans la requête SQL : OÙ ou HAVING ?

En SQL, les conditions utilisées pour récupérer les données peuvent être placées dans la clause WHERE ou HAVING. Lorsque vous utilisez des colonnes calculées, il est essentiel de comprendre leur emplacement correct pour garantir l'efficacité des requêtes.

OÙ et AVOIR : différences clés

  • Clause WHERE : Filtres avant la sélection des données , permettant l'utilisation de n'importe quelle condition de colonne de table.
  • Clause HAVING : Filtres après la sélection des données , autorisant les conditions utilisant des colonnes, des alias ou des fonctions d'agrégation sélectionnées.

Position calculée de la colonne

Les colonnes calculées doivent être placées dans la clause HAVING, pas dans la clause WHERE. C'est parce que :

  • La clause WHERE agit sur les données de la table d'origine.
  • La clause HAVING agit sur les données transformées calculées.

Exemple :

Considérons un tableau contenant les colonnes « id » et « value » :

CREATE TABLE `table` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `value` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `value` (`value`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Copier après la connexion

Pour obtenir des valeurs supérieures à 5, vous pouvez utiliser deux requêtes :

-- WHERE 子句
SELECT `value` v FROM `table` WHERE `value` > 5;

-- HAVING 子句
SELECT `value` v FROM `table` HAVING `value` > 5;
Copier après la connexion

Ces deux requêtes renvoient les mêmes résultats, mais il existe des différences clés. La clause WHERE génère une erreur si l'alias 'v' est utilisé, alors que la clause HAVING le permet.

Impact sur les performances

L'utilisation de clauses WHERE sur des colonnes calculées sur de grandes tables peut avoir un impact négatif sur les performances. En effet, le filtrage est appliqué avant que ne soit calculé, ce qui peut entraîner des calculs inutiles. Améliorez les performances en plaçant les calculs dans la clause HAVING, en utilisant uniquement des données filtrées.

Conclusion

Lors de l'utilisation d'une colonne calculée, elle doit être placée dans la clause HAVING pour garantir un calcul correct et des performances optimales. La distinction entre les clauses WHERE et HAVING permet une plus grande flexibilité et un filtrage efficace des données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal