Access SQL : concepts de base, vocabulaire et syntaxe

Lorsque vous souhaitez extraire des données d’une base de données, vous utilisez le langage SQL (Structured Query Language). SQL est un langage informatique proche de la langue courante anglaise, mais que les programmes de base de données comprennent. Les requêtes que vous exécutez utilisent le langage SQL en arrière-plan.

Si vous comprenez comment SQL fonctionne, vous pourrez créer des requêtes plus efficaces et corriger plus facilement celles qui ne retournent pas les résultats attendus.

Cet ensemble d’articles traite d’Access SQL. Le présent article quant à lui, décrit l’utilisation de base de SQL pour sélectionner des données et se base sur des exemples pour illustrer la syntaxe SQL.

Contenu de cet article


Présentation de SQL

SQL est un langage informatique qui permet de travailler sur des ensembles de faits et sur les relations qui existent entre eux. Les programmes de bases de données relationnelles, telles que Microsoft Office Access, utilisent SQL pour manipuler les données. Contrairement à beaucoup d’autres langages informatiques, SQL n’est pas difficile à lire et à comprendre, même pour les débutants. De la même façon que beaucoup d’autres langages, SQL est un standard international reconnu par les organismes ISO et ANSI.

“SQL n’est pas difficile à lire et à comprendre, même pour les débutants.”

SQL permet de décrire des ensembles de données qui peuvent vous aider à répondre à des questions. Lorsque vous utilisez SQL, vous devez employer la syntaxe qui convient. La syntaxe est un ensemble de règles en vertu desquelles les mots et les symboles qui forment une expression sont correctement combinés. La syntaxe SQL est basée sur la syntaxe de la langue anglaise et utilise de nombreux éléments de la syntaxe Visual Basic pour Applications (VBA) (VBA (Visual Basic pour Applications) : version macrolangage de Microsoft Visual Basic qui sert à programmer des applications Windows. VBA est fourni avec plusieurs programmes Microsoft.).

Par exemple, une instruction SQL simple qui permet d’extraire une liste de noms de contacts dont le prénom est Mary peut ressembler à ce qui suit :

SELECT Last_Name
FROM Contacts
WHERE First_Name = 'Mary';

 Remarque   SQL ne sert pas uniquement à manipuler des données, mais aussi à créer et à modifier la conception des objets de base de données, tels que les tables. La partie de SQL qui permet de créer et de modifier des objets de base de données est nommée DDL (Data Definition Language, langage de définition de données). Cette rubrique ne traite pas de cette partie. Pour plus d’informations, voir l’article Créer ou modifier des tables ou index à l’aide d’une requête de définition de données.

Instructions SELECT

Pour décrire un jeu de données avec SQL, vous devez écrire une instruction SELECT. Cette instruction contient la description complète du jeu de données que vous souhaitez extraire d’une base de données. Elle contient les informations relatives aux éléments suivants :

  • Les tables qui contiennent les données.
  • La façon dont les différentes sources sont liées.
  • Les champs ou les calculs qui génèreront les données.
  • Les critères auxquels les données doivent répondre pour être incluses.
  • Les conditions dans lesquelles trier les résultats et la méthode de tri.

Clauses SQL

Tout comme une phrase contient des propositions, une instruction SQL contient des clauses. Chaque clause occupe une fonction dans l’instruction SQL. Certaines clauses sont obligatoires dans une instruction SELECT. Le tableau qui suit présente la liste des clauses SQL les plus courantes.

Clause SQL Fonction Obligatoire
SELECT Génère la liste des champs qui contiennent les données pertinentes. Oui
FROM Génère la liste des tables qui contiennent les champs répertoriés dans la clause SELECT. Oui
WHERE Spécifie les critères de champs auxquels doit répondre chaque enregistrement pour être inclus dans les résultats. Non
ORDER BY Spécifie comment trier les résultats. Non
GROUP BY Dans une instruction SQL qui contient des fonctions d’agrégation, génère la liste des champs qui ne sont pas répertoriés dans la clause SELECT. Uniquement en présence de tels champs
HAVING Dans une instruction SQL qui contient des fonctions d’agrégation, spécifie les conditions qui s’appliquent aux champs qui sont répertoriés dans l’instruction SELECT. Non

Termes SQL

Chaque clause SQL est composée de termes — comme dans des dialogues. Le tableau qui suit présente la liste des types de termes SQL.

Terme SQL Comparable aux dialogues Définition Exemple
identificateur nom Nom utilisé pour identifier un objet de base de données, tel que le nom d’un champ. Clients.[Numéro téléphone]
opérateur verbe ou adverbe Mot-clé qui représente une action ou la modifie. AS
constante nom Valeur qui ne change pas, telle qu’un nombre ou la valeur NULL. 42
expression adjectif Combinaison d’identificateurs, d’opérateurs, de constantes et de fonctions qui correspondent à une valeur unique. >= Produits.[Prix unitaire]

Haut de la page Haut de la page

Clauses SQL de base : SELECT, FROM et WHERE

La forme générale d’une instruction SQL est la suivante :

SELECT field_1
FROM table_1
WHERE criterion_1
;

 Remarques 

  • Dans une instruction SQL, Access ignore les sauts de ligne. Toutefois, envisagez d’utiliser une ligne pour chaque clause, afin que les instructions SQL soient plus lisibles.
  • Chaque instruction SELECT se termine par un point-virgule (;). Le point-virgule peut apparaître à la fin de la dernière clause ou seul sur une ligne à la fin de l’instruction SQL.

Exemple dans Access

L’exemple montre à quoi peut ressembler une instruction SQL dans Access pour une requête SELECT simple :

Onglet d’objet SQL montrant une instruction SELECT

Légende 1 Clause SELECT
Légende 2 Clause FROM
Légende 3 Clause WHERE

L’instruction SQL présentée en exemple dit « Sélectionner les données stockées dans les champs Adresse de messagerie et Société dans la table Contacts, et en particulier, les enregistrements dans lesquels la valeur du champ Ville est Seattle ».

Étudions cet exemple, clause par clause, pour voir comment fonctionne la syntaxe SQL.

Clause SELECT

SELECT [E-mail Address], Company

Il s’agit de la clause SELECT qui contient un opérateur (SELECT) suivi de deux identificateurs ([E-mail Address] (Adresse de messagerie) et Company (Société)).

Si un identificateur contient des espaces ou des caractères spéciaux (« Adresse de messagerie » par exemple), il doit être entouré de crochets.

Une clause SELECT ne doit pas nécessairement indiquer les tables qui contiennent les champs et ne peut pas spécifier les conditions auxquelles les données doivent correspondre pour être incluses.

La clause SELECT apparaît toujours avant la clause FROM dans une instruction SELECT.

Clause FROM

FROM Contacts

Il s’agit de la clause FROM qui contient un opérateur (FROM) suivi d’un identificateur (Contacts).

Une clause FROM ne génère pas la liste des champs à sélectionner.

Clause WHERE

WHERE City="Seattle"

Il s’agit de la clause WHERE qui contient un opérateur (WHERE) suivi d’une expression (City="Seattle") (Ville="Seattle").

 Remarque   Contrairement aux clauses SELECT et FROM, la clause WHERE n’est pas obligatoire dans une instruction SELECT.

Vous pouvez effectuer la plupart des actions que permet SQL en utilisant les clauses SELECT, FROM et WHERE. Les articles suivants présentent des informations complémentaires sur l’utilisation de ces clauses :

Haut de la page Haut de la page

Tri des résultats : ORDER BY

Tout comme Microsoft Office Excel, Access permet de trier les résultats des requêtes dans une feuille de données. Vous pouvez également spécifier dans la requête comment les résultats doivent être triés une fois la requête exécutée, en utilisant une clause ORDER BY. Si vous utilisez une clause ORDER BY, il s’agira de la dernière clause dans l’instruction SQL.

Une clause ORDER BY contient la liste des champs à utiliser pour le tri, dans le même ordre que celui dans lequel vous souhaitez appliquer le tri.

Supposons par exemple, que vous souhaitiez que vos résultats soient triés d’abord sur la valeur du champ Company (Société) par ordre décroissant et,  — si certains enregistrements contiennent la même valeur pour le champ Company (Société) — qu’ils soient triés ensuite sur les valeurs du champ E-mail Address (Adresse de messagerie) par ordre croissant. La clause ORDER BY doit alors ressembler à ce qui suit :

ORDER BY Company DESC, [E-mail Address]

 Remarque   Par défaut, Access trie les valeurs par ordre croissant (A-Z, de la plus petite à la plus grande). Pour trier les valeurs par ordre décroissant, utilisez le mot-clé DESC.

Pour plus d’informations sur la clause ORDER BY, voir la rubrique Clause ORDER BY.

Haut de la page Haut de la page

Utilisation de données de synthèse : GROUP BY et HAVING

Vous pouvez parfois être amené à utiliser des données de synthèse telles que le total des ventes mensuelles ou les articles au prix le plus élevé dans un stock. Si tel est le cas, vous devez appliquer une fonction d’agrégation (fonction d’agrégation : fonction, telle que SOMME, NB, MOYENNE ou VAR, utilisée pour calculer des totaux.) à un champ dans votre clause SELECT. Par exemple, si vous souhaitez que votre requête affiche le nombre d’adresses de messagerie existant pour chaque société, votre clause SELECT ressemblera à ce qui suit :

SELECT COUNT([E-mail Address]), Company

Les fonctions d’agrégation que vous pouvez utiliser dépendent du type de données qui se trouvent dans le champ ou l’expression à utiliser. Pour plus d’informations sur les fonctions d’agrégation disponibles, voir l’article Fonctions d’agrégation SQL (en anglais éventuellement).

Indication des champs qui ne sont pas utilisés dans une fonction d’agrégation : clause GROUP BY

Lorsque vous utilisez des fonctions d’agrégation, vous devez généralement créer aussi une clause GROUP BY. Une clause GROUP BY génère la liste de tous les champs auxquels vous n’appliquez pas de fonction d’agrégation. Si vous appliquez des fonctions d’agrégation à l’ensemble des champs dans une requête, il n’est pas nécessaire de créer la clause GROUP BY.

Une clause GROUP BY suit immédiatement la clause WHERE, ou la clause FROM s’il n’existe pas de clause WHERE. Une clause GROUP BY génère la liste des champs tels qu’ils apparaissent dans la clause SELECT.

Par exemple, si nous repartons de l’exemple précédent, si votre clause SELECT applique une fonction d’agrégation au champ [E-mail Address] (Adresse de messagerie) et non au champ Company (Société), votre clause GROUP BY ressemblera à ce qui suit :

GROUP BY Company

Pour plus d’informations sur la clause GROUP BY, voir la rubrique Clause GROUP BY.

Limitation des valeurs d’agrégation au moyen de critères de groupe : clause HAVING

Si vous souhaitez utiliser des critères pour limiter vos résultats, mais si le champ auquel appliquer ces critères est utilisé dans une fonction d’agrégation, vous ne pouvez pas utiliser une clause WHERE. Vous devez utiliser une clause HAVING à la place. Une clause HAVING fonctionne comme une clause WHERE, mais elle est utilisée pour les données d’agrégation.

Supposons par exemple, que vous utilisiez la fonction COUNT (NB) (qui renvoie un nombre de lignes) avec le premier champ dans votre clause SELECT :

SELECT COUNT([E-mail Address]), Company

Si vous souhaitez que la requête restreigne les résultats sur la base de la valeur de cette fonction NB, vous ne pouvez pas utiliser de critère pour ce champ dans la clause WHERE. Vous devez placer le critère dans une clause HAVING à la place. Par exemple, si vous souhaitez que votre requête retourne uniquement des lignes si plusieurs adresses de messagerie sont associées à la société, votre clause HAVING ressemblera à ce qui suit :

HAVING COUNT([E-mail Address])>1

 Remarque   Une requête peut comprendre une clause WHERE et une clause HAVING — les critères pour les champs qui ne sont pas utilisés dans une fonction d’agrégation sont utilisés dans la clause WHERE et ceux qui sont utilisés avec des fonctions d’agrégation sont utilisés dans la clause HAVING.

Pour plus d’informations sur la clause HAVING, voir la rubrique Clause HAVING.

Haut de la page Haut de la page

Combinaison de résultats de requêtes : UNION

Lorsque vous voulez passer en revue l’ensemble des données renvoyées par plusieurs requêtes de sélection similaires, sous la forme d’un jeu combiné, vous utilisez l’opérateur UNION.

L’opérateur UNION permet de combiner deux instructions SELECT en une seule. Les instructions SELECT que vous combinez doivent posséder le même nombre de champs de destination, dans le même ordre et avec des types de données identiques ou compatibles. Lorsque vous exécutez la requête, les données de chaque jeu de champs correspondants sont combinées dans un champ de destination, de sorte que le résultat de la requête dispose du même nombre de champs que chacune des instructions SELECT.

 Remarque   Pour les besoins d’une requête utilisant l’opérateur UNION, les types de données numérique et texte sont compatibles.

Lorsque vous utilisez l’opérateur UNION, vous pouvez également spécifier si les résultats de la requête doivent inclure des lignes en double, lorsqu’elles existent, en utilisant le mot-clé ALL.

La syntaxe SQL de base pour une requête avec l’opérateur UNION, combinant deux instructions SELECT, est la suivante :

SELECT field_1
FROM table_1
UNION [ALL]
SELECT field_a
FROM table_a
;

Supposons, par exemple, que vous disposiez d’une table nommée Produits et d’une autre table appelée Services. Les deux tables possèdent des champs qui contiennent le nom du produit ou du service, le prix, la disponibilité d’un engagement ou d’une garantie et indiquent si vous offrez le produit ou le service de manière exclusive. Bien que la table Produits stocke des informations d’engagement et que la table Services stocke des informations de garantie, les informations de base sont identiques (si un produit ou un service particulier propose un engagement sur la qualité). Vous pouvez utiliser une requête avec un opérateur UNION, telle que celle qui suit, pour combiner les quatre champs des deux tables :

SELECT name, price, warranty_available, exclusive_offer
FROM Products
UNION ALL
SELECT name, price, guarantee_available, exclusive_offer
FROM Services
;

Pour plus d’informations sur la façon de combiner des instructions SELECT au moyen de l’opérateur UNION, voir Combiner les résultats de plusieurs requêtes sélection à l’aide d’une requête union.

Haut de la page Haut de la page

 
 
S'applique à :
Access 2007