SELECT |
Sélectionne |
---|---|
SQL Server | Microsoft SQL Server |
Syntaxe
SELECT statement ::= [ WITH { [ XMLNAMESPACES ,] [ common_table_expression [,...n] ] } ] query_expression [ ORDER BY { order_by_expression | column_position [ ASC | DESC ] } [ ,...n ] ] [ FOR Clause] [ OPTION ( query_hint [ ,...n ] ) ] query_expression ::= { query_specification | ( query_expression ) } [ { UNION [ ALL ] | EXCEPT | INTERSECT } query_specification | ( query_expression ) [...n ] ] query_specification ::= SELECT [ ALL | DISTINCT ] [TOP ( expression ) [PERCENT] [ WITH TIES ] ] select_list [ INTO new_table ] [ FROM { table_source } [ ,...n ] ] [ WHERE search_condition ] [ GROUP BY ] [ HAVING search_condition ] |
Paramètres
Nom | Description |
---|---|
* | Ce paramètre permet d'indiquer que toutes les colonnes de toutes les tables et vues de la clause FROM doivent être renvoyées. Les colonnes sont renvoyées par table ou vue, comme spécifié dans la clause FROM, et dans l'ordre dans lequel elles existent dans la table ou la vue. |
expression | Ce paramètre permet d'indiquer une constante, une fonction, toute combinaison de noms de colonnes, de constantes et de fonctions connectées par un ou plusieurs opérateurs, ou une sous-requête. |
new_table | Ce paramètre permet d'indiquer le nom d'une nouvelle table à créer, en fonction des colonnes de la liste de sélection et des lignes choisies dans la source de données. |
order_by_expression | Ce paramètre permet d'indiquer une colonne ou une expression sur laquelle trier l'ensemble de résultats de requête. Une colonne de tri peut être spécifiée sous la forme d'un nom ou d'un alias de colonne, ou d'un entier non négatif représentant la position de la colonne dans la liste de sélection. |
search_condition | Ce paramètre permet d'indiquer un ou plusieurs prédicats à rencontrer pour les groupes et/ou les agrégats. |
select_list | Ce paramètre permet d'indiquer les colonnes à sélectionner pour l'ensemble de résultats. La liste de sélection est une série d'expressions séparées par des virgules. Le nombre maximal d'expressions pouvant être spécifiées dans la liste de sélection est de 4096. |
table_source | Ce paramètre permet d'indiquer le nom d'une table ou d'une vue. |
ALL | Ce paramètre permet d'indiquer que des lignes en double peuvent apparaître dans l'ensemble de résultats. ALL est la valeur par défaut. |
ASC | Ce paramètre permet d'indiquer que les valeurs de la colonne spécifiée doivent être triées par ordre croissant. ASC trie de la valeur la plus faible à la valeur la plus élevée. ASC est l'ordre de tri par défaut. Les valeurs nulles sont traitées comme les valeurs les plus basses possibles. |
DESC | Ce paramètre permet d'indiquer que les valeurs de la colonne spécifiée doivent être triées par ordre décroissant. DESC trie de la valeur la plus élevée à la valeur la plus faible. |
DISTINCT | Ce paramètre permet d'indiquer que seules des lignes uniques peuvent apparaître dans l'ensemble de résultats. Les valeurs nulles sont considérées comme égales aux fins du mot clef DISTINCT. |
TOP (expression ) [ PERCENT ] [ WITH TIES ] | Ce paramètre permet d'indiquer que seul un premier ensemble spécifié ou un pourcentage de lignes sera renvoyé à partir de l'ensemble de résultats de requête. expression peut être un nombre ou un pourcentage des lignes. Pour une compatibilité descendante, l'utilisation de l'expression TOP sans parenthèses dans les instructions SELECT est prise en charge, mais n'est pas recommandé. |
Description
Cette instruction permet de sortie une liste de données à partir d'une ou plusieurs tables ou vues.
Remarques
- Instruction fondamentale pour l'extraction de données : L'instruction SELECT est au coeur de SQL Server, permettant de récupérer des données à partir de tables, de vues ou de requêtes dérivées. Elle peut être utilisée de façon simple pour extraire quelques colonnes, ou devenir très complexe avec des expressions, des jointures, et des sous-requêtes imbriquées.
- La clause WITH permet l'utilisation des CTE : En préambule d'un SELECT, la clause WITH autorise la définition de Common Table Expressions (CTE), ce qui rend les requêtes plus lisibles et modulaires. C'est particulièrement utile pour découper une logique complexe en plusieurs blocs lisibles, ou pour permettre une récursivité.
- DISTINCT contre ALL : filtrer les doublons : Par défaut, SELECT utilise ALL, ce qui inclut les lignes dupliquées dans les résultats. Le mot-clef DISTINCT, en revanche, permet de filtrer les doublons. C'est utile mais coûteux en performance, car le moteur doit comparer toutes les lignes et colonnes sélectionnées.
- TOP avec ou sans PERCENT pour limiter les résultats : Le mot-clef TOP permet de limiter le nombre de lignes retournées, soit par nombre absolu, soit en pourcentage (avec PERCENT). Il est très pratique pour extraire un échantillon ou les premières lignes selon un ordre défini, souvent utilisé avec ORDER BY pour des extractions ciblées.
- Le SELECT INTO pour créer une table à la volée : Avec SELECT INTO, il est possible de créer une nouvelle table basée sur le résultat d'une requête. Cela est très utile pour sauvegarder des résultats intermédiaires ou générer des ensembles de données temporaires, sans avoir besoin de déclarer la structure au préalable.
- Les jointures et la clause FROM sont essentielles pour croiser les données : La clause FROM permet de spécifier les sources de données, et en combinaison avec des jointures, elle permet d'associer plusieurs tables de manière logique. On peut ainsi manipuler des structures complexes sans devoir dupliquer les données dans des tables à plat.
- Les clauses GROUP BY et HAVING pour l'agrégation : GROUP BY permet de regrouper les lignes par une ou plusieurs colonnes, ce qui est essentiel pour utiliser des fonctions d'agrégation comme SUM, AVG, COUNT, etc. La clause HAVING, quant à elle, permet de filtrer les groupes agrégés, un peu comme WHERE, mais pour les résultats groupés.
- La clause ORDER BY pour le tri final des résultats : Le tri des résultats est réalisé via ORDER BY, qui peut utiliser soit des noms de colonnes, soit leurs positions dans la select_list. Ce tri peut être ascendant (ASC) ou descendant (DESC), et est souvent indispensable pour des cas comme le tri par date, priorité, ou identifiant.
Exemples
L'exemple suivant permet de demander le nom de la base de données courante :
on obtiendra le résultat semblable suivant :
masterL'exemple suivant permet d'afficher la liste des nom de base de données disponible sur le serveur SQL Server :
on obtiendra le résultat semblable suivant :
name |
---|
master |
tempdb |
model |
msdb |
On peu avoir plus de détail qu'avec le SELECT en utilisant la STORED-PROCEDURE du nom de Sp_databases de la façon suivante :
- Sp_databases
- Go
on obtiendra le résultat semblable suivant :
DATABASE_NAME | DATABASE_SIZE | REMARKS |
---|---|---|
master | 6784 | NULL |
tempdb | 3328 | NULL |
model | 33344 | NULL |
msdb | 2560 | NULL |
L'exemple suivant permet de détecter les informations de classement, y compris si la machine est sensible à la casse ou non :
on obtiendra le résultat semblable suivant :
French_CI_ASL'exemple suivant permet de demander le nom de l'édition de SQL Server actuellement utilisé :
on obtiendra le résultat semblable suivant :
Express Edition with Advanced Services (64-bit)L'exemple suivant permet détection si une sécurité d'authentification est utilisé :
on obtiendra le résultat semblable suivant :
0Voici un exemple montrant une utilisation de la valeur absolue avec des parenthèses :
- SELECT ABS(9 * - 7) AS Expr1
on obtiendra le résultat suivant :
Expr1 |
---|
63 |