Normalement, toutes les sélections sont de la forme SELECT [columns, scalar computations on columns, grouped computations on columns, or scalar computations] FROM [table or joins of tables, etc]
Parce que cela permet des calculs scalaires simples, nous pouvons faire quelque chose comme SELECT 1 + 1 FROM SomeTable
et il renverra un jeu d'enregistrements avec la valeur 2 pour chaque ligne de la table SomeTable
.
Maintenant, si nous ne nous soucions d'aucune table, mais que nous voulions simplement calculer notre scalaire, nous pourrions vouloir faire quelque chose comme SELECT 1 + 1
. Ce n'est pas autorisé par la norme, mais c'est utile et la plupart des bases de données le permettent (Oracle ne le permet pas à moins qu'il n'ait été modifié récemment, du moins ce n'était pas le cas auparavant).
Par conséquent, de tels SELECT nus sont traités comme s'ils avaient une clause from qui spécifiait une table avec une ligne et aucune colonne (impossible bien sûr, mais cela fait l'affaire). D'où SELECT 1 + 1
devient SELECT 1 + 1 FROM ImaginaryTableWithOneRow
qui renvoie une seule ligne avec une seule colonne avec la valeur 2
.
La plupart du temps, nous n'y pensons pas, nous nous habituons simplement au fait que les SELECT nus donnent des résultats et ne pensons même pas au fait qu'il doit y avoir une chose d'une ligne sélectionnée pour renvoyer une ligne.
En faisant SELECT COUNT(*)
vous avez fait l'équivalent de SELECT COUNT(*) FROM ImaginaryTableWithOneRow
qui renvoie bien sûr 1.