SQL Instruction SELECT Utilisez l'instruction SELECT pour interroger des tables existantes. Syntaxe SELECT [attribut] { * | table.* | [table.]champ1 [, [table.]champ2.[, ...]]} [AS pseudonyme1 [, pseudonyme2 [, ...]]] FROM expression_de_table [, ...] [IN base_de_données_externe] [WHERE... ] [GROUP BY... ] [HAVING... ] [ORDER BY... ] L'instruction SELECT utilise les arguments suivants : attribut Un des attributs suivants: ALL, DISTINCT. Vous utilisez l'attribut pour réduire le nombre d'enregistrements communiqués. table Le nom de la table dans laquelle vous sélectionnez des enregistrements. champ1, champ2 Les noms des champs d'où il faut extraire des données. Si vous incluez plusieurs champs, elles seront extraites dans l'ordre indiqué. pseudonyme1, pseudonyme2 Les noms de colonne à utiliser lorsque vous affichez les données extraites en mode Feuille de données. expression_de_table Le nom de la table ou des tables qui contiennent les données que vous voulez extraire. base_de_données_externe Le nom de la base de données qui contient les tables dans expression_de_table, si pas dans la base de données en cours. Une instruction SQL commence généralement par SELECT.La syntaxe minimale pour une instruction SELECT est : SELECT champs FROM table Vous pouvez utiliser un astérisque (*) pour sélectionner tous les champs dans une table. L'exemple suivant sélectionne tous les champs dans la table Employés : SELECT * FROM Employés; Si un nom de champ apparaît plusieurs fois dans une table dont le nom figure dans la clause FROM, faites-le précéder du nom de la table et de l'opérateur . (point). Dans l'exemple suivant, le champ Dépt apparaît à la fois dans la table Employés et dans la table Directeurs. L'instruction SQL sélectionne le champ Dépt de la table Employés et le champ NomDirecteur de la table Directeurs : SELECT Employés.Dépt, NomDirecteur FROM Directeurs, Employés WHERE Employés.Dépt = Directeurs.Dépt; En mode Feuille de données, Microsoft Access utilise le nom de champ comme en-tête de colonne. Si vous souhaitez employer un autre en-tête, utilisez le mot réservé AS. Dans l'exemple suivant, le titre Naissance fait office d'en-tête de colonne dans la feuille de données qui en résulte : SELECT [Date de naissance] AS Naissance FROM Employés; 1 L'utilisation de la clause AS équivaut à paramétrer la propriété Pseudonyme (Alias) dans la feuille des propriétés de la liste des champs en mode Création d'une requête. Vous pouvez utiliser les autres clauses dans une instruction SELECT pour limiter davantage et organiser les données qui en résultent. Pour plus d'informations, voir la rubrique qui porte sur chacune de ces clauses. Clause FROM (SQL) FROM spécifie les tables ou les requêtes qui contiennent les champs repris dans l'instruction SELECT. Syntaxe SELECT liste_de_champs FROM expression_de_table [IN base_de_données_externe] Une instruction SELECT qui contient une clause FROM utilise les arguments suivants : liste_de_champs Le nom du ou des champ(s) à extraire ainsi que les pseudonymes de noms de champ, les fonctions de regroupements SQL, les attributs de sélection (ALL, DISTINCT) ou d'autres options pour l'instruction SELECT. expression_de_table Une expression qui identifie une ou plusieurs tables d'où il faut extraire des données. L'expression peut être le nom d'une seule table ou une combinaison provenant d'une JOINTURE ou d'une sous-requête. base_de_données_externe Le nom d'une base de données externe qui contient toutes les tables dans expression_de_table. FROM est requis et suit chaque SELECT. L'ordre des noms de table dans expression_de_table est sans importance. Pour améliorer les performances et la facilité d'emploi, il est recommandé d'utiliser une table attachée au lieu d'une clause IN pour extraire des données provenant d'une base de données externe. SELECT [Nom de famille], [Prénom] FROM Employés; L'inclusion d'une clause FROM équivaut à paramétrer la propriété Source données dans la feuille des propriétés de la liste des champs en mode Création d'une requête. Clause WHERE (SQL) Vous pouvez utiliser la clause WHERE pour déterminer quels enregistrements des tables reprises dans la clause FROM, apparaîtront dans les résultats de l'instruction SELECT. Microsoft Access sélectionne les enregistrements qui répondent aux conditions énumérées dans la clause WHERE. Ces conditions sont identiques à celles que vous pourriez entrer dans le champ Critères de la grille d'interrogation. Syntaxe SELECT liste_de_champs FROM expression_de_table WHERE critère Une instruction SELECT qui contient une clause WHERE utilise les arguments suivants : liste_de_champs Le nom du ou des champ(s) à extraire ainsi que les pseudonymes de noms de champ, les attributs de sélection (ALL, DISTINCT) ou d'autres options pour l'instruction SELECT. expression_de_table Le nom de la table ou des tables d'où les données seront extraites 2 critère Une expression à laquelle des enregistrements doivent répondre pour être inclus dans les résultats de la requête La clause WHERE est facultative, mais la clause FROM doit la précéder lorsque vous l'utilisez. Par exemple, vous pouvez sélectionner tous les employés du département des ventes (WHERE Dépt = 'Ventes') ou tous les clients dont l'âge se situe entre 18 et 30 ans (WHERE Age Between 18 And 30). La clause WHERE est semblable à HAVING. WHERE détermine les enregistrements qui sont sélectionnés. Similairement, une fois les enregistrements regroupés au moyen de GROUP BY, HAVING détermine ceux qui seront affichés. Utilisez la clause WHERE pour éliminer les enregistrements qui ne doivent pas être regroupés par une clause GROUP BY. Utilisez les différentes expressions pour déterminer quels enregistrements sont retournés par l'instruction SQL. Par exemple, l'instruction SQL ci-dessous sélectionne tous les employés dont les salaires sont supérieurs à 21 000 F : SELECT [Nom de famille], Salaire FROM Employés WHERE Salaire > 21000; La clause WHERE peut contenir jusqu'à 40 expressions liées par des opérateurs logiques, comme And ou Or. Quand vous entrez un nom de champ qui contient un espace ou un signe de ponctuation, entourez-le de crochets droits ([ ]) : SELECT [Réf. produit], [Unités en stock] FROM Produits WHERE [Unités en stock] <= [Niveau de réapprovisionnement]; Lorsque vous spécifiez l'argument critère, les dates doivent être saisies dans le format américain, même si vous n'utilisez pas la version américaine de Microsoft Access. Par exemple, 10 mai 1994 s'écrit 10/5/94 en France et 5/10/94 aux Etats-Unis. Pour trouver les enregistrements qui contiennent cette date dans une base de données française, vous devrez utilisez l'instruction SQL suivante : SELECT * FROM Commandes WHERE [Date envoi] = #5/10/94# Clause GROUP BY (SQL) La clause GROUP BY regroupe, en un seul enregistrement, des enregistrements qui possèdent des valeurs identiques dans la liste de champs spécifiée. Une valeur de synthèse est créée pour chaque enregistrement si vous insérez une fonction de regroupement SQL, telle que Somme (Sum) ou Compte (Count) dans l'instruction SELECT. Syntaxe SELECT liste_de_champs FROM table WHERE critère GROUP BY liste_de_champs_de_groupe Une instruction SELECT qui contient une clause GROUP BY utilise les arguments suivants : liste_de_champs Le nom du ou des champ(s) à extraire ainsi que les pseudonymes de noms de champ, les fonctions de regroupements SQL, les attributs de sélection (ALL, DISTINCT) ou d'autres options pour l'instruction SELECT. table Le nom de la table d'où les enregistrements seront extraits. Pour plus d'informations, voir la clause FROM. 3 critère Critère de sélection. Si l'instruction contient une clause WHERE, Microsoft Access regroupe les valeurs après avoir appliqué les conditions WHERE aux enregistrements. liste_de_champs_de_groupe Les noms de maximum 10 champs utilisés pour regrouper les enregistrements. L'ordre des noms de champ dans liste_de_champs_de_groupe détermine les niveaux de regroupement, du plus élevé au plus bas. La clause GROUP BY est facultative. Les valeurs de synthèse sont omises en l'absence de fonction de regroupement SQL dans l'instruction SELECT. Dans les champs GROUP BY, les valeurs de type Null sont regroupées et ne sont pas omises. Toutefois, elles ne sont évaluées dans aucune fonction de regroupement SQL. Utilisez la clause WHERE pour exclure les lignes que vous ne souhaitez pas regrouper et utilisez la clause HAVING pour filtrer les enregistrements une fois qu'ils ont été regroupés. Sauf s'il contient des données de type Mémo ou Liaison OLE, un champ dans la liste de champs GROUP BY peut se référer à n'importe quel champ repris dans la clause FROM, même si le champ n'est pas inclus dans l'instruction SELECT, à condition que l'instruction SELECT comprenne au moins une fonction de regroupement SQL. Microsoft Access ne peut pas effectuer de regroupement sur des champs Mémo ou Liaison OLE. Si vous utilisez une clause GROUP BY, tous les champs dans la liste de champs SELECT doivent être inclus dans la clause GROUP BY ou être inclus comme arguments dans une fonction de regroupement SQL. Quand vous tapez un nom de champ qui contient un espace ou un signe de ponctuation, entourez-le de crochets droits ([ ]) : SELECT [Nom du produit], Sum([Unités en stock]) FROM Produits GROUP BY [Nom du produit]; Clause HAVING (SQL) Utilisez la clause HAVING pour spécifier quels enregistrements regroupés sont affichés. Une fois que les enregistrements ont été combinés au moyen de GROUP BY, la clause HAVING les affiche pour autant qu'ils répondent aux conditions qu'elle définit. Syntaxe SELECT liste_de_champs FROM table WHERE critère_de_sélection GROUP BY liste_de_champs_de_groupe HAVING critère_de_groupe Une instruction SELECT qui contient une clause HAVING utilise les arguments suivants : liste_de_champs Le nom du ou des champ(s) à extraire ainsi que les pseudonymes de noms de champ, les fonctions de regroupements SQL, les attributs de sélection (ALL, DISTINCT) ou d'autres options pour l'instruction SELECT. table Le nom de la table d'où les enregistrements seront extraits. Pour plus d'informations, voir la clause FROM. critère_de_sélection Critère de sélection. Si l'instruction contient une clause WHERE, Microsoft Access regroupe les valeurs après avoir appliqué aux enregistrements les conditions définies dans WHERE. liste_de_champs_de_groupe Les noms de maximum 10 champs utilisés pour regrouper des enregistrements. L'ordre des noms de champ dans liste_de_champs_de_groupe détermine les niveaux de regroupement, du plus élevé au plus bas. critère_de_groupe Une expression qui détermine les enregistrements regroupés qui seront affichés. La clause HAVING est facultative. La clause HAVING est semblable à WHERE. WHERE détermine les enregistrements qui sont sélectionnés. Une fois les enregistrements regroupés par GROUP BY, HAVING détermine les enregistrements qui seront affichés. 4 La clause HAVING peut contenir jusqu'à 40 expressions liées par des opérateurs logiques, comme And ou Or. 5 Clause ORDER BY (SQL) La clause ORDER BY trie les données affichées sur un ou plusieurs champs spécifiés, dans l'ordre croissant ou décroissant. Syntaxe SELECT liste_de_champs FROM table WHERE critère_de_sélection ORDER BY champ1 [ASC | DESC ][, champ2 [ASC | DESC ][, ...]] Une instruction SELECT qui contient une clause ORDER BY utilise les arguments suivants : Argument Description liste_de_champs Le nom du ou des champ(s) à, extraire ainsi que les pseudonymes de noms de champ, les fonctions de regroupements SQL, les attributs de sélection (ALL DISTINCT) ou d'autres options pour l'instruction SELECT. table Le nom de la table d'où les enregistrements seront extraits. Pour plus d'informations, voir la clause FROM. critère_de_sélection Critère de sélection. Si l'instruction contient une clause WHERE, Microsoft Access regroupe les valeurs après avoir appliqué aux enregistrements les conditions définies dans WHERE . champ1, champ2 Les noms des champs sur lesquels les enregistrements vont être triés. La clause ORDER BY est facultative (sauf si vous utilisez l'attribut TOP ou TOP n PERCENT dans la liste de champs SELECT). Si vous ne spécifiez pas de clause ORDER BY, les données ne sont pas triées. L'ordre de tri par défaut est croissant (A-Z, 0-9). Toutefois, vous pouvez inclure le mot réservé ASC à la fin de chaque champ que vous souhaitez trier dans l'ordre croissant. Les deux exemples ci-dessous trient les noms des employés dans l'ordre alphabétique de leur nom de famille : SELECT [Nom de famille], [Prénom] FROM Employés ORDER BY [Nom de famille]; SELECT [Nom de famille], [Prénom] FROM Employés ORDER BY [Nom de famille] ASC; Pour trier dans l'ordre décroissant (Z-A, 9-0), ajoutez le mot réservé DESC à la fin de chaque champ que vous désirez trier dans l'ordre décroissant. L'exemple ci-dessous sélectionne les salaires et les trie dans l'ordre décroissant : SELECT [Nom de famille], Salaire FROM Employés ORDER BY Salaire DESC, [Nom de famille]; Si vous spécifiez un champ qui contient des données du type Mémo ou Liaison OLE dans la clause ORDER BY, une erreur se produit. Microsoft Access ne trie pas sur des champs de ce type. La clause ORDER BY est généralement le dernier élément d'une instruction SQL. Vous pouvez inclure des champs supplémentaires dans la clause ORDER BY. Les enregistrements sont d'abord triés par le premier champ indiqué après ORDER BY. Les enregistrements qui possèdent des valeurs identiques dans ce champ sont ensuite triés par la valeur contenue dans le deuxième champ indiqué, et ainsi de suite. L'utilisation d'une clause ORDER BY équivaut à sélectionner Croissant ou Décroissant dans la cellule Tri de la grille d'interrogation. 6