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
Susan Sarandonoriginal
2025-01-19 22:47:09477parcourir

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 » :

<code class="language-sql">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;</code>

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

<code class="language-sql">-- WHERE 子句
SELECT `value` v FROM `table` WHERE `value` > 5;

-- HAVING 子句
SELECT `value` v FROM `table` HAVING `value` > 5;</code>

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:
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