Maison >base de données >tutoriel mysql >OÙ ou AVOIR : où doivent aller les colonnes calculées dans 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
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 :
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!