SELECT¶
SELECT peut être utilisé soit comme une instruction, soit comme une clause dans d’autres instructions :
En tant qu’instruction, l’instruction SELECT est l’instruction SQL la plus couramment exécutée ; elle interroge la base de données et extrait un ensemble de lignes.
Comme clause, SELECT définit l’ensemble des colonnes retournées par une requête.
- Voir aussi :
Syntaxe¶
Les sections suivantes décrivent la syntaxe de cette commande :
Sélection de toutes les colonnes¶
Vous pouvez spécifier les combinaisons de mots-clés suivantes après SELECT *. Les mots-clés doivent être présentés dans l’ordre indiqué ci-dessous :
Sélection de colonnes spécifiques¶
Une virgule de fin est acceptée dans une liste de colonnes. Par exemple, l’instruction SELECT suivante est prise en charge :
Pour plus d’informations sur SELECT en tant qu’instruction, et sur les autres clauses de l’instruction, consultez Syntaxe de requête.
Paramètres¶
ALL | DISTINCTIndique si l’élimination des doublons doit être effectuée sur le jeu de résultats :
ALLinclut toutes les valeurs dans le jeu de résultats.DISTINCTélimine les valeurs en double du jeu de résultats.
Par défaut :
ALLTOP nSpécifie le nombre maximum de résultats à renvoyer. Voir TOP <n>.
object_nameou .aliasIndique l’identificateur d’objet ou l’alias d’objet tel que défini dans la clause FROM.
*L’astérisque est un raccourci pour indiquer que la sortie doit inclure toutes les colonnes de l’objet spécifié, ou toutes les colonnes de tous les objets si
*n’est pas qualifié avec un nom ou un alias d’objet. Les colonnes sont renvoyées dans l’ordre indiqué en exécutant la commande DESCRIBE sur l’objet.Lorsque vous spécifiez
*, vous pouvez également spécifierILIKE,EXCLUDE,REPLACE, etRENAME:ILIKE 'pattern'Spécifie que seules les colonnes qui correspondent à
patterndoivent être incluses dans les résultats.Dans
pattern, vous pouvez utiliser les caractères SQL génériques :Utilisez un trait de soulignement (
_) pour faire correspondre n’importe quel caractère unique.Utilisez un signe de pourcentage (
%) pour faire correspondre toute séquence de zéro caractère ou plus.
Pour faire correspondre une séquence n’importe où dans le nom de la colonne, commencez et terminez le modèle par
%.La correspondance est insensible à la casse.
Si aucune colonne ne correspond au modèle spécifié, une erreur de compilation se produit (
001080 (42601): ... SELECT with no columns).EXCLUDE col_name.EXCLUDE (col_name, col_name, ...)Spécifie les colonnes qui doivent être exclues des résultats.
Si vous effectuez une sélection à partir de plusieurs tables, utilisez
SELECT table_name.*pour spécifier que vous voulez sélectionner toutes les colonnes d’une table spécifique et spécifiez le nom non qualifié de la colonne dansEXCLUDE. Par exemple :REPLACE (expr AS col_name [ , expr AS col_name, ...] )Remplace la valeur de
col_namepar la valeur de l’expression évaluéeexpr.Par exemple, pour ajouter la chaîne
'DEPT-'aux valeurs de la colonnedepartment_id, utilisez :Pour
col_name:La colonne doit exister et ne peut pas être filtrée par
ILIKEouEXCEPT.Vous ne pouvez pas spécifier la même colonne plus d’une fois dans la liste des remplacements.
Si la colonne se trouve dans plusieurs tables (par exemple, dans les deux tables d’une jointure), l’instruction échoue avec une erreur de type « colonne ambiguë ».
exprdoit évaluer une seule valeur.RENAME col_name AS col_alias.RENAME (col_name AS col_alias, col_name AS col_alias, ...)Spécifie les alias de colonnes qui doivent être utilisés dans les résultats.
Si vous effectuez une sélection à partir de plusieurs tables, utilisez
SELECT table_name.*pour spécifier que vous voulez sélectionner toutes les colonnes d’une table spécifique et spécifiez le nom non qualifié de la colonne dansRENAME. Par exemple :
Note
Lorsque vous spécifiez une combinaison de mots-clés après
SELECT *:Vous ne pouvez pas spécifier à la fois
ILIKEetEXCLUDE.Si vous spécifiez
EXCLUDEavecRENAMEouREPLACE:Vous devez spécifier
EXCLUDEavantRENAMEouREPLACE:Vous ne pouvez pas spécifier la même colonne dans
EXCLUDEetRENAME.
Si vous spécifiez
ILIKEavecRENAMEouREPLACE, vous devez d’abord spécifierILIKE:Si vous spécifiez
REPLACEetRENAME:Vous devez spécifier
REPLACEavant :Vous pouvez spécifier le même nom de colonne dans
REPLACEetRENAME:
col_nameSpécifie l’identificateur de colonne tel que défini dans la clause FROM.
$col_positionSpécifie la position de la colonne (basée sur 1) telle que définie dans la clause FROM. Si une colonne est référencée à partir d’une table, ce nombre ne peut pas dépasser le nombre maximum de colonnes dans la table.
exprSpécifie une expression, telle qu’une expression mathématique, qui évalue à une valeur spécifique pour une ligne donnée.
[ AS ] col_aliasSpécifie l’alias de colonne attribué à l’expression de sortie. Il est utilisé comme nom d’affichage dans une liste SELECT de niveau supérieur et comme nom de colonne dans une vue en ligne.
N’attribuez pas d’alias de colonne identique au nom d’une autre colonne référencée dans la requête. Par exemple, si vous sélectionnez des colonnes nommées
prod_idetproduct_id, n’attribuez pas àprod_idl’aliasproduct_id. Voir Cas d’erreur : Spécification d’un alias correspondant à un autre nom de colonne.
Notes sur l’utilisation¶
Les alias et identificateurs sont insensibles à la casse par défaut. Pour préserver la casse, placez les lettres entre guillemets (
"). Pour plus d’informations, voir Identificateurs d’objet.Sans clause ORDER BY, les résultats renvoyés par SELECT sont un ensemble non ordonné. L’exécution répétée de la même requête dans les mêmes tables peut entraîner un ordre de sortie différent à chaque fois. Si l’ordre compte, utilisez la clause
ORDER BY.SELECT peut être utilisé non seulement comme une instruction indépendante, mais aussi en tant que clause dans d’autres instructions, par exemple
INSERT INTO ... SELECT ...;. SELECT peut également être utilisé dans une sous-requête dans une instruction.Dans de nombreux cas, lorsque vous utilisez un alias de colonne pour une expression (par exemple
expr AS col_alias) dans d’autres parties de la même requête (dans JOIN, FROM, WHERE, GROUP BY, d’autres expressions de colonne, etc.), l’expression n’est évaluée qu’une seule fois.Notez toutefois que dans certains cas, l’expression peut être évaluée plusieurs fois, ce qui peut se traduire par des valeurs différentes pour l’alias utilisé dans différentes parties de la même requête.
Exemples¶
Voici quelques exemples simples.
De nombreux exemples supplémentaires sont inclus dans d’autres parties de la documentation, y compris la description détaillée de Syntaxe de requête.
Pour des exemples liés à l’interrogation d’une table d’événements (dont le schéma est prédéfini par Snowflake), voir Affichage des messages de journalisation et Affichage des données de trace.
Configuration des données pour les exemples¶
Certaines de ces requêtes ci-dessous utilisent les tables et les données suivantes :
Exemples de sélection de toutes les colonnes (SELECT *)¶
Sélection de toutes les colonnes dont les noms correspondent à un modèle
Sélection de toutes les colonnes à l’exception d’une colonne
Sélection de toutes les colonnes à l’exception de deux colonnes ou plus
Sélection de toutes les colonnes et renommage de plusieurs colonnes
Sélection de toutes les colonnes dont les noms correspondent à un modèle et renommage d’une colonne
Sélection de toutes les colonnes, exclusion d’une colonne et renommage de plusieurs colonnes
Sélection de toutes les colonnes et remplacement de la valeur d’une colonne
Sélection de toutes les colonnes, remplacement de la valeur d’une colonne et renommage de la colonne
Sélection de toutes les colonnes de la table¶
Cet exemple montre comment sélectionner toutes les colonnes de employee_table :
Sélection de toutes les colonnes dont les noms correspondent à un modèle¶
Cet exemple montre comment sélectionner toutes les colonnes de employee_table avec des noms contenant id :
Sélection de toutes les colonnes à l’exception d’une colonne¶
Cet exemple montre comment sélectionner toutes les colonnes de employee_table à l’exception de la colonne department_id :
Sélection de toutes les colonnes à l’exception de deux colonnes ou plus¶
Cet exemple montre comment sélectionner toutes les colonnes de employee_table à l’exception des colonnes department_id et employee_id :
Sélection de toutes les colonnes et renommage d’une colonne¶
Cet exemple montre comment sélectionner toutes les colonnes de employee_table et renommage de la colonne department_id :
Sélection de toutes les colonnes et renommage de plusieurs colonnes¶
Cet exemple montre comment sélectionner toutes les colonnes de employee_table et renommer les colonnes department_id et employee_id :
Sélection de toutes les colonnes, exclusion d’une colonne et renommage de plusieurs colonnes¶
Cet exemple montre comment sélectionner toutes les colonnes de employee_table, exclure la colonne first_name et renommer les colonnes department_id et employee_id :
Sélection de toutes les colonnes dont les noms correspondent à un modèle et renommage d’une colonne¶
Cet exemple montre comment sélectionner toutes les colonnes de employee_table avec des noms contenant id et renommer la colonne department_id :
Sélection de toutes les colonnes et remplacement de la valeur d’une colonne¶
Cet exemple montre comment sélectionner toutes les colonnes dans employee_table et remplacer la valeur de la colonne department_id par l’ID précédé de DEPT- :
Sélection de toutes les colonnes, remplacement de la valeur d’une colonne et renommage de la colonne¶
Cet exemple montre comment sélectionner toutes les colonnes dans employee_table et remplacer la valeur de la colonne department_id par l’ID précédé de DEPT-, et renommer la colonne :
Sélection de toutes les colonnes dont les noms correspondent à un modèle et remplacement de la valeur d’une colonne¶
Cet exemple montre comment sélectionner toutes les colonnes de employee_table dont le nom contient id et ajouter DEPT- aux valeurs de la colonne department_id :
Sélection de toutes les colonnes de plusieurs tables, exclusion d’une colonne et renommage d’une colonne¶
Cet exemple joint deux tables et sélectionne toutes les colonnes des deux tables sauf une colonne de employee_table. L’exemple renomme également l’une des colonnes sélectionnées dans department_table.
Exemples de sélection de colonnes spécifiques (SELECT colname)¶
Sélection de plusieurs colonnes par leur nom dans des tables jointes
Cas d’erreur : Spécification d’un alias correspondant à un autre nom de colonne
Sélection d’une seule colonne par son nom¶
Cet exemple montre comment rechercher le nom de famille d’un employé si vous connaissez son ID.
Sélection de plusieurs colonnes par leur nom dans des tables jointes¶
Cet exemple énumère chaque employé et le nom du service dans lequel il travaille. Les résultats sont classés dans l’ordre par nom de service, et au sein de chaque service, les employés sont classés dans l’ordre alphabétique. Cette requête utilise un Join pour relier les informations d’une table à celles d’une autre table.
Sélection d’une colonne par sa position¶
Cet exemple montre comment utiliser $ pour spécifier une colonne par son numéro, plutôt que par son nom :
Spécification d’un alias pour une colonne dans la sortie¶
Cet exemple montre que les colonnes de sortie n’ont pas besoin d’être prises directement dans les tables de la clause FROM ; les colonnes de sortie peuvent être des expressions générales. Cet exemple calcule l’aire d’un cercle dont le rayon est de 2.0. Cet exemple montre également comment utiliser un alias de colonne pour que la sortie ait un nom de colonne significatif :
Cas d’erreur : Spécification d’un alias correspondant à un autre nom de colonne¶
Cet exemple montre pourquoi il n’est pas recommandé d’utiliser un alias de colonne correspondant au nom d’une autre colonne utilisée dans la requête. Cette requête GROUP BY entraîne une erreur de compilation SQL, et non une erreur de colonne ambiguë. L’alias prod_id attribué à product_id dans table1 correspond au nom de la colonne prod_id dans table2. La solution la plus simple à cette erreur consiste à donner à la colonne un alias différent.