Comment apprendre les requêtes SQL sur Access : guide pratique pour débutants

Microsoft Access reste, dans beaucoup d’entreprises, l’outil de requêtage rapide pour exploiter des fichiers locaux ou des sources ODBC. Le moteur ACE (successeur de Jet), toujours intégré à Microsoft 365, fait tourner des applications internes parfois vieilles de plusieurs décennies. Apprendre à écrire des requêtes SQL directement dans Access permet de comprendre ce que la grille QBE génère en coulisse et d’intervenir quand le résultat ne correspond pas à ce qui est attendu.

Jet/ACE SQL et SQL standard : ce qu’Access accepte et ce qu’il refuse

La plupart des tutoriels SQL en ligne utilisent MySQL, PostgreSQL ou SQL Server comme référence. Les exemples fonctionnent souvent tels quels sur ces moteurs, mais pas toujours sur Access. Le dialecte SQL d’Access (Jet/ACE SQL) possède des particularités qui déroutent les débutants habitués à copier-coller du code trouvé sur un forum.

Access ne supporte ni les CTE (WITH) ni les fonctions fenêtre disponibles dans SQL Server ou PostgreSQL. Toute requête récursive ou analytique trouvée en ligne devra être réécrite, souvent à l’aide de sous-requêtes imbriquées ou de requêtes temporaires enregistrées.

En revanche, Access propose la clause TRANSFORM pour les requêtes croisées, une syntaxe absente de la norme SQL. Cette clause permet de pivoter des lignes en colonnes sans passer par un tableur. Ceux qui souhaitent apprendre les requêtes SQL sur Access gagnent du temps en identifiant ces écarts dès le départ, plutôt qu’en cherchant pourquoi un exemple générique provoque une erreur de syntaxe.

Autre différence notable : la syntaxe de jointure. Access impose souvent des parenthèses imbriquées dès qu’on enchaîne plusieurs JOIN dans une même requête, là où d’autres moteurs acceptent une écriture linéaire. Oublier ces parenthèses déclenche une erreur de compilation sans message explicite.

Homme en espace de coworking consultant des requêtes SQL sur Microsoft Access avec un antisèche imprimé posé sur le bureau

Mode SQL d’Access : basculer du graphique à l’écriture directe

Le concepteur de requêtes graphique (grille QBE) est le point d’entrée habituel dans Access. Chaque action, glisser un champ, cocher une case de tri, poser un critère, génère du SQL en arrière-plan. Basculer en mode SQL (onglet « Affichage » puis « Mode SQL ») affiche la requête telle que le moteur ACE va l’exécuter.

Lire avant d’écrire

Avant de rédiger une requête de zéro, la méthode la plus efficace consiste à construire la requête en mode graphique, puis à lire le SQL produit. Cette lecture permet d’associer chaque élément visuel (table, liaison, critère) à sa traduction SQL. On repère rapidement la structure SELECT, FROM, WHERE, ORDER BY.

Une fois cette correspondance acquise, modifier directement le SQL devient naturel. On ajoute une fonction, on remplace un critère, on insère un GROUP BY, le tout sans repasser par la grille.

Les commandes de base dans le contexte Access

  • SELECT et FROM : sélectionner des champs depuis une ou plusieurs tables. Access utilise le point pour séparer le nom de la table du nom du champ (Clients.Nom), et les crochets pour encadrer les noms contenant des espaces ou des caractères spéciaux ([Date de commande]).
  • WHERE : filtrer les enregistrements. Les opérateurs de comparaison classiques fonctionnent, mais les jokers diffèrent : Access utilise l’astérisque (*) au lieu du pourcentage (%) avec l’opérateur LIKE.
  • JOIN : relier les tables entre elles. Access privilégie la syntaxe INNER JOIN, LEFT JOIN, RIGHT JOIN avec la contrainte de parenthèses multiples évoquée plus haut.
  • ORDER BY et GROUP BY : trier et regrouper. La clause HAVING fonctionne comme dans le SQL standard, ce qui simplifie le filtrage après agrégation.

Erreurs fréquentes quand on débute le SQL sur Access

Certaines erreurs reviennent systématiquement chez les débutants. Les identifier en amont évite des heures de débogage frustrant.

La première concerne les crochets manquants autour des noms de champs. Dès qu’un nom de colonne contient un espace, un accent ou un caractère réservé, Access exige des crochets. Écrire Date de commande au lieu de [Date de commande] provoque une erreur immédiate.

La deuxième porte sur les types de données. Access distingue les guillemets doubles pour le texte dans certaines versions et les guillemets simples dans d’autres contextes. Le dièse (#) encadre les dates : WHERE [Date de commande] > #01/01/2024#. Utiliser des guillemets à la place du dièse pour une date est une source de confusion très courante.

La troisième erreur concerne les jointures multiples. Chaque paire de JOIN doit être encapsulée dans des parenthèses lorsqu’on dépasse deux tables. Le message d’erreur affiché par Access dans ce cas est peu explicite, ce qui pousse beaucoup de débutants à abandonner la requête SQL pour revenir à la grille graphique.

Adolescent étudiant les requêtes SQL sur Access dans sa chambre avec un manuel de base de données et des fiches de révision épinglées au mur

Progresser au-delà des requêtes SELECT sur Access

Une fois les requêtes de sélection maîtrisées, Access ouvre la porte aux requêtes d’action : INSERT INTO, UPDATE et DELETE. Ces commandes fonctionnent de manière similaire au SQL standard, avec une précaution supplémentaire : Access exécute les requêtes d’action sans demander de confirmation par défaut si les avertissements sont désactivés dans les options de la base.

Tester d’abord en mode sélection (transformer temporairement l’UPDATE en SELECT pour vérifier les lignes ciblées) reste une bonne pratique avant toute modification de données.

Les requêtes croisées, accessibles via la clause TRANSFORM, méritent qu’on s’y attarde. Elles permettent de produire un tableau de synthèse directement exploitable, sans export vers Excel. La syntaxe est spécifique à Access : TRANSFORM suivi de la fonction d’agrégation, puis un SELECT classique complété par un PIVOT sur le champ à transposer en colonnes.

Pour ceux qui souhaitent connecter Access à des sources externes (SQL Server, fichiers CSV via ODBC), les requêtes SQL passthrough constituent une option avancée. Elles envoient le SQL directement au serveur distant, contournant ainsi les limitations du moteur ACE. Le SQL écrit dans ce mode doit respecter la syntaxe du serveur cible, pas celle d’Access.

Le dialecte SQL d’Access a ses limites, mais il offre un terrain d’apprentissage concret pour qui travaille déjà avec cet outil au quotidien. Maîtriser les particularités de Jet/ACE SQL évite de reproduire aveuglément des exemples inadaptés et donne une base solide pour migrer ensuite vers des moteurs plus puissants.

Comment apprendre les requêtes SQL sur Access : guide pratique pour débutants