Cours Etudiant

publicité
Le langage SQL (Structured Query Language)
SQL (Structured Query Language, en français « langage structuré de requête ou
d’interrogation » ou « langage de requête structurée »…) est un langage informatique
normalisé servant à créer et à exploiter des bases de données relationnelles.
I- Les SGBDR
Pour implanter sur un support informatique un ensemble de données structurées selon le
modèle relationnel (en d’autres termes, pour créer une base de données relationnelles), il faut
un logiciel spécifique : un système de gestion de bases de données relationnelles ou SGBDR.
Un SGBDR permet de créer des tables, d’établir des liens entre ces tables et d’exploiter la
base de données (mettre à jour, rechercher, sélectionner, trier, transformer… les informations
de la base de données).
Exemple de SGBDR : Oracle Database et MySQL de Oracle, DB2 de IBM, SQL server et
Access de Microsoft….
La mise en œuvre d’un SGBDR s’effectue grâce sur un langage particulier qui sert d’interface
entre l’homme et le langage machine : le langage SQL.
II- Les instructions (ou requêtes) SQL
Le langage SQL se présente sous la forme d’instructions (ou requêtes) constituées de mots
clés (écrits en anglais) indiquant une action (un ordre) que le SGBDR doit effectuer sur la
base de données.
Les instructions (ordres, commandes) sont classées en trois catégories :
-
Les instructions qui permettent de créer et de modifier la structure de la base de données
(langage de définition de données – LDD).
Exemples : CREATE (pour créer une table, un utilisateur ou un index), ALTER (pour
modifier), DROP (pour supprimer).
-
Les instructions qui permettent de contrôler l’accès des utilisateurs aux données (langage
de contrôle de données – LCD).
Exemples : GRANT (pour autoriser des opérations à certains utilisateurs), DENY (pour
interdire), REVOKE (pour supprimer une autorisation).
-
Les instructions qui permettent d’interroger et de modifier (ajouter, supprimer) les
données de la base de données (langage de manipulation de données – LMD).
Exemples : SELECT (pour rechercher des données), UPDATE (pour modifier des données),
INSERT INTO (pour ajouter des données), DELETE FROM (pour supprimer des données).
(Référentiel BTS CG : « Seul le LMD est attendu en SQL »)
1/6
III- La structure d’une requête SQL (LMD)
A) L’instruction SELECT
La commande SELECT permet de sélectionner (de lire) des données issues de la base de
données.
La syntaxe élémentaire (minimale) de l’instruction SELECT est la suivante :
SELECT
FROM
WHERE
suivi de la liste des champs (ou attributs, ou colonnes) à afficher (séparés par
une virgule)
suivi de la liste des tables (ou relations, ou tableaux) utilisées (séparés par une
virgule)
suivi d’une condition que doivent respecter les enregistrements (ou n-uplets ou
lignes) pour être sélectionnés (suivie d’un point-virgule indiquant la fin de la
requête)
Remarques :
-
Les mots clés FROM et WHERE qui suivent l’instruction SELECT sont des clauses
(comme les clauses d’un contrat qui précisent les modalités de son exécution).
-
En algèbre relationnel (langage de manipulation des relations), SELECT correspond à
une projection (réduction du nombre d’attributs d’une relation) et WHERE correspond à
une restriction ou « sélection » (réduction du nombre de n-uplets d’une relation).
Exemple : Modèle relationnel de la facturation des clients de l’entreprise DELTA
CLIENT (N°_Client, NomClient, RueClient, CPClient, VilleClient)
FACTURE (N°_Facture, DateFacture, DateRèglement, #N°_Client)
ARTICLE (Réf_Article, DésignationArticle, PrixArticle)
COMMANDER (#N°_Facture, #Réf_Article, QuantitéCommandée)
Requête 1 : On veut obtenir la liste des clients (nom et CP) qui habitent à Paris.
..............................................................................................................................................................................................................................
..............................................................................................................................................................................................................................
..............................................................................................................................................................................................................................
Le résultat de la requête est une table, comme la table CLIENT, mais avec seulement deux
colonnes (NomClient et CPClient) et uniquement les lignes correspondant aux clients habitant
à Paris.
Remarque : Les valeurs des champs de type texte sont écrites entre guillemets simples (en
revanche, pour les champs de type numérique, il suffit d’écrire le nombre).
2/6
Si on veut obtenir tous les champs de la table CLIENT on utilise le caractère « * » (étoile) :
..............................................................................................................................................................................................................................
..............................................................................................................................................................................................................................
..............................................................................................................................................................................................................................
Requête 2 : On veut afficher la liste des articles (désignation et prix) dont le prix est supérieur
à 100 € avec un classement par ordre décroissant des prix.
Pour effectuer un classement il faut utiliser la clause (ou commande) : ORDER BY suivi du
champ à classer et de l’instruction ASC ou DESC (on n’est pas obligé d’utiliser « ASC » car
par défaut les résultats sont toujours classés par ordre ascendant).
..............................................................................................................................................................................................................................
..............................................................................................................................................................................................................................
..............................................................................................................................................................................................................................
..............................................................................................................................................................................................................................
Requête 3 : On veut connaître le nom et l’adresse du client de la facture n° F425 du 18/12/15.
La requête nécessite d’effectuer une jointure i.e. d’associer les lignes de deux tables
(CLIENT et FACTURE) grâce à l’égalité des valeurs du champ commun aux deux tables
(N°_Client).
La jointure en SQL peut être réalisée à l’aide de la clause WHERE (d’autres solutions plus
complexes existent…).
L’opérateur AND (après WHERE) permet d’ajouter des conditions (restrictions).
..............................................................................................................................................................................................................................
..............................................................................................................................................................................................................................
..............................................................................................................................................................................................................................
..............................................................................................................................................................................................................................
Requête 4 : On veut obtenir le nombre total de factures établies par client pour l’année 2015.
Pour compter le nombre de valeurs (ou lignes) d’un champ, il faut utiliser la fonction (ou
agrégat) statistique COUNT.
Pour effectuer un regroupement sur les valeurs communes d’un champ (NomClient), la
fonction COUNT doit être précédée de ce champ et suivie de la clause GROUP BY (pour
éviter d’afficher plusieurs fois les mêmes lignes : par exemple s’il y a 5 factures pour un
client, on obtiendrait 5 lignes identiques, avec un total de 5, si on n’utilise pas GROUP BY).
La clause (ou commande) AS permet de renommer un champ.
L’opérateur BETWEEN … AND … (après WHERE suivi d’un champ) permet de
sélectionner les lignes dont les valeurs d’un champ sont comprises dans un intervalle.
3/6
..............................................................................................................................................................................................................................
..............................................................................................................................................................................................................................
..............................................................................................................................................................................................................................
..............................................................................................................................................................................................................................
..............................................................................................................................................................................................................................
Requête 5 : On veut connaître le total des quantités commandées par article pour l’année 2015.
Pour calculer la somme des valeurs d’un champ, il faut utiliser la fonction (ou agrégat) SUM.
..............................................................................................................................................................................................................................
..............................................................................................................................................................................................................................
..............................................................................................................................................................................................................................
..............................................................................................................................................................................................................................
..............................................................................................................................................................................................................................
..............................................................................................................................................................................................................................
Autre solution, sans la désignation de l’article :
..............................................................................................................................................................................................................................
..............................................................................................................................................................................................................................
..............................................................................................................................................................................................................................
..............................................................................................................................................................................................................................
..............................................................................................................................................................................................................................
Requête 6 : On veut afficher la liste des articles (la référence uniquement) pour lesquels le
total des quantités commandées pour l’année 2015 est inférieur à 10
Il s’agit de la même requête que la précédente mais avec une restriction supplémentaire sur la
fonction SUM.
La clause HAVING permet d’ajouter une condition que doivent respecter les résultats des
fonctions statistiques (COUNT, SUM, …) pour être affichés.
..............................................................................................................................................................................................................................
..............................................................................................................................................................................................................................
..............................................................................................................................................................................................................................
..............................................................................................................................................................................................................................
..............................................................................................................................................................................................................................
..............................................................................................................................................................................................................................
Remarque : Les clauses possibles d’une instruction SELECT doivent être utilisées dans
l’ordre suivant : SELECT FROM WHERE GROUP BY HAVING ORDER BY
4/6
B) L’instruction UPDATE
L’instruction UPDATE permet de mettre à jour (modifier) des enregistrements existants.
La syntaxe de la commande UPDATE est généralement la suivante :
UPDATE
SET
WHERE
suivi de la table qu’il faut mettre à jour
suivi des nouvelles valeurs pour les champs concernés (séparés par une virgule)
suivi d’une condition que doivent respecter les enregistrements (ou lignes) pour
être mis à jour (suivie d’un point-virgule indiquant la fin de la requête)
Sans la clause WHERE, la même nouvelle valeur sera attribuée à toutes les lignes de la table
Exemple : Requête qui permet de modifier l’adresse du client n° C12 (Dupond)
..............................................................................................................................................................................................................................
..............................................................................................................................................................................................................................
..............................................................................................................................................................................................................................
C) L’instruction INSERT INTO
La commande INSERT INTO permet d’ajouter (d’insérer) un ou plusieurs enregistrements
dans une table.
La syntaxe est la suivante :
INSERT INTO
VALUES
suivi de la table dans laquelle il faut insérer des enregistrements et des
champs qu’il faut renseigner (entre des parenthèses et séparés par une
virgule)
suivi des valeurs pour les champs concernés (entre des parenthèses et
séparés par une virgule) (suivies d’un point-virgule indiquant la fin de la
requête)
Si tous les champs d’une table doivent être renseignés, il n’est pas nécessaire d’indiquer les
champs après le nom de la table (mais après VALUES il faut indiquer toutes les valeurs en
respectant l’ordre des colonnes). En revanche, si on ne renseigne que certains champs, il faut
les indiquer avant VALUES.
Il est également possible d’insérer plusieurs lignes en une seule requête en indiquant les
valeurs de chaque ligne après VALUES (les groupes de valeurs entre des parenthèses étant
séparés par des virgules).
5/6
Exemples :
Requête 1 : Requête qui permet d’ajouter un nouvel article
..............................................................................................................................................................................................................................
..............................................................................................................................................................................................................................
Ou, plus simplement :
..............................................................................................................................................................................................................................
..............................................................................................................................................................................................................................
Requête 2 : Requête qui permet d’ajouter deux nouveaux articles
..............................................................................................................................................................................................................................
..............................................................................................................................................................................................................................
D) L’instruction DELETE FROM
La commande DELETE FROM permet de supprimer un ou plusieurs enregistrements dans
une table.
La syntaxe est la suivante :
DELETE FROM
WHERE
suivi de la table pour laquelle il faut supprimer des enregistrements (ou
lignes)
suivi d’une condition que doivent respecter les enregistrements pour
être supprimés (suivie d’un point-virgule indiquant la fin de la requête)
Sans la clause WHERE, tous les enregistrements de la table seront supprimés !
Exemple : Requête permettant de supprimer l’article A45
..............................................................................................................................................................................................................................
..............................................................................................................................................................................................................................
Cf. Cas Medic-Air ; Cas LBA ; Cas Socofrois ; Cas Elizaldia ; Cas Oplast ; Cas Mecanix ;
Cas Odysée
6/6
Téléchargement