J'ai été curieux. Quelles sont les différences entre ces requêtes respectives:
SELECT * FROM `tablename`
SELECT * FROM `tablename` WHERE 1
SELECT * FROM `tablename` WHERE 1=1
sql
select-query
Stephen Alexander
la source
la source
... WHERE TRUE
? Je suis conscient que (dans la plupart des SQL, y compris MySQL) TRUE est juste une macro sophistiquée pour1
- mais n'est-ce pas encore un peu plus évident pour le lecteur?Réponses:
2 et 3 sont identiques dans MySQL, fonctionnellement 1 est également identique.
where 1
n'est pas standard donc, comme d'autres l'ont souligné, ne fonctionnera pas dans d'autres dialectes.Les personnes qui ajoutent
where 1
ouwhere 1 = 1
ainsi deswhere
conditions peuvent être facilement ajoutées ou supprimées à / d'une requête en ajoutant / commentant certainsand
composants " ...".c'est à dire
la source
WHERE 1=1
vous n'aurez pas besoin de faire attention si la condition que vous essayez d'ajouter à la chaîne est la première (il faudra donc unWHERE
devant ) ou pas.ORDER BY 1
syntaxe @dlatikay est requise (au lieu des noms de colonne) si vous effectuez une union de deux ou plusieurs instructions SELECT." AND "
comme délimiteur.Comme vous le savez, tous les trois produisent les mêmes résultats. (Dans un contexte booléen, MySQL traite l'entier "1" comme vrai - en fait, tout nombre qui n'est pas "0" est traité comme vrai).
L'optimiseur MySQL est explicitement documenté pour supprimer les conditions constantes dans la
WHERE
clause:Par conséquent, les trois seront compilés exactement dans le même code.
Ils sont tous fonctionnellement équivalents et doivent avoir les mêmes caractéristiques de performance.
Cela dit, le premier et le troisième sont du SQL standard. La seconde provoquera une sorte d'erreur d'expression booléenne dans de nombreuses bases de données. Donc, je vous conseillerais d'éviter cela (je ne suis pas sûr si cela fonctionne ou non en mode SQL strict de MySQL).
Le troisième est souvent utilisé lors de la construction de
WHERE
clauses dynamiques . Cela permet d'ajouter facilement des conditions supplémentairesAND <condition>
sans se soucier desAND
s persistantes .la source
Si vous vous interrogez sur les différences de performances et de résultats, il n'y en a pas, 2 et 3 sont identiques
WHERE TRUE
, et ils donneront le même résultat que le premier.Résultats dans toutes les données de
table_name
(pas de filtre)1 sera évalué comme
TRUE
, par conséquent - pas de filtre - chaque enregistrement sera renvoyé.Identique au dernier, 1 = 1 est une
TRUE
expression, donc - pas de filtre - chaque enregistrement sera sélectionné.la source
Tous sont identiques, mais 2 et 3 sont utilisés pour gérer facilement des
AND/OR
conditions telles que:la source
Dans 1, MySQL n'a pas besoin d'évaluer les conditions WHERE.
En 2 et 3, la condition where est statique et non basée sur les valeurs des lignes. Il sera évalué avec une logique booléenne et sera toujours vrai.
Fonctionnellement, il n'y a pas de différence. Vous devez choisir 1 pour la clarté du code.
la source
Tous sont identiques mais 2 et 3 sont utilisés pour créer des requêtes dynamiques pour les conditions ET / OU
nous utilisons le format 2 et 3 pour faire des requêtes dynamiques afin que nous sachions déjà «où» le mot-clé est ajouté et nous continuons d'ajouter plus de filtres. Comme
après quelques lignes si nous avons de nouveaux filtres, nous ajoutons "AND coulmnb = b" et ainsi de suite
Vous n'avez pas à vérifier la requête SQL pour savoir où le mot clé est placé dans la première requête ou la requête initiale
Sinon on peut écrire
sqlquery = "SELECT * FROM tablename"
puis
s'il n'y a pas de clause 'where'
sqlquery
alorsautre
la source
Ils donnent tous la même réponse. Cependant, la façon dont 2 et 3 sont écrits est principalement pour avoir le contrôle de l'instruction "Where" afin qu'il soit plus facile de l'ajouter ou de la supprimer plus tard.
Je pense que la première et la troisième manière sont la bonne manière de l'écrire. Si vous avez besoin d'une instruction where que vous aimez dans le numéro 3, sinon le numéro 1 serait suffisant.
la source
Dans MS SQL 1 et 3 sont identiques, cependant, l'option 2 ne fonctionnera pas, l'option 2 est une instruction invalide comme dans MS SQL, WHERE est utilisé pour comparer certaines valeurs. Par exemple:
la source
la source
Résultat - Donne tous les enregistrements de la table spécifiée au lieu du nom de la table pour les trois requêtes
SELECT * FROM tablename WHERE 1
- Vérifiez cette réponseSELECT * FROM tablename WHERE 1=1
- Vérifiez cette réponsePour plus d'informations sur les optimisations de clause WHERE, vérifiez les éléments suivants: MYSQL , SQLite , SQL
la source