web-dev-qa-db-fra.com

Qu'est-ce que cela signifie en sélectionnant 1 dans le tableau?

J'ai vu de nombreuses requêtes avec quelque chose comme suit.

Select 1  
From table

Que signifie ce 1, comment sera-t-il exécuté et que retournera-t-il?

Aussi, dans quel type de scénarios, cela peut-il être utilisé?

109
Microsoft Developer

SELECT 1 FROM TABLE_NAME signifie "Retour 1 de la table". Il est assez simple en soi, donc normalement, il sera utilisé avec WHERE et souvent EXISTS (comme @gbn note, ce n'est pas nécessairement la meilleure pratique, mais il est assez commun pour être noté , même si cela n’a pas vraiment de sens (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 visqueux opposant poulet et œuf, mais en général je ne le fais pas. habiter)).

 SELECT * FROM TABLE1 T1 WHERE EXISTS (
     SELECT 1 FROM TABLE2 T2 WHERE T1.ID= T2.ID
 );

Fondamentalement, ce qui précède renverra tout ce qui est du tableau 1 et qui possède un identifiant correspondant de celui-ci. (Ceci est un exemple artificiel, évidemment, mais je crois que cela traduit l'idée. Personnellement, je ferais probablement ce qui précède comme SELECT * FROM TABLE1 T1 WHERE ID IN (SELECT ID FROM TABLE2); car j'estime que FAR est plus explicite pour le lecteur, sauf s'il existe une raison impérieuse de ne pas le faire).

MODIFIER

En fait, il y a un cas que j'ai oublié jusqu'à présent. Dans le cas où vous essayez de déterminer l'existence d'une valeur dans la base de données à partir d'une langue externe, il est parfois utilisé SELECT 1 FROM TABLE_NAME. Cela n'offre pas d'avantage significatif sur la sélection d'une colonne individuelle, mais, en fonction de l'implémentation, il peut s'avérer très bénéfique de réaliser un SELECT *, tout simplement parce que plus le nombre de colonnes renvoyées par la base de données dans un langage est souvent élevé. plus la structure des données est grande, ce qui signifie qu’il faudra plus de temps.

92
cwallenpoole

select 1 from table renverra la constante 1 pour chaque ligne de la table. C'est utile lorsque vous souhaitez déterminer à moindre coût si l'enregistrement correspond à votre clause where et/ou join.

68
Sahil Muthoo

Si vous voulez dire quelque chose comme

SELECT * FROM AnotherTable
  WHERE EXISTS (SELECT 1 FROM table WHERE...) 

alors c'est un mythe que le 1 est meilleur que

SELECT * FROM AnotherTable
  WHERE EXISTS (SELECT * FROM table WHERE...) 

Le 1 ou * dans EXISTS est ignoré et vous pouvez l'écrire comme indiqué dans la page de la norme ANSI SQL 1992 :

SELECT * FROM AnotherTable
  WHERE EXISTS (SELECT 1/0 FROM table WHERE...) 
35
gbn

il fait ce qu'il dit - il retournera toujours le nombre entier 1. Il sert à vérifier si un enregistrement correspondant à votre clause where existe.

18
Neville Kuyt

select 1 from table est utilisé par certaines bases de données en tant que requête pour tester une connexion afin de déterminer si elle est active. Elle est souvent utilisée lors de l'extraction ou du renvoi d'une connexion vers/depuis un pool de connexions.

17
Tom

Le résultat est 1 pour chaque enregistrement de la table .  __

12
TiyebM

Bien que cela soit peu connu, une requête peut avoir une clause HAVING sans une clause GROUP BY

Dans de telles circonstances, la clause HAVING est appliquée à l'ensemble. Clairement, la clause SELECT ne peut faire référence à aucune colonne, sinon vous obtiendrez l'erreur, "La colonne n'est pas valide dans select car elle n'est pas contenue dans GROUP BY" etc. 

Par conséquent, une valeur littérale must doit être utilisée (car SQL ne permet pas un ensemble de résultats avec zéro colonne - pourquoi?!) Et la valeur littérale 1 (INTEGER) est couramment utilisée: si la clause HAVING évalue TRUE, la valeur resultset sera une ligne avec une colonne indiquant la valeur 1, sinon vous obtenez l'ensemble vide.

Exemple: rechercher si une colonne a plus d'une valeur distincte:

SELECT 1
  FROM tableA
HAVING MIN(colA) < MAX(colA);
8
onedaywhen

Si vous ne savez pas s'il existe ou non des données de votre table, vous pouvez utiliser la requête suivante: 

SELECT cons_value FROM table_name;

À titre d'exemple:

SELECT 1 FROM employee;
  1. Il renverra une colonne contenant le nombre total de lignes et toutes les lignes ont la même valeur constante 1 (pour cette fois, il retourne 1 pour toutes les lignes);
  2. S'il n'y a pas de ligne dans votre table, rien ne sera retourné.

Nous utilisons donc cette requête SQL pour savoir s’il existe des données dans la table et le nombre de lignes indique le nombre de lignes existantes dans cette table.

5
mahbub_siddique

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 (car elle n'a pas à faire de recherche).

4
Robert Martin

Cela signifie que vous voulez une valeur " 1 " en sortie ou utilisée la plupart du temps en tant que requêtes internes, car vous souhaitez calculer les requêtes externes en fonction du résultat des requêtes utilisez 1 mais vous avez des valeurs spécifiques ...

Ce sera statiquement vous donne la sortie en tant que valeur 1.

3
DShah

Si vous souhaitez simplement vérifier la valeur true ou false en fonction de la clause WHERE, sélectionnez 1 dans la table où la condition est le moyen le moins coûteux.

3
user1286465

Je vois qu'il est toujours utilisé dans l'injection SQL, tel que:

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ù la base de données existe et deviner le nom de colonne de la base de données que vous avez spécifiée. Et les valeurs des tables.

2
EmilyAvon

Ceci est juste utilisé pour plus de commodité avec IF EXISTS (). Sinon, vous pouvez aller avec

select * from [table_name]

Image Dans le cas de 'IF EXISTS', il suffit de savoir que toute ligne avec la condition spécifiée existe ou non, peu importe le contenu de la ligne.

select 1 from Users

ci-dessus, exemple de code, renvoie non. de lignes est égal à non. d'utilisateurs avec 1 dans une seule colonne

0
arvind singh

cela signifie simplement que vous récupérez le numéro de la première colonne de la table , signifieselect Emply_num, Empl_no Des employés; Ici, vous utilisez la sélection 1 des employés; cela signifie que vous récupérez la colonne Emply_num . Merci

0
zeeshan rajput

La raison en est une autre, du moins pour MySQL. Ceci est extrait du Manuel MySQL

InnoDB calcule les valeurs de cardinalité d'index pour une table lors du premier accès à cette table après le démarrage, au lieu de les stocker 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 en vue d'une utilisation ultérieure, accédez-y immédiatement après le démarrage en émettant une instruction telle que SELECT 1 FROM nom_de_table LIMIT 1

0
Ramona Morea