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.