Vous êtes sur la page 1sur 68

Langage SQL

Soulaf BOUTADGHART

1
ACCESS utilise le langage SQL, pour faire ses
requêtes, il traduit ce qu’on est entré en SQL,
puis exécute la requête SQL.

2
Qu'est-ce que SQL ?

SQL (Structured Query Language) est un langage de


programmation informatique destiné à stocker, à
manipuler et à retrouver des données enregistrées
dans des bases de données relationnelles.

3
Qu'est-ce que SQL ?

SQL permet, pour résumer, trois types de


manipulations sur les bases de données :

 Les manipulations des bases de données : Sélection,


modification, suppression d'enregistrements.
 La maintenance des tables : création, suppression,
modification de la structure des tables.
 La gestion des droits d'accès aux tables : Contrôle des
données : droits d'accès, validation des modifications.

4
La commande SELECT

La commande SELECT est la commande la


plus utilisée de SQL. Cette commande va servir
à faire des requêtes pour récupérer des
données dans les tables.

Sa syntaxe est :

SELECT champ1, champ2, champ3, ...


FROM table;

5
La commande SELECT

S'il y a plus d'un champ spécifié après


SELECT, les champs doivent être séparés par
des virgules.
Exemple. Pour sélectionner les champs
"prénom" et "nom" de tous les enregistrements
de la table Clients :

SELECT nom, prénom


FROM Clients ;
6
La commande SELECT

Si on veut récupérer tous les champs des


enregistrements sélectionnés, la syntaxe est la
suivante :

SELECT *
FROM table;

7
La commande SELECT

Les clauses SELECT et FROM doivent obligatoirement


apparaître au début de chaque requête, on peut, ensuite,
indiquer des critères de sélection avec la clause WHERE :

SELECT *
FROM table
WHERE condition;

8
La commande SELECT

Par exemple, pour sélectionner tous les Clients de


la table "Clients" dont le code postal est 40000 :

SELECT *
FROM Clients
WHERE code_postal = 40000;

9
La commande SELECT

Les opérateurs de condition :

10
La commande SELECT

Pour sélectionner tous les articles dont le prix


est supérieur à 100 DH :

SELECT *
FROM Article
WHERE prix_unitaire > 100;

11
La commande SELECT

Il est possible de combiner plusieurs conditions


avec des opérateurs logiques :
L'opérateur AND réunit deux ou plusieurs
conditions et sélectionne un enregistrement
seulement si cet enregistrement satisfait
TOUTES les conditions listées. (C'est-à-dire
que toutes les conditions séparées par AND
sont vraies).

12
La commande SELECT

Par exemple, pour sélectionner tous les clients


nommés ‘Hassan' qui habitent Fes :

SELECT *
FROM Clients
WHERE nom = 'Hassan' AND ville = 'Fès';

13
La commande SELECT

L'opérateur OR réunit deux conditions mais


sélectionne un enregistrement si UNE des
conditions listées est satisfaite. Par exemple,
pour sélectionner tous les clients nommés
'Hassan' ou 'Mourad' :

SELECT *
FROM Clients
WHERE nom = 'Hassan' OR nom = 'Mourad';

14
La commande SELECT

Pour sélectionner des enregistrements dont la valeur d'un


champ peut être comprise dans une liste ou entre deux
valeurs, on utilise les clauses IN et BETWEEN.
Par exemple : Pour sélectionner les clients vivant à
Marrakech ou Casablanca :

SELECT *
FROM Clients
WHERE ville IN ('Marrakech', 'Casablanca');

15
La commande SELECT

Ou pour sélectionner les produits dont le prix


est compris entre 100 et 1000 DH :

SELECT *
FROM Produits
WHERE prix_unitaire BETWEEN 100 AND 1000;

16
La commande SELECT

Pour sélectionner les produits dont le prix n'est


pas dans cet intervalle :

SELECT *
FROM Produits
WHERE prix_unitaire NOT BETWEEN 100 AND 1000;

De la même façon, NOT IN sélectionne les


enregistrements exclus de la liste spécifiée
après IN.

17
La commande SELECT

La clause LIKE permet de faire des recherches


approximatives sur le contenu d'un champ. Par
exemple, pour sélectionner les clients dont le
nom commence par la lettre S :

SELECT *
FROM Clients
WHERE nom LIKE 'S*';

18
La commande SELECT

Le symbole * remplace un ensemble de


caractères, pour représenter tous les noms
commençant par S, on utilisera 'S*', tous ceux se
terminant par S, on utilisera '*S', et tous ceux
comportant la lettre S : '*S*'. Le symbole ? ne
remplace qu'un seul caractère. Si on a deux
clients nommés Hassan et Hussan, on utilisera 'H?
ssan'.

19
La commande SELECT

Attention : certaines versions de SQL n'utilisent pas les


caractères * et ? mais d'autres caractères spécifiques,
certaines versions utilisent notamment le caractère % à
la place de *.

20
Exercice
ELEVE(matricule_elv, nom_elv, prenom_elv,
ville_elv, cp_elv, age, sexe, date_insc,moy_elv)
 1 Liste des élèves.
 2 Les matricules des élèves possédant une moyenne supérieur à
10.
 3 Les filles qui habite à Marrakech.
 4 Les élèves âgé de plus de 25 ans habitant en dehors de
Marrakech.
 5 Les élèves habitant à Rabat et à Fès âgé entre 18 et 26 ans.
 6 Les noms et prénoms des élèves dont le nom débute par 'B' .
 7 Les matricules et noms des élèves inscrit a l’année 2002 ayant
une moyenne inférieur a 10.

21
La commande SELECT

La jointure va nous permettre de sélectionner


des informations dans plusieurs tables grâce
aux relations existant entre ces tables. Il va
néanmoins falloir indiquer comment se fait la
relation entre ces tables.

22
La commande SELECT

Par exemple : récupérer le nom et le prénom


du client ayant passé la commande n°1 :

SELECT nom, prénom


FROM Clients, Commande
WHERE Commande.num_client =
Client.num_client AND num_commande = 1;

23
La commande SELECT

Notez que lorsqu'on utilise plusieurs tables, il faut faire


attention que deux tables n'aient pas de champs ayant le
même nom, si c'est le cas, et pour les différencier, on
utilise, la notation: Nom_table.nom_du_champ. Si on est
sur que le nom ne se retrouvera pas dans plusieurs tables,
on peut l'utiliser sans le préfixer avec le nom de la table.

24
Exercice
REPRESENTATION (n_représentation, titre_représentation, lieu)
MUSICIEN (nom, n_représentation*)
PROGRAMMER (date, n_représentation*, tarif)

 1 Donner la liste des titres des représentations.


 2 Donner la liste des titres des représentations ayant lieu à l'opéra
Hassan2.
 3 Donner la liste des noms des musiciens et des titres des représentations
auxquelles ils participent.
 4 Donner la liste des titres des représentations, les lieux et les tarifs pour
le mois de janvier.
 5 Donner la liste des titres des représentations, les lieux et les dates
auxquelles le musicien ‘Kamal' a participé.

25
La commande SELECT
Supprimer les doubles avec DISTINCT.

Supposons que nous voulions la liste des


clients ayant acheté quelque chose. nous ne
voulons pas savoir ce qu'a acheté chaque
client , nous voulons juste connaître les clients
qui ont acheté quelque chose.

26
La commande SELECT

SELECT Client.num_client,nom, prénom


FROM Clients, Commande
WHERE Commande.num_client = Client.num_client;

Si on exécute cette requête directement, SQL va nous


renvoyer une liste des numéros, prénom et nom
correspondants aux noms et prénoms des clients
ayant passé chaque commande, il est clair qu'un client
ayant passé plusieurs commandes va se retrouver
plusieurs fois dans cette liste.

27
La commande SELECT

Pour cela, nous allons devoir dire à SQL de supprimer


les doubles du résultat de la sélection pour n'afficher
les clients qu'une seule fois. Pour cela, nous allons
utiliser la clause DISTINCT.

SELECT DISTINCT Clients.num_client, nom, prénom


FROM Clients, Commande
WHERE Commande.num_client = Client.num_client
AND num_commande = 1;

28
La commande SELECT

En indiquant la clause DISTINCT avant le


champ num_client, on indique à SQL qu'on ne
veut pas voir apparaître plusieurs fois un client
ayant ce numéro dans la sélection renvoyée.

On peut même rendre le résultat de la sélection


plus agréable à la lecture en utilisant la clause
ORDER BY :

29
La commande SELECT

la clause ORDER BY permet de définir le tri


des colonnes de la réponse, soit en précisant le
nom littéral de la colonne, soit en précisant son
n° d'ordre dans l'énumération qui suit le mot
clef SELECT.

ASC spécifie l’ordre ascendant et DESC l’ordre


descendant du tri. ASC ou DESC peut être
omis, dans ce cas c'est l'ordre ascendant qui
est utilisé par défaut.

30
La commande SELECT
Pour spécifier l'ordre de tri, on doit placer les noms des
colonnes séparées par des virgules juste après le mot clef
"ORDER BY", dans l'ordre voulu.. On peut aussi utiliser le
rang de chaque colonne dans l'ordre spécifié dans la
clause SELECT.

SELECT *
FROM Clients
WHERE code_postal = 40000;
ORDER BY nom_cli, prénom DESC;

31
Exercice
AUTEUR(cod_aut, nom_aut, prenom_aut)
LIVRE(cod_livre, nom_livre, edition, cod_aut#, prix)
COMPORTER(cod_livre#, cod_cde#, quantite)
COMMANDE(cod_cde, date_cde, cod_cli#)
CLIENT(cod_cli, nom_cli, prenom_cli, adr_cli, localite)

Écrire les requêtes SQL correspondant aux questions suivantes :


 1 Afficher le nom, le prénom et la localité des clients.
 2 Afficher les noms des livres des éditions « Folio » avec le nom de l’auteur.
 3 Afficher pour toutes les commandes les différentes lignes de commande.
 4 Afficher les différentes éditions en ordre décroissant et ceci en évitant les
répétitions.
 5 Afficher la date, le nom du livre ainsi que la quantité donnée pour le client dont
le code est 23 par ordre chronologique.
 6 Afficher pour tous les livres le nom de l’auteur, son prénom, l’édition, ainsi que
le nom du livre et ceci trié suivant le nom de l’auteur en laissant de côté le livre
d’Andorra.
 7 Afficher les données des livres commandés par des clients dont le nom
commence avec la lettre « K ».

32
La commande SELECT

SQL a cinq fonctions importantes :


 SUM
 AVG
 MAX
 MIN
 COUNT.
On les appelle fonctions d'ensemble parce
qu'elles résument le résultat d'une requête plutôt
que de renvoyer une liste d'enregistrements.
33
La commande SELECT

34
La commande SELECT

Exemple :

SELECT
MIN(prix_unitaire),MAX(prix_unitaire),
AVG(prix_unitaire) AS MOYENNE_PRIX
FROM PRODUIT;

Va retourner le prix le plus petit de la table Produit, le


prix le plus élevé et le prix moyen en renommant la
champ de la moyenne.

35
La commande SELECT

SELECT COUNT (*)


FROM Produits
WHERE libelle LIKE 'P*';

Va retourner le nombre de produits dont le


libellé commence par la lettre 'P'.

36
La commande SELECT

Une des utilisations les plus courantes de la


clause GROUP BY est son association avec
une fonction d'ensemble (le plus souvent
COUNT, pour compter le nombre
d'enregistrements dans chaque groupe).

Par exemple, si nous voulons la liste des


vendeurs, avec pour chaque vendeur le
nombre de ventes qu'il a fait :
37
La commande SELECT

SELECT num_vendeur,COUNT (*)


FROM Commandes
GROUP BY num_vendeur;

Le mot-clé GROUP BY s’utilise lorsque


diverses colonnes d’une ou de plusieurs tables
sont sélectionnées et qu’une fonctions
d'ensemble au moins apparaît dans l’instruction
SELECT.

38
La commande SELECT

Si vous avez une condition qui s’applique sur


une fonctions d'ensemble utilisé ou non dans la
requête la clause WHERE ne sera plus valable,
vous devez utilisé une deuxième clause.

il faut utiliser la clause HAVING, réservée pour


les fonctions d’agrégation, à la place de la
clause WHERE dans l’instruction SQL.

39
La commande SELECT

SELECT store_name, SUM(sales)


FROM Store_Information
GROUP BY store_name
HAVING SUM(sales) > 1500 ;

40
Exercice
ELEVE(matricule_elv, nom_elv, prenom_elv, rue_elv, localite_elv, cp_elv,
age, sexe, tel, code_dpt#)
DEPARTEMENT(code_dpt, niveau, date_debut, tarif, dt_inscription,
lib_dpt, id_salle#)
SALLE(id_salle, description, type, batiment)
THEME(code_theme, des_theme, langue, code_dpt#, no_prof#)
PROF(no_prof, nom_prof, prenom_prof, rue_prof, localite_prof, cp_prof)

1 Etablir une liste avec toutes les données des différents élèves.
 2 Afficher par ordre alphabétique le prénom des élèves qui sont en bâtiment C.
 3 Afficher le nom et le code postal des professeurs qui tiennent des thèmes en
français.
 4 Faire une liste d’élèves en indiquant le tarif et le code postal pour tous les
élèves qui ont leur salle dans le bâtiment C et ceci dans l’ordre décroissant des
numéros de téléphone regroupé par département.
 5 Calculer l’âge moyen des élèves intéressés dans « Atomthéorie »
 6 Combien d’élèves participent au thème « La future entreprise ».
 7 Afficher les noms, le prénoms et les numéros de téléphone des l’élèves qui
ont payés plus pour être inscrit.

41
La commande SELECT

Les sous-requêtes :

On peut imbriquer autant de requêtes que l'on


veut. La condition après la clause WHERE peut
porter sur le résultat d'une autre requête (ou
sous-requête).

42
La commande SELECT
Supposons les tables suivantes :

Cette table contient, pour chaque acheteur, le produit qu'il


a acheté et le prix d'achat.
Nous voulons la liste des acheteurs ayant acheté des
articles chers. Nous considérerons qu'un article cher est un
article dont le prix est supérieur à la moyenne du prix des
produits achetés + 100 DH.

43
La commande SELECT

SELECT Num_acheteur
FROM Vente
WHERE prix > (( SELECT AVG (prix) FROM Vente) + 100) ;

Vous pouvez constater que condition de la requête


est basée sur le résultat d'une autre requête. Dans
cet exemple, à chaque fois qu'un acheteur aura
acheté un article cher, son numéro apparaîtra,
pour éviter cela, on utilise la clause DISTINCT
num_acheteur pour éliminer les doubles.

44
La commande CREATE VIEW

Les vues peuvent être considérées comme des


tables virtuelles. Généralement, une table
contient un jeu de définitions et elle est
destinée à stocker physiquement les données.
Une vue a également un jeu de définitions,
créé au-dessus des tables ou d’autres vues, et
elle ne stocke pas physiquement les données.

45
La commande CREATE VIEW

La syntaxe pour la création d’une vue est


comme suit :

CREATE VIEW nom de vue


AS
requête SQL

46
La commande CREATE VIEW

et pour créer une vue appelée V_Client_Kech


contenant seulement les colonnes Nom,
Prénom, Age de la table Client, il faut saisir :

CREATE VIEW V_Client_Kech


AS
SELECT Nom,Prénom, Age
FROM Client
WHERE ville = 'Marrakech';

47
La commande CREATE VIEW

l est aussi possible d’utiliser une vue comme


source d’une autre requête SQL :

SELECT *
FROM V_Client_Kech
WHERE Age BETWEEN 30 and 50;

48
La commande CREATE VIEW

La spécification des noms des colonnes de la


vue est facultative : par défaut, les colonnes de
la vue ont pour nom les noms des colonnes
résultats du SELECT. Si certaines colonnes
résultats du SELECT sont des expressions
sans nom, il faut alors obligatoirement spécifier
les noms de colonnes de la vue.
Le SELECT peut contenir toutes les clauses
d'un SELECT, sauf la clause ORDER BY.
49
Les manipulations la BD

Une fois les tables créées, on peut commencer


à y insérer des données, les mettre à jour, les
supprimer. Toutes ces opérations sont des
opérations de manipulation des bases de
données.
Pour effectuer ces manipulations, SQL dispose
de 3 instructions :

INSERT – UPDATE – DELETE

50
La commande INSERT

La commande INSERT est utilisée pour ajouter


des enregistrements ou des parties
d'enregistrements dans des tables. Elle est
utilisée généralement sous deux formes :

51
La commande INSERT
1ère forme :
INSERT
INTO table (champ1,champ2,...)
VALUES ('valeur1','valeur2',...);

Cette forme est utilisée lorsqu'on veut insérer un seul


enregistrement ou une partie d'un seul enregistrement. On
créera un nouvel enregistrement dont le contenu du
champ1 sera valeur1, le contenu du champ2 sera valeur2,
etc...

52
La commande INSERT
2ème forme :
INSERT
INTO table (champ1,champ2,...)
(requête SELECT);

Dans cette seconde forme, le résultat de la


requête va être inséré dans les champs
indiqués de la table. Cette méthode est utilisée
lorsque plusieurs enregistrements sont ajoutés
simultanément.

53
La commande INSERT

Dans les deux cas, les valeurs insérées doivent


correspondre au type de données du champ
dans lequel l'insertion va être faite, on ne peut
pas, par exemple demander l'insertion d'une
chaîne de caractères dans un champ de type
numérique ou monétaire. Les chaînes de
caractères doivent être placées entre
apostrophes ( ' ), les champs numériques ou
vides (NULL) ne doivent pas être placés entre
apostrophes.

54
La commande INSERT

Si des valeurs doivent être insérées dans tous les


champs de l'enregistrement de la table, la liste des
noms des champs n'a pas besoin d'être explicitement
indiquée dans la commande. Les valeurs des champs
à insérer doivent cependant apparaître dans le même
ordre que les noms des champs lors de la création de
la table, sans oublier un seul champ.

INSERT
INTO table
VALUES ('valeur1','valeur2','valeur3',...);

55
La commande INSERT

Par exemple, dans notre table Client, si nous


voulons insérer un nouveau client, nous allons
entrer :

INSERT
INTO Clients
VALUES (100,'Mr','Dawali','Jalil','Medina N°44',40000,'Marrakech');

56
La commande UPDATE

La commande UPDATE est utilisée pour


changer des valeurs dans des champs d'une
table. Sa syntaxe est :

UPDATE table
SET champ1 = nouvelle_valeur1,
champ2 = nouvelle_valeur2,
champ3 = nouvelle_valeur3
WHERE condition;

57
La commande UPDATE

La clause SET indique quels champs de la


table vont être mis à jour et avec quelles
valeurs ils vont l'être. Les champs non
spécifiés après la clause SET ne seront pas
modifiés.

58
La commande UPDATE

Par exemple, si nous voulons, dans la table


produit, modifier le prix d'un produit dont le nom
est "prod1", nous taperons :

UPDATE produits
SET prix_unitaire = 1000
WHERE libelle = 'prod1';

59
La commande UPDATE

La commande UPDATE affecte tous les


enregistrements qui répondent à la condition
donnée dans la clause WHERE. Si la clause
WHERE est absente, tous les enregistrements
de la table seront affectés.

60
La commande UPDATE

Par exemple, si nous tapons :

UPDATE produits
SET prix_unitaire = 1000;

Le prix unitaire de TOUS les produits de la


table produit va être modifié.

61
La commande UPDATE

Tout comme la commande INSERT, la commande


UPDATE peut contenir une requête. Dans ce cas la
syntaxe est la suivante :

UPDATE table
SET champ1 = nouvelle_valeur1,
champ2 = nouvelle_valeur2,
champ3 = nouvelle_valeur3
WHERE condition = (requête SELECT);
62
La commande DELETE

Pour supprimer des enregistrements d'une


table, utilisez la commande DELETE. La
syntaxe est la suivante :

DELETE
FROM table
WHERE condition;

63
La commande DELETE

On ne peut pas supprimer seulement le contenu


de quelques champs des enregistrements. La
commande DELETE supprime des
enregistrements entiers, c'est pour cela qu'il n'est
pas nécessaire d'indiquer ici des noms de
champs. La condition spécifiée après WHERE va
déterminer quels sont les enregistrements à
supprimer.

64
La commande DELETE

Par exemple, pour supprimer tous les clients


dont la ville est Marrakech :

DELETE
FROM Clients
WHERE ville='Marrakech';

65
La commande DELETE

Pour supprimer tous les enregistrements d'une


table, n'indiquez pas de clause WHERE :

DELETE FROM table;

Cette variante de la commande DELETE ne


supprime pas la table, elle supprime seulement
les enregistrements contenus dans cette table
et laisse une table vide.

66
La commande DELETE

On peut aussi, comme précédemment utiliser


une requête qui servira à déterminer la
condition de la suppression. La syntaxe est la
suivante :

DELETE
FROM table
WHERE condition = ( requête SELECT);

67
Exercice
Soit le modèle relationnel suivant :
EQUIPE (CodeEQ,NomEQ,DirecteurSportif)
COUREUR (NumCR,NomCR, CodeEQ*,CodeP*)
PAYS (CodeP,NomP)
TYPE_ETAPE (CodeT,LibT)
ETAPE ( NumET,DateET,VilleDép,VilleArr,NbKm,CodeT*)
PARTICIPER ( NumCR*,NumET*,TempsRéalisé)
ATTRIBUER_BONIFICATION ( NumET*,Km,Rang ,NbSecondes,NumCR*)

1. Quel est le nombre de kilomètres total du tour de France .


2. Quels sont les noms des coureurs qui n’ont pas obtenu de bonification.
3. Quels sont les noms des coureurs qui ont participé à toutes les étapes.
4. Ajouter l’équipe « Fertina » portant comme code 3445 a la liste des équipes du tour
5. Augmenter par 10Km l’étape dont le type est « haute Montagne ».
6. Affecter le directeur sportif « Bennani » a l’équipe « Fertina » .
7. Supprimer les coureurs dont le total des nombres de kilométrage est inférieur a
200Km

68

Vous aimerez peut-être aussi