Clause SELECT (Transact-SQL)

Définit les colonnes à renvoyer par la requête.

Icône Lien de rubriqueConventions de la syntaxe de Transact-SQL

Syntaxe

SELECT [ ALL | DISTINCT ]
[ TOP expression [ PERCENT ] [ WITH TIES ] ] 
<select_list> 
<select_list> ::= 
    { 
      | { table_name | view_name | table_alias }.* 
      | {
          [ { table_name | view_name | table_alias }. ]
               { column_name | $IDENTITY | $ROWGUID } 
          | udt_column_name [ { . | :: } { { property_name | field_name } 
            | method_name ( argument [ ,...n] ) } ]
          | expression
          [ [ AS ] column_alias ] 
         }
      | column_alias = expression 
    } [ ,...n ] 

Arguments

  • ALL
    Indique que les doublons de lignes peuvent apparaître dans le jeu de résultats. ALL est l'argument par défaut.
  • DISTINCT
    Indique que seules des lignes uniques peuvent apparaître dans le jeu de résultats. Les valeurs nulles sont considérées comme étant égales pour le mot clé DISTINCT.
  • TOP expression [ PERCENT ] [ WITH TIES ]
    Indique que seul un premier ensemble ou pourcentage de lignes spécifié sera retourné à partir de l'ensemble de résultats de la requête. expression peut être un nombre ou un pourcentage de lignes.

    La clause TOP peut être utilisée dans les instructions SELECT, INSERT, UPDATE et DELETE. Les parenthèses qui entourent expression dans TOP sont indispensables dans les instructions INSERT, UPDATE et DELETE. Pour la compatibilité descendante, l'utilisation de l'expression TOP sans parenthèses dans les instructions SELECT est prise en charge, mais elle déconseillée. Pour plus d'informations, consultez TOP (Transact-SQL).

  • < select_list >
    Colonnes à sélectionner pour le jeu de résultats. La liste de sélection est une série d'expressions séparées par des virgules. Le nombre maximum d'expressions pouvant être spécifiées dans la liste de sélection est de 4096.
  • *
    Indique 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 indiqué dans la clause FROM, et par ordre d'apparition dans la table ou la vue.
  • table_ name| view_ name| table_ alias.*
    Limite l'étendue de l'astérisque * sur la table ou la vue spécifiée.
  • column_ name
    Nom d'une colonne à renvoyer. Spécifiez column_name pour éviter une référence ambiguë, notamment lorsque deux tables dans la clause FROM possèdent des noms de colonnes en double. Par exemple, les tables SalesOrderHeader et SalesOrderDetail de la base de données AdventureWorks possèdent toutes les deux une colonne nommée ModifiedDate. Si les deux tables sont associées dans une requête, la date de modification des entrées SalesOrderDetail peut être spécifiée dans la liste de sélection en tant que SalesOrderDetail.ModifiedDate.
  • expression
    Nom de constante, fonction ou toute combinaison de noms de colonnes, de constantes et de fonctions reliées par un ou plusieurs opérateurs ou par une sous-requête.
  • $ROWGUID
    Renvoie la colonne GUID de la ligne.

    Si plusieurs tables de la clause FROM sont dotées de la propriété ROWGUIDCOL, $ROWGUID doit être qualifié avec le nom de table approprié, tel que T1.$ROWGUID.

  • udt_column_name
    Nom d'une colonne d'un type CLR défini par l'utilisateur à renvoyer.

    ms176104.note(fr-fr,SQL.90).gifRemarque :
    SQL Server Management Studio renvoie des valeurs d'un type défini par l'utilisateur en représentation binaire. Pour renvoyer des valeurs d'un type défini par l'utilisateur au format de chaîne ou XML, utilisez CAST ou CONVERT.
  • { . | :: }
    Spécifie une méthode, une propriété ou un champ d'un type CLR défini par l'utilisateur. Utilisez . pour une méthode, une propriété ou un champ d'instance (non statique). Utilisez :: pour une méthode, une propriété ou un champ statique. Pour invoquer une méthode, une propriété ou un champ d'un type CLR défini par l'utilisateur, vous devez disposer d'une autorisation EXECUTE sur le type.
  • property_name
    Propriété publique de udt_column_name.
  • field_name
    Membre de données publiques de udt_column_name.
  • method_name
    Méthode publique de udt_column_name qui prend un ou plusieurs arguments. method_name ne peut pas être une méthode mutateur.

    L'exemple ci-dessous sélectionne les valeurs pour la colonne Location, défini comme étant de type point, à partir de la table Cities, en invoquant une méthode du type appelé Distance :

    CREATE TABLE Cities (
         Name varchar(20),
         State varchar(20),
         Location point );
    GO
    DECLARE @p point (32, 23), @distance float
    GO
    SELECT Location.Distance (@p)
    FROM Cities;
    
  • column_ alias
    Nom utilisé pour remplacer le nom de colonne dans le jeu de résultats de la requête. Par exemple, un alias tel que Quantity, Quantity to Date ou Qty doit être spécifié pour une colonne nommée quantity.

    Les alias sont également utilisés pour spécifier les noms des résultats d'expressions, par exemple :

    USE AdventureWorks;

    GO

    SELECT AVG(UnitPrice) AS 'Average Price'

    FROM Sales.SalesOrderDetail;

    L'argument column_alias peut être utilisé dans une clause ORDER BY. Il ne peut toutefois pas être utilisé dans une clause WHERE, GROUP BY ou HAVING. Si l'expression de requête fait partie d'une instruction DECLARE CURSOR, column_alias ne peut pas être utilisé dans la clause FOR UPDATE.

Notes

L'ordre des clauses dans une instruction SELECT est de première importance. Vous pouvez omettre n'importe quelle clause facultative mais, lorsque vous employez les clauses facultatives, elles doivent apparaître dans l'ordre adéquat.

Les instructions SELECT sont autorisées dans les fonctions définies par l'utilisateur uniquement si les listes de sélection de ces instructions contiennent des expressions qui attribuent des valeurs aux variables qui sont locales aux fonctions.

La clause OPTION n'est pas autorisée dans des vues.

Une variable table est accessible comme une table normale, dans son étendue, et peut ainsi être utilisée comme source de table dans une instruction SELECT.

Un nom en quatre parties, dont la partie nom de serveur est établie à l'aide de la fonction OPENDATASOURCE, peut être utilisé en tant que source de table dans toutes les situations où un nom de table peut être inclus dans une instruction SELECT.

Certaines restrictions syntaxiques s'appliquent aux instructions SELECT impliquant des tables distantes. Pour plus d'informations, consultez Consignes pour l'utilisation des requêtes distribuées.

La longueur des données retournées pour les colonnes text ou ntext incluses dans la liste de sélection est égale à la plus petite des valeurs suivantes : la taille réelle de la colonne text, le paramètre de session TEXTSIZE par défaut ou la limite codée en dur dans l'application. Pour modifier la longueur du texte renvoyé dans une session, utilisez l'instruction SET. Par défaut, la limite de longueur pour des données textuelles renvoyées avec une instruction SELECT est de 4 Ko.

Le moteur de base de données SQL Server 2005 déclenche l'exception 511 et annule l'instruction en cours d'exécution dans les cas suivants :

  • L'instruction SELECT produit une ligne de résultats ou une ligne de table de travail intermédiaire excédant les 8060 octets.
  • L'instruction DELETE, INSERT ou UPDATE tente d'opérer une action sur une ligne excédant les 8060 octets.

Si une erreur se produit si aucun nom de colonne n'est attribué à une colonne créée par une instruction SELECT INTO ou CREATE VIEW.

Sélection des colonnes d'identité

Lorsque vous sélectionnez une colonne d'identité existante dans une nouvelle table, la nouvelle colonne hérite de la propriété IDENTITY sauf si l'une des conditions suivantes est vraie :

  • L'instruction SELECT contient une jointure, une clause GROUP BY ou une fonction d'agrégation.
  • Plusieurs instructions SELECT sont reliées par UNION.
  • La colonne d'identité est répertoriée plus d'une fois dans la liste de sélection.
  • La colonne d'identité fait partie d'une expression.

Si l'une de ces conditions est vérifiée, la colonne est créée avec l'attribut NOT NULL au lieu d'hériter de la propriété IDENTITY. Toutes les règles et restrictions des colonnes d'identité s'appliquent à la nouvelle table.

Jointures externes antérieures

Les versions antérieures de SQL Server prennent en charge la définition de jointures externes utilisant les opérateurs *= et =* dans la clause WHERE. SQL Server version 7.0 prend en charge la norme SQL-92. Cela fournit des opérateurs de jointure dans la clause FROM. Lorsque le niveau de compatibilité de la base de données est de 90, les opérateurs de jointure externe (*= et =*) ne sont pas pris en charge.

Ordre de traitement des clauses WHERE, GROUP BY et HAVING

Les étapes suivantes établissent l'ordre de traitement d'une instruction SELECT comprenant les clauses WHERE, GROUP BY et HAVING :

  1. La clause FROM renvoie un jeu de résultats initial.
  2. La clause WHERE exclut les lignes qui ne remplissent pas ses critères de recherche.
  3. La clause GROUP BY rassemble les lignes sélectionnées en un groupe pour chaque valeur unique dans la clause GROUP BY.
  4. Les fonctions d'agrégation mentionnées dans la liste de sélection calculent des valeurs de résumé pour chaque groupe.
  5. La clause HAVING exclut en outre les lignes qui ne remplissent pas ses critères de recherche.

Autorisations

Nécessite l'appartenance au rôle serveur fixe sysadmin, aux rôles de bases de données fixes db_owner et db_datareader, et nécessite d'être propriétaire de la table. Les membres des rôles sysadmin, db_owner et db_securityadmin, ainsi que le propriétaire de la table peuvent attribuer des autorisations aux autres utilisateurs.

Si la clause INTO est utilisée pour créer une table permanente, l'utilisateur doit alors posséder l'autorisation CREATE TABLE dans la base de données de destination.

Voir aussi

Référence

CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
CREATE TRIGGER (Transact-SQL)
CREATE VIEW (Transact-SQL)
DELETE (Transact-SQL)
EXECUTE (Transact-SQL)
Expressions (Transact-SQL)
FREETEXT (Transact-SQL)
FREETEXTTABLE (Transact-SQL)
INSERT (Transact-SQL)
SET TRANSACTION ISOLATION LEVEL (Transact-SQL)
table (Transact-SQL)
UNION (Transact-SQL)
UPDATE (Transact-SQL)
EXCEPT et INTERSECT (Transact-SQL)
WHERE (Transact-SQL)

Autres ressources

Requêtes de recherche de texte intégral
Principes de base des jointures
Principes de base des sous-requêtes
Utilisation de variables et de paramètres (moteur de base de données)
Utilisation des identificateurs comme noms d'objet

Aide et Informations

Assistance sur SQL Server 2005