Base info : SQL
Conseil :
BASE INFO SQL au format PDF :
Méthode :
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 ligneORDER
BY
passe en troisième ligne.Sans restriction ni jointure, ni tri, seules deux lignes sont utiles:
SELECT
etFROM
.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.