Lorsque vous souhaitez récupérer des données à partir d’une base de données, vous demandez les données à l’aide de langage SQL ou SQL. SQL est un langage informatique qui ressemble étroitement à l’anglais, mais que les programmes de base de données comprennent. Chaque requête que vous exécutez utilise SQL en arrière-plan.
Comprendre le fonctionnement de SQL peut vous aider à créer de meilleures requêtes et à comprendre plus facilement comment corriger une requête qui ne retourne pas les résultats souhaités.
Cet article fait partie d’une série d’articles à propos d’Access SQL. Cet article décrit l’utilisation de base de SQL pour sélectionner des données et utilise des exemples pour illustrer la syntaxe SQL.
Contenu de cet article
Qu’est-ce que SQL ?
SQL est un langage informatique permettant d’utiliser des ensembles de faits et les relations entre eux. Les programmes de base de données relationnelle, tels que Microsoft Office Access, utilisent SQL pour travailler avec des données. Contrairement à de nombreux langages informatiques, SQL n’est pas difficile à lire et à comprendre, même pour un débutant. Comme de nombreux langages informatiques, SQL est une norme internationale reconnue par les organismes de normalisation tels que ISO et ANSI.
Vous utilisez SQL pour décrire des ensembles de données qui peuvent vous aider à répondre aux questions. Lorsque vous utilisez SQL, vous devez utiliser la syntaxe correcte. La syntaxe est l’ensemble de règles par lesquelles les éléments d’un langage sont correctement combinés. La syntaxe SQL est basée sur la syntaxe anglaise et utilise de nombreux éléments identiques à la syntaxe Visual Basic pour Applications (VBA).
Par exemple, une instruction SQL simple qui récupère une liste de noms de noms pour les contacts dont le prénom est Mary peut ressembler à ceci :
SELECT Last_Name
FROM Contacts WHERE First_Name = 'Mary';
Remarque : SQL est non seulement utilisé pour manipuler des données, mais également pour créer et modifier la conception d’objets de base de données, tels que des tables. La partie de SQL utilisée pour créer et modifier des objets de base de données est appelée data-definition language (DDL). Cette rubrique ne couvre pas DDL. Pour plus d’informations, consultez l’article Créer ou modifier des tables ou des index à l’aide d’une requête de définition de données.
Instructions SELECT
Pour décrire un jeu de données à l’aide de SQL, vous écrivez une instruction SELECT. Une instruction SELECT contient une description complète d’un jeu de données que vous souhaitez obtenir à partir d’une base de données. Cela se produit dans les situations suivantes :
-
Quelles tables contiennent les données.
-
Relation entre les données de différentes sources.
-
Quels champs ou calculs produisent les données.
-
Critères auxquels les données doivent correspondre pour être inclus.
-
Indique si et comment trier les résultats.
Clauses SQL
Comme une phrase, une instruction SQL a des clauses. Chaque clause exécute une fonction pour l’instruction SQL. Certaines clauses sont requises dans une instruction SELECT. Le tableau suivant répertorie les clauses SQL les plus courantes.
Clause SQL |
Fonction |
Obligatoire |
SELECT |
Listes les champs qui contiennent des données intéressantes. |
Oui |
FROM |
Listes les tables qui contiennent les champs répertoriés dans la clause SELECT. |
Oui |
WHERE |
Spécifie les critères de champ qui doivent être remplis par chaque enregistrement à inclure 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, répertorie les champs qui ne sont pas résumés dans la clause SELECT. |
Uniquement s’il existe de tels champs |
HAVING |
Dans une instruction SQL qui contient des fonctions d’agrégation, spécifie des conditions qui s’appliquent aux champs qui sont résumés dans l’instruction SELECT. |
Non |
Termes SQL
Chaque clause SQL est composée de termes comparables à des parties de la parole. Le tableau suivant répertorie les types de termes SQL.
Terme SQL |
Partie comparable de la parole |
Définition |
Exemple |
Identificateur |
Nom |
Nom que vous utilisez pour identifier un objet de base de données, tel que le nom d’un champ. |
Clients. [Numéro de téléphone] |
opérateur |
verbe ou adverbe |
Mot clé qui représente une action ou modifie une action. |
AS |
constante |
Nom |
Valeur qui ne change pas, telle qu’un nombre ou NULL. |
42 |
expression |
Adjectif |
Combinaison d’identificateurs, d’opérateurs, de constantes et de fonctions qui prend la valeur d’une valeur unique. |
>= Products. [Prix unitaire] |
Clauses SQL de base : SELECT, FROM et WHERE
Une instruction SQL prend la forme générale :
SELECT field_1
FROM table_1 WHERE criterion_1 ;
Remarques :
-
Access ignore les sauts de ligne dans une instruction SQL. Toutefois, envisagez d’utiliser une ligne pour chaque clause afin d’améliorer la lisibilité de vos instructions SQL pour vous-même et les autres.
-
Chaque instruction SELECT se termine par un point-virgule (;). Le point-virgule peut apparaître à la fin de la dernière clause ou sur une ligne à la fin de l’instruction SQL.
Exemple dans Access
L’exemple suivant illustre à quoi peut ressembler une instruction SQL pour une requête select simple dans Access :
1. Clause SELECT
2. Clause FROM
3. Clause WHERE
Cet exemple d’instruction SQL indique « Sélectionnez les données stockées dans les champs nommés Adresse de messagerie et Société dans la table nommée Contacts, en particulier les enregistrements dans lesquels la valeur du champ Ville est Seattle ».
Examinons l’exemple, une clause à la fois, pour voir comment fonctionne la syntaxe SQL.
Clause SELECT
SELECT [E-mail Address], Company
Il s’agit de la clause SELECT. Il se compose d’un opérateur (SELECT) suivi de deux identificateurs ([Adresse de messagerie] et Société).
Si un identificateur contient des espaces ou des caractères spéciaux (tels que « Adresse de messagerie »), il doit être placé entre crochets.
Une clause SELECT n’a pas à indiquer quelles tables contiennent les champs, et elle ne peut pas spécifier de conditions qui doivent être remplies par les données à inclure.
La clause SELECT apparaît toujours devant la clause FROM dans une instruction SELECT.
Clause FROM
FROM Contacts
Il s’agit de la clause FROM. Il se compose d’un opérateur (FROM) suivi d’un identificateur (Contacts).
Une clause FROM ne répertorie pas les champs à sélectionner.
Clause WHERE
WHERE City="Seattle"
Il s’agit de la clause WHERE. Il se compose d’un opérateur (WHERE) suivi d’une expression (City="Seattle »).
Remarque : Contrairement aux clauses SELECT et FROM, la clause WHERE n’est pas un élément obligatoire d’une instruction SELECT.
Vous pouvez accomplir un grand nombre des actions que SQL vous permet d’effectuer à l’aide des clauses SELECT, FROM et WHERE. Pour plus d’informations sur l’utilisation de ces clauses, consultez ces articles supplémentaires :
Tri des résultats : ORDER BY
Comme Microsoft Excel, Access vous 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 trier les résultats lors de l’exécution de la requête, à l’aide d’une clause ORDER BY. Si vous utilisez une clause ORDER BY, il s’agit de la dernière clause de l’instruction SQL.
Une clause ORDER BY contient une liste des champs que vous souhaitez utiliser pour le tri, dans le même ordre que celui où vous souhaitez appliquer les opérations de tri.
Par exemple, supposons que vous souhaitiez que vos résultats soient triés d’abord par la valeur du champ Société dans l’ordre décroissant et, s’il existe des enregistrements avec la même valeur pour Company, triés ensuite par les valeurs du champ Adresse de messagerie dans l’ordre croissant. Votre clause ORDER BY se présente comme suit :
ORDER BY Company DESC, [E-mail Address]
Remarque : Par défaut, Access trie les valeurs dans l’ordre croissant (A-Z, de la plus petite à la plus grande). Utilisez plutôt le mot clé DESC pour trier les valeurs dans l’ordre décroissant.
Pour plus d’informations sur la clause ORDER BY, consultez la rubrique Clause ORDER BY.
Utilisation de données résumées : GROUP BY et HAVING
Parfois, vous souhaitez utiliser des données résumées, telles que le total des ventes en un mois, ou les articles les plus chers d’un inventaire. Pour ce faire, vous appliquez une fonction d’agrégation à un champ dans votre clause SELECT. Par exemple, si vous souhaitez que votre requête affiche le nombre d’adresses de messagerie répertoriées pour chaque entreprise, votre clause SELECT peut ressembler à 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 figurant dans le champ ou l’expression que vous souhaitez utiliser. Pour plus d’informations sur les fonctions d’agrégation disponibles, consultez l’article Fonctions d’agrégation SQL.
Spécification de 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 également créer une clause GROUP BY. Une clause GROUP BY répertorie tous les champs auxquels vous n’appliquez pas de fonction d’agrégation. Si vous appliquez des fonctions d’agrégation à tous les champs d’une requête, vous n’avez pas besoin de créer la clause GROUP BY.
Une clause GROUP BY suit immédiatement la clause WHERE, ou la clause FROM s’il n’y a pas de clause WHERE. Une clause GROUP BY répertorie les champs tels qu’ils apparaissent dans la clause SELECT.
Par exemple, pour poursuivre l’exemple précédent, si votre clause SELECT applique une fonction d’agrégation à [Adresse de messagerie] mais pas à Société, votre clause GROUP BY ressemblerait à ce qui suit :
GROUP BY Company
Pour plus d’informations sur la clause GROUP BY, consultez la rubrique Clause GROUP BY.
Limitation des valeurs d’agrégation à l’aide de critères de groupe : clause HAVING
Si vous souhaitez utiliser des critères pour limiter vos résultats, mais que le champ auquel vous souhaitez appliquer des critères est utilisé dans une fonction d’agrégation, vous ne pouvez pas utiliser de clause WHERE. Au lieu de cela, vous utilisez une clause HAVING. Une clause HAVING fonctionne comme une clause WHERE, mais elle est utilisée pour les données agrégées.
Par exemple, supposons que vous utilisez la fonction AVG (qui calcule une valeur moyenne) avec le premier champ de votre clause SELECT :
SELECT COUNT([E-mail Address]), Company
Si vous souhaitez que la requête limite les résultats en fonction de la valeur de cette fonction COUNT, vous ne pouvez pas utiliser de critères pour ce champ dans la clause WHERE. Au lieu de cela, vous placez les critères dans une clause HAVING. Par exemple, si vous souhaitez que la requête retourne des lignes uniquement si plusieurs adresses de messagerie sont associées à l’entreprise, la clause HAVING peut ressembler à ce qui suit :
HAVING COUNT([E-mail Address])>1
Remarque : Une requête peut avoir 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 vont dans la clause WHERE, et les critères des champs utilisés avec des fonctions d’agrégation vont dans la clause HAVING.
Pour plus d’informations sur la clause HAVING, consultez la rubrique HAVING Clause.
Combinaison des résultats de la requête : UNION
Lorsque vous souhaitez passer en revue toutes les données retournées par plusieurs requêtes sélectionnées similaires, en tant qu’ensemble combiné, vous utilisez l’opérateur UNION.
L’opérateur UNION vous permet de combiner deux instructions SELECT en une seule. Les instructions SELECT que vous combinez doivent avoir le même nombre de champs de sortie, dans le même ordre et avec les mêmes types de données ou compatibles. Lorsque vous exécutez la requête, les données de chaque ensemble de champs correspondants sont combinées en un seul champ de sortie, de sorte que la sortie de la requête comporte le même nombre de champs que chacune des instructions select.
Remarque : Pour les besoins d’une requête union, les types de données Number et Text 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, le cas échéant, en utilisant le mot clé ALL.
La syntaxe SQL de base pour une requête union qui combine deux instructions SELECT est la suivante :
SELECT field_1
FROM table_1 UNION [ALL] SELECT field_a FROM table_a ;
Par exemple, supposons que vous disposez d’une table nommée Products et d’une autre table nommée Services. Les deux tables ont des champs qui contiennent le nom du produit ou du service, le prix, la garantie ou la disponibilité, et si vous proposez le produit ou le service exclusivement. Bien que la table Products stocke les informations de garantie et que la table Services stocke les informations de garantie, les informations de base sont les mêmes (si un produit ou service particulier inclut une promesse de qualité). Vous pouvez utiliser une requête union, telle que la suivante, 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 combinaison d’instructions SELECT à l’aide de l’opérateur UNION, consultez Combiner les résultats de plusieurs requêtes select à l’aide d’une requête union.