Base info : SQL
Les exemples ci-dessous s'appuient sur le schéma relationnel suivant :
« CLIENT (Num_cli, Nom_cli, Adrue_cli, Cp_cli, Ville_cli, Paiement_cli, Date_1ere_commande, Code_type#) »
« TYPE CLIENT (Code_type, Intitule_type) »
1- Présentation
Le langage SQL (Structured Query Language -> Langage structuré d'interrogation ou de requête) permet de manipuler les bases de données afin d'en extraire des informations résultantes mais aussi de créer des tables, ajouter, modifier supprimer des enregistrements, créer des formulaires, etc. C'est un standard international qui permet de manipuler une base de données, quel que soit le logiciel qui la gère.
2 - Règles de syntaxe et projection
Toute commande SQL dont le but est d'interroger une base de données commence par l'ordre SELECT. Certains logiciels, comme Access, ponctuent toute requête SQL avec un « ; ». Mais cela n'est pas obligatoire. Les commandes SQL et les tables (entités) sont en majuscule.
Après la 1re ligne, chaque ligne de la commande commence par une clause de l'ordre SELECT selon l'ordre suivant:
SELECT <-> projection
FROM <-> table(s) d'où sont issus les champs
WHERE <-> critères de restriction et de jointure ORDER BY <-> critère de tri
S'il n'y a pas de restriction ni de jointure pour une requête, la ligne WHERE n'existe pas, la ligne ORDER BY passe en troisième ligne.
Sans restriction ni jointure, ni tri, seules deux lignes sont utiles: SELECT et FROM.
Les champs projetés, les tables et les critères de tri sont séparés par des virgules s'il y a lieu.
Les champs peuvent être préfixés avec le nom de la table à laquelle ils appartiennent pour éviter de la confondre (c'est indispensable si deux champs de même nom sont utilisés, Code_type par exemple).
Un espace est nécessaire après un mot clé pour qu'il soit identifié par SQL d'ACCESS.
liste des clients (numéro, nom, ville) classés dans l'ordre alphabétique du nom :
SELECT Num_cli, Nom_cli, Ville_cli
FROM CLIENT
ORDER BY Nom_cli;
3 - Restriction
Champ Numérique
Liste des clients (numéro, nom, mode de paiement) réglant au comptant (codé 1)
SELECT Num_cli, Nom_cli, Paiementcli
FROM CLIENT
WHERE Paiementcli =1;
Champ Texte
Liste des clients (numéro, nom, code postal, mode de paiement) de l'Ain
SELECT Num_cli, Nom_cli, Cp_cli, Paiementcli
FROM CLIENT
WHERE Cp_cli LIKE "01 * ";
Lorsque le champ est de type Texte (ici, Cp_cli est de type Texte), SQL entoure la valeur de référence de "" afin d'en délimiter le contenu. SQL accepte le caractère générique * (qui remplace toute combinaison de caractères).
Nota : ACCESS accepte le symbole = comme opérateur pour les champs de type Texte (si Paiementcli est de type Texte, WHERE paiementcli=" 1 " sera accepté ... mais se méfier avec Access 2003).
Champ Date
Liste des nouveaux clients (numéro, nom, date de 1re commande) depuis le 1/1/2016
SELECT Num_cli, Nom_cli, Date_1ere_commande
FROM CLIENT
WHERE Date_1ere_commande>=#1/1/2016#;
Lorsque le champ est de type Date, SQL entoure la valeur de référence de # # afin d'en délimiter le contenu.
Nota: ceci est propre au SQL d'ACCESS.
Lien entre deux critères de restriction
Liste des clients (numéro, nom, code postal, mode de paiement) de l'Ain réglant au comptant (codé 1)
SELECT Num_cli, Nom_cli, Cp_cli, Paiementcli
FROM CLIENT
WHERE Cp_cli Like "01*" AND Paiementcli=1;
Le lien AND traduit le ET ; le OU est traduit par OR (voir ci-après).
Lien entre deux valeurs de référence
Liste des clients (numéro, nom, code postal, mode de paiement) de l'Ain et de la Loire
SELECT Num_cli, Nom_cli, Cp_cli, PaiemenCcli
FROM CLIENT
WHERE Cp_cli LIKE "01*" OR Cp_cli LIKE "42* ";
Nota : le Et du langage naturel se traduit par un OU logique (un code postal ne peut pas débuter par 01 ET par 42)
Liste des clients (numéro, nom, date de 1re commande) de l'année 2016
SELECT Num_cli, Nom-cli, Date_1ere_commande
FROM CLIENT
WHERE Date_1 ere_commande>=#31/12/2015# AND Date_1ere_commande<#01/01/2017#;
4 – Tri
Liste des clients (numéro, nom, conditions de paiement) classés dans l'ordre des conditions de paiement
SELECT Num_cli, Nom_cli, PaiemenCcli
FROM CLIENT
ORDER BY Paiementcli ASC;
L'ordre croissant est traduit par ASC.
Liste des nouveaux clients (numéro, nom, date de 1re commande) depuis le 01/01/2016, classés dans l'ordre chronologique inverse
SELECT Num_cli, Nom_cli, Date_1ere_commande
FROM CLIENT
WHERE Date_1ere_commande>=#31/12/2015#
ORDER BY Date_1ere_commande DESC;
Pour l'ordre décroissant, mentionner DESC après le critère de tri (si deux critères, les séparer par une virgule). En l'absence de paramètre ASC ou DESC dans ORDER BY, c'est l'ordre croissant qui est retenu par défaut.
5- Jointure
liste des grossistes (numéro, nom, intitulé du type de client) codés G en Code_Type
SELECT CLIENT.Num_cli, CLlENT.Nom_cli, TYPE_CLIENT.intitulé_type
FROM CLIENT, TYPE_CLIENT
WHERE CLIENT.Code_type = TYPECLIENT.Code_type
AND CLIENT.Code_type = "G";
Lorsqu'il y a jointure entre deux tables, les tables sont mentionnées en ligne FROM et le critère de jointure fait partie des éléments de la ligne WHERE, lié par AND aux autres critères de restriction.
Le préfixage est nécessaire pour préciser de quelle table sont issus certains champs lorsqu'ils peuvent être issus de plusieurs tables (ici Code_type). Il sera obligatoire pour la jointure. Ici, il est aussi nécessaire pour la restriction.