J'ai vu de nombreuses requêtes avec quelque chose comme suit.
Select 1
From table
Qu'est-ce 1
que cela signifie, comment sera-t-il exécuté et que rapportera-t-il?
De plus, dans quel type de scénarios, cela peut-il être utilisé?
J'ai vu de nombreuses requêtes avec quelque chose comme suit.
Select 1
From table
Qu'est-ce 1
que cela signifie, comment sera-t-il exécuté et que rapportera-t-il?
De plus, dans quel type de scénarios, cela peut-il être utilisé?
Réponses:
SELECT 1 FROM TABLE_NAME
signifie "Retourne 1 de la table". Il est assez banal en soi, donc normalement il sera utilisé avec WHERE
et souvent EXISTS
(comme le note @gbn, ce n'est pas nécessairement la meilleure pratique, c'est cependant assez courant pour être noté, même si ce n'est pas vraiment significatif ( cela dit, je vais l'utiliser parce que d'autres l'utilisent et c'est «plus évident» immédiatement. Bien sûr, cela pourrait être un problème de poulet visqueux contre œuf, mais je ne m'attarde généralement pas)).
SELECT * FROM TABLE1 T1 WHERE EXISTS (
SELECT 1 FROM TABLE2 T2 WHERE T1.ID= T2.ID
);
Fondamentalement, ce qui précède renverra tout de la table 1 qui a un ID correspondant de la table 2. (Ceci est un exemple artificiel, évidemment, mais je pense qu'il transmet l'idée. Personnellement, je ferais probablement ce qui précède SELECT * FROM TABLE1 T1 WHERE ID IN (SELECT ID FROM TABLE2);
car je le considère comme BEAUCOUP plus explicite pour le lecteur à moins qu'il n'y ait une raison impérieuse de ne pas le faire).
Il y a en fait un cas que j'ai oublié jusqu'à maintenant. Dans le cas où vous essayez de déterminer l'existence d'une valeur dans la base de données à partir d'une langue extérieure, elle SELECT 1 FROM TABLE_NAME
sera parfois utilisée. Cela n'offre pas un avantage significatif par rapport à la sélection d'une colonne individuelle, mais, en fonction de l'implémentation, cela peut offrir des gains substantiels par rapport à un SELECT *
, simplement parce qu'il est souvent le cas que plus la base de données renvoie à une langue, plus les données sont volumineuses. structure, ce qui signifie que plus de temps sera nécessaire.
...EXISTS (SELECT 1...
select 1 from table
renverra la constante 1 pour chaque ligne du tableau. C'est utile lorsque vous souhaitez déterminer à moindre coût si record correspond à votre where
clause et / ou join
.
Si tu veux dire quelque chose comme
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT 1 FROM table WHERE...)
alors c'est un mythe que 1
c'est mieux que
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT * FROM table WHERE...)
Le 1
ou *
dans EXISTS est ignoré et vous pouvez l'écrire conformément à la page 191 de la norme ANSI SQL 1992 :
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT 1/0 FROM table WHERE...)
exists (select 1/0
fonctionne comme un charme
il fait ce qu'il dit - il retournera toujours l'entier 1. Il est utilisé pour vérifier si un enregistrement correspondant à votre clause where existe.
select 1 from table
est utilisé par certaines bases de données comme une requête pour tester une connexion pour voir si elle est active, souvent utilisé lors de la récupération ou du retour d'une connexion vers / depuis un pool de connexions.
Bien que ce ne soit pas largement connu, une requête peut avoir une HAVING
clause sans GROUP BY
clause.
Dans de telles circonstances, la HAVING
clause est appliquée à l'ensemble entier. De toute évidence, la SELECT
clause ne peut faire référence à aucune colonne, sinon vous obtiendrez (corriger) l'erreur "La colonne n'est pas valide dans select car elle n'est pas contenue dans le GROUP BY" etc.
Par conséquent, une valeur littérale doit être utilisée (car SQL n'autorise pas un jeu de résultats avec zéro colonne - pourquoi?!) Et la valeur littérale 1 ( INTEGER
) est couramment utilisée: si la HAVING
clause est évaluée, TRUE
le jeu de résultats sera une ligne avec un colonne affichant la valeur 1, sinon vous obtenez l'ensemble vide.
Exemple: pour savoir si une colonne a plus d'une valeur distincte:
SELECT 1
FROM tableA
HAVING MIN(colA) < MAX(colA);
SELECT MIN(colA) < MAX(colA) FROM tableA
?
Pour être un peu plus précis, vous utiliseriez ceci pour faire
SELECT 1 FROM MyUserTable WHERE user_id = 33487
au lieu de faire
SELECT * FROM MyUserTable WHERE user_id = 33487
parce que vous ne vous souciez pas de regarder les résultats. Demander le numéro 1 est très facile pour la base de données (puisqu'elle n'a pas à faire de recherche).
Si vous ne savez pas qu'il existe des données dans votre table ou non, vous pouvez utiliser la requête suivante:
SELECT cons_value FROM table_name;
À titre d'exemple:
SELECT 1 FROM employee;
Nous utilisons donc cette requête SQL pour savoir s'il y a des données dans la table et le nombre de lignes indique combien de lignes existent dans cette table.
Cela signifie que vous voulez une valeur " 1 " en sortie ou la plupart du temps utilisée comme requêtes internes car, pour une raison quelconque, vous souhaitez calculer les requêtes externes en fonction du résultat des requêtes internes .. pas tout le temps que vous utilisez 1 mais vous ont des valeurs spécifiques ...
Cela vous donnera statiquement la sortie comme valeur 1.
Si vous souhaitez simplement vérifier un vrai ou un faux en fonction de la clause WHERE, sélectionnez 1 dans la table où la condition est le moyen le moins cher.
Je vois qu'il est toujours utilisé dans l'injection SQL, comme:
www.urlxxxxx.com/xxxx.asp?id=99 union select 1,2,3,4,5,6,7,8,9 from database;
Ces nombres peuvent être utilisés pour deviner où se trouve la base de données et deviner le nom de colonne de la base de données que vous avez spécifiée, ainsi que les valeurs des tables.
cela signifie simplement que vous récupérez le numéro de la première colonne de la table ,,,, signifie sélectionner Emply_num, Empl_no From Employees; ici, vous utilisez sélectionnez 1 parmi les employés; cela signifie que vous récupérez la colonne Emply_num. Merci
La raison en est une autre, du moins pour MySQL. Ceci est tiré du manuel MySQL
InnoDB calcule les valeurs de cardinalité d'index pour une table la première fois que cette table est accédée après le démarrage, au lieu de stocker ces valeurs dans la table. Cette étape peut prendre beaucoup de temps sur les systèmes qui partitionnent les données en plusieurs tables. Étant donné que cette surcharge s'applique uniquement à l'opération d'ouverture de table initiale, pour «réchauffer» une table pour une utilisation ultérieure, accédez-y immédiatement après le démarrage en émettant une instruction telle que SELECT 1 FROM tbl_name LIMIT 1
Ceci est juste utilisé par commodité avec IF EXISTS (). Sinon, vous pouvez aller avec
select * from [table_name]
Image Dans le cas de 'IF EXISTS', nous avons juste besoin de savoir que toute ligne avec une condition spécifiée existe ou non, peu importe le contenu de la ligne.
select 1 from Users
ci-dessus de code d'exemple, renvoie non. de lignes équivaut à non. d'utilisateurs avec 1 dans une seule colonne