Académique Documents
Professionnel Documents
Culture Documents
Introduction
Travaux de E.F.COOD en 1970
Dveloppement du langage S.Q.L.
S.Q.L. (Structured Query Language)
Langage de manipulation de base de donnes
1980 quapparat le S.Q.L. aux Labos IBM de SAN JOSE.
S.Q.L. fait lobjet dune normalisation, et le fait quil soit devenu
un standard dans linterrogation des bases de donnes, nempche
pas les diteurs de S.G.B.D. davoir des versions qui diffrent
lgrement les unes des autres.
Prsentation S.Q.L.
S.Q.L. : un langage abstrait dinterrogation de bases de
donnes ou de requtes. On dit que S.Q.L. est un langage non
procdural, on parle aussi de langage de quatrime gnration
(L4G).
Le langage est structur en plusieurs parties
le langage de description de donnes (L.D.D.) qui va
permettre la cration de la structure de la bases de donnes
(tables et attributs, vues, tats,...)
le langage de manipulation de donnes (L.M.D.) qui permet
la gestion des donnes au niveau des structures (consultation,
adjonction, suppression,...)
le langage de contrle des donnes (L.C.D.) doit permettre la
scurit des donnes, et leur confidentialit (qui a le droit de
faire quoi, et sur quoi ?)
EL MEZOUARI IGA Casablanca
3
Notation :
Select champ1, champ2,..., champn From TABLE
Soit la relation
CLIENT (Nclient, nomC, prnomC, adresseC, code_postal, ville, tlphone)
SQL LMD
Question : Liste des noms et prnoms de tous les clients
Requtes S.Q.L.
Select
Select all
nomC, prnomC
nomC, prnomC
From CLIENT
From CLIENT
SQL LMD
Question : Liste de tous les clients habitant Casablanca
Requtes S.Q.L.
Select * From CLIENT
Select all * From CLIENT
SQL LMD
Question : Liste de tous les clients habitant Casablanca ou Rabat
Requtes S.Q.L.
Select
ELcode_postal,
MEZOUARI
Casablanca
CLIENT (Nclient, nomC, prnomC, adresseC,
ville,IGA
tlphone)
SQL LMD
Question : Liste de tous les clients de nom Alaoui et de prnom Mohamed
Requtes S.Q.L.
Select * From CLIENT Where nomC = Alaoui and prnomC = Mohamed
SQL LMD
Autres oprateurs :
BETWEEN
Question : Liste de tous les clients habitant Rgion de Code postale compris
entre 20000 et 20700 codes du Grand Casablanca
Requte algbrique
(CLIENT (code_postal>= 20000 et code_postal<= 20700))
Requte S.Q.L.
Select * From CLIENT Where code_postal >= 20000 and code_postal <= 20700
ELcode_postal,
MEZOUARI
Casablanca
CLIENT (Nclient, nomC, prnomC, adresseC,
ville,IGA
tlphone)
SQL LMD
LIKE
Question : Liste de tous les clients habitant Rgion de Code postale compris
entre 20000 et 20999
Requte S.Q.L.
10
SQL LMD
IN
Question : Liste de tous les clients habitant la prfecture dont le code postale
est de 20000 (Casa), 10000 (Rabat), 28000 (Mohammedia), 27000
(Nouaceur)
Requte S.Q.L.
On pourra crire
ELcode_postal,
MEZOUARI
Casablanca
CLIENT (Nclient, nomC, prnomC, adresseC,
ville,IGA
tlphone)
11
SQL LMD
IS NULL
Question : Liste de tous les clients nayant pas le tlphone
Requte S.Q.L.
Select * From CLIENT Where tlphone IS NULL
IS NOT NULL
Question : Liste de tous les clients ayant le tlphone
Requte S.Q.L.
Select * From CLIENT Where tlphone IS NOT NULL
ELcode_postal,
MEZOUARI
Casablanca
CLIENT (Nclient, nomC, prnomC, adresseC,
ville,IGA
tlphone)
12
SQL LMD
Jointure
Produit cartsien
Produit cartsien de deux tables CLIENT, COMMANDE
Soit la relation :
Requte S.Q.L.
Select * From CLIENT, COMMANDE
13
Jointure simple
SELECT Client.Num_Client, Nom_Prnom, Num_Commande
FROM Client, commande WHERE
Client.Num_Client=Commande.Num_Client
Requte S.Q.L.
Select * From CLIENT, COMMANDE Where CLIENT.numclient =
COMMANDE.numclient
Lambigut entre le nom des rubriques Nclient de CLIENT, et COMMANDE oblige
prfixer leurs utilisations lors lcriture des requtes.
14
Imbrication de requtes
Requte S.Q.L. (utilisation dune sous requte ou requte imbrique)
Select * From CLIENT
Where Num_Client in (Select Num_Client From COMMANDE)
liste des clients ayant pass une commande (uniquement des occurrences
de CLIENT)
Select *
From COMMANDE
Where Num_Client in (Select Num_Client From CLIENT)
liste des commandes passes par chaque client (uniquement des
occurrences de COMMANDE)
15
SQL LMD
Utilisation d'alias de nom de table
Select * From CLIENT cl, COMMANDE co
Where cl.Num_Client = co.Num_Client
Une autre solution consiste nommer par un alias
(exemple cl pour CLIENT et co pur COMMANDE)
les tables et utiliser ces noms dalias lors du prfixage.
ELcode_postal,
MEZOUARI
Casablanca
CLIENT (Nclient, nomC, prnomC, adresseC,
ville,IGA
tlphone)
16
Requtes complexes
Exemple 1
Quel est le nom du client ayant pass la commande numro 1 ?
Requte S.Q.L.
Select nom From CLIENT, COMMANDE Where CLIENT.nclient =
COMMANDE.nclient and ncommande =1
ou encore (utilisation dalias de table)
Select nom From CLIENT cl, COMMANDE co Where cl.nclient =
co.nclient and ncommande = 1
SELECT CL.Num_Client, Nom_Prnom, Num_Commande
FROM Client CL, commande CO
WHERE CL.Num_Client=Co.Num_Client AND Co.Num_Commande=1;
EL MEZOUARI IGA Casablanca
17
Requte S.Q.L.
SELECT Cl.Num_Client, Nom_Prnom, Num_Commande
FROM Client CL, commande CO
WHERE CL.Num_Client=Co.Num_Client
AND CL.Nom_Prnom="NABIL BENNANI";
18
Union
CLIENT (Nclient, nomC, prnomC, adresseC, code_postal, ville, tlphone)
Soit la relation
PROSPECTION (nclient, nomC, prnomC, adresseC, code_postal, ville, tlphon)
Question :
Quels sont les clients rels, et potentiels (nclient, nom, prnom) qui font partis du SI
de lentreprise ?
Requte S.Q.L.
Select nclient, nom,C prenomC From CLIENT Union
Select nclient, nomC, prenomC From PROSPECTION
19
Intersection
CLIENT (Nclient, nomC, prnomC, adresseC, code_postal, ville, tlphone)
Soit la relation
PROSPECTION (nclient, nomC, prnomC, adresseC, code_postal, ville, tlphon)
Question :
Quels sont les clients (nclient, nomC, prnomC) qui le sont devenus aprs avoir t
prospects par le service commercial ?
Requte S.Q.L.
Select nclient, nom,C prenomC From CLIENT Intersect
Select nclient, nomC, prenomC From PROSPECTION
Autre formulation
Select nclient, nomC, prnomC From CLIENT Where nclient in (Select
nclient From PROSPECTION)
EL MEZOUARI IGA Casablanca
20
Diffrence
CLIENT (Nclient, nomC, prnomC, adresseC, code_postal, ville, tlphone)
Soit la relation
PROSPECTION (nclient, nomC, prnomC, adresseC, code_postal, ville, tlphon)
Question :
Quels sont les clients (nclient, nomC, prnomC) qui nont pas t prospects par le
service commercial ?
Requte S.Q.L.
Select nclient, nomC, prenomC From CLIENT
Except
Select nclient, nomC, prenomC From PROSPECTION
21
Division
Soit les relations GARAGE (Ngarage, nomG, Nville, marque)
VILLE (Nville, ville)
Question :
Quels sont les marques pour lesquelles il existe un garage dans toutes les villes?
Requte S.Q.L.
SELECT Marque FROM GARAGE g1
WHERE NOT EXISTS (SELECT Nville FROM Ville
WHERE Nville NOT IN (SELECT NVille FROM garage g2 WHERE
g1.marque = g2.marque));
22
Fonctions de calculs
(dagrgation)
Fonction moyenne
Permet deffectuer la moyenne dune srie de valeurs de type numrique.
Question : A combien slve le montant moyen des commandes du client Cl01 ?
Requte S.Q.L.
Select avg(montant) From COMMANDE Where nclient = Cl01
Fonction minimum
Permet de rechercher le minimum dune srie de valeurs de type numrique.
Question : A combien slve le montant minimum des commandes du clients Cl01 ?
Requte S.Q.L.
Select min(montant) From COMMANDE Where nclient = Cl01
23
Fonctions de calculs
(dagrgation)
Fonction maximum
Permet de rechercher le maximum dune srie de valeurs de type numrique.
Question : A combien slve le montant maximum des commandes du clients Cl01 ?
Requte S.Q.L.
Select max(montant) From COMMANDE Where nclient = Cl01
Oprateurs de calcul
Oprateurs gnraux
+
addition
soustraction
*
multiplication
/
division
^ ou **puissance
soit la relation
DETAILS (Ncommande, Nproduit, prixunitaire, quantit)
Requte SQL
25
Requtes
Req1 : le nombre des commandes par client.
SELECT Client.Num_Client, Client.Nom_Prnom, Count(Commande.Num_Commande) AS Compte_Commande FROM Client , Commande
WHERE Client.Num_Client = Commande.Num_Client
GROUP BY Client.Num_Client, Client.Nom_Prnom;
Req3 : une requte qui permet de slectionner les clients ayant des
commandes sachant que les champs de la requte sont les suivants
(Num_CDE, Num_Client, Nom_Prnom, Adresse, Ville,
Date_livraison, Ville_Livraison).
SELECT client.num_client, nom_prnom, adresse, ville, date_commande, ville_livraison, num_commande
FROM client, commande
WHERE client.num_client = commande.num_client;
26
27
Requte S.Q.L.
Select Nclient, min(montant), max(montant)
From COMMANDE Group by Nclient Having count(*) > 2
EL MEZOUARI IGA Casablanca
28
29
30
31
Question Liste des clients (nom, prnom, ville) par ordre dcroissant des noms,
prnoms nayant jamais pass de commande.
Requte algbrique
R1 = Jointure (CLIENT, COMMANDE (nclient = nclient))
R2 = (R1 (nom, prnom, ville))
R3 = (CLIENT (nom, prnom, ville))
R4 = R3 - R2
R5 = Tri (CLIENT (nomC, prnomC (descendant)))
Requete SQL
Select nomC, prenomC, ville From CLIENT c1, Commande c2 Where
c1.nclient not in (Select c2.nclient From CLIENT c2, COMMANDE
co Where c2.nclient = co.nclient) Order by nom desc, prenom desc
32
Oprateurs de comparaison
=
galit
<> ou !=
diffrent
< ou !>
infrieur
> ou !<
suprieur
<=
infrieur ou gal
>=
suprieur ou gal
Oprateurs logiques
AND
OR
NOT
le ET logique
le OU logique
le NON logique
33
Modifications des
occurrences de tables.
Les instructions SQL permettant la modification des
occurrences des tables :
- INSERT
- UPDATE
- DELETE
34
Schma Entits/Associations
Soit lexemple du modle relationnel
AUTEUR
CREER
DOMAINE
MOT_CLE
POSSEDE
RESSOURCE
35
Mot_cle
N_mot_cle
Nom_m_c
Info_m_c
Possede
#N_Res
#N_mot_cle
Ressource
N_Res
Info_res
Date_creation
Date_maj
Nom_r
Adresse_r
Taille_r
#N_Domaine
Crer
#N_Res
#N_Auteur
Auteur
N_Auteur
Nom_a
Info_a
Prenom_a
Tel_a
E_mail_a
Domaine
N_Domaine
Nom_d
Info_d
Niveau_d
36
Mise jour
INSERT permet d'ajouter une ou plusieurs occurrences dans une table
INSERT INTO nom de la table ou de la vue (liste des colonnes) VALUES (liste des
valeurs)
UPDATE permet de modifier les valeurs des occurrences d'une table (ou par
l'intermdiaire d'une vue) selon la syntaxe suivante :
UPDATE nom de la table ou de la vue SET colonne1 = nouvelle valeur, colonne2
= nouvelle valeur, colonneN = nouvelle valeur WHERE conditions
DELETE permet de supprimer des occurrences d'une table (ou par l'intermdiaire
d'une vue) selon la syntaxe suivante :
DELETE FROM nom de la table ou de la vue WHERE conditions
37
Mot_cle
N_mot_cle
Nom_m_c
Info_m_c
Possede
#N_Res
#N_mot_cle
Ressource
N_Res
Info_res
Date_creation
Date_maj
Nom_r
Adresse_r
Taille_r
#N_Domaine
Crer
#N_Res
#N_Auteur
Auteur
N_Auteur
Nom_a
Info_a
Prenom_a
Tel_a
E_mail_a
Domaine
N_Domaine
Nom_d
Info_d
Niveau_d
38
Mot_cle
N_mot_cle
Nom_m_c
Info_m_c
Possede
#N_Res
#N_mot_cle
Ressource
N_Res
Info_res
Date_creation
Date_maj
Nom_r
Adresse_r
Taille_r
#N_Domaine
Crer
#N_Res
#N_Auteur
Auteur
N_Auteur
Nom_a
Info_a
Prenom_a
Tel_a
E_mail_a
Domaine
N_Domaine
Nom_d
Info_d
Niveau_d
Ajout d'un mot-cl (on ne gre pas le numro qui est incrmental automatique)
INSERT INTO MOT_CLE (Nom_m_c, Info_m_c)
VALUES (BD , Bases de donnes')
Ajout d'un autre mot-cl sans spcifications du monde colonnes (dans l'ordre
de la table)
INSERT INTO MOT_CLE VALUES (SI , systmes dInformation')
EL MEZOUARI IGA Casablanca
39
Mot_cle
N_mot_cle
Nom_m_c
Info_m_c
Possede
#N_Res
#N_mot_cle
Ressource
N_Res
Info_res
Date_creation
Date_maj
Nom_r
Adresse_r
Taille_r
#N_Domaine
Crer
#N_Res
#N_Auteur
Auteur
N_Auteur
Nom_a
Info_a
Prenom_a
Tel_a
E_mail_a
Domaine
N_Domaine
Nom_d
Info_d
Niveau_d
40
Mot_cle
N_mot_cle
Nom_m_c
Info_m_c
Possede
#N_Res
#N_mot_cle
Ressource
N_Res
Info_res
Date_creation
Date_maj
Nom_r
Adresse_r
Taille_r
#N_Domaine
Crer
#N_Res
#N_Auteur
Auteur
N_Auteur
Nom_a
Info_a
Prenom_a
Tel_a
E_mail_a
Domaine
N_Domaine
Nom_d
Info_d
Niveau_d
41
UPDATE (modification)
42
UPDATE AUTEUR
SET
auteur_nom = ' Mekkes',
auteur_prenom = ' Hamda ',
auteur_e_mail = 'Hamda.mekkes@etud.iga-casablanca.ma ',
auteur_tel = ' 0621234567 '
WHERE auteur_num = 110
43
UPDATE RESSOURCE
SET DATE_MAJ = getdate()
where DATE_MAJ IS NULL
Modification de toutes les adresses lectroniques de la table Auteur selon le modle
prnom.nom@etud.iga-casablanca.ma
UPDATE AUTEUR
set E_mail_a =prenom_a +'.'+ nom_a+'@etud.iga-casablanca.ma'
44
Mot_cle
N_mot_cle
Nom_m_c
Info_m_c
Possede
#N_Res
#N_mot_cle
Ressource
N_Res
Info_res
Date_creation
Date_maj
Nom_r
Adresse_r
Taille_r
#N_Domaine
Crer
#N_Res
#N_Auteur
Auteur
N_Auteur
Nom_a
Info_a
Prenom_a
Tel_a
E_mail_a
Domaine
N_Domaine
Nom_d
Info_d
Niveau_d
45
46
49
49
50
51
52
Nom
smallint
Taille de stockage
Description
2 octets
entier de faible tendue
integer
4 octets
bigint
8 octets
grands entiers
decimal
variable
pas de limite
numeric
variable
pas de limite
real
4 octets
prcision de 6 dcimales
double precision
8 octets
prcision de 15 dcimales
serial
4 octets
de 1 2147483647
bigserial
8 octets
de 1
9223372036854775807
tendue
de -32768 +32767
de -2147483648
+2147483647
de 9223372036854775808
9223372036854775807
53
Fermeture et suppression
dune base
Enfin pour supprimer la base de donne :
D'abord la Fermeture :
STOP DATABASE nom_base_de_donnes
Suppression :
DROP DATABASE nom_base_de_donnes
EL MEZOUARI IGA Casablanca
54
Exemple :
CREATE TABLE PERSONNE
(
N_personne
numeric(5)
identity,
Nom
varchar(25) not null,
Prenom
varchar(30) null ,
Age
numeric(3)
not null,
Taille
numeric(6,2) null ,
Date_naissance
datetime
not null,
Code_postal
char(5)
null ,
Adresse
text
null ,
Ville
varchar(50) null ,
Actif
bit
not null,
constraint PK_PERSONNE PRIMARY Key (N_personne)
)
CONSTRAINT FK_PERSONNE FOREIGN Key
EL MEZOUARI IGA Casablanca
55
ALTER TABLE
ALTER TABLE permet de modifier la structure d'une table de base de donnes en
modifiant l'une des colonnes, en ajoutant de nouvelles colonnes, o en supprimant des
colonnes.
56
DROP TABLE
DROP TABLE permet de supprimer une table de la base de donnes,
la suppression concerne la structure et les donnes.
57
Exemple dillustration
Crer une table FILM ayant comme champ : idFilm (Cl primaire
obligatoire et auto incrmentale, Titre (255 caractres) obligatoire,
Ralisateur (55 caractres obligatoire.
CREATE TABLE FILM
(idFilm INT not null AUTO_INCREMENT,
Titre VARCHAR (255) not null ,
Ralisateur VARCHAR (55) not null ,
CONSTRAINT PK_FILM PRIMARY KEY (idFilm))
Crer une table role ayant comme champ : idacteur INT obligatoire,
IdFilm INT obligatoire, Personnage (100 caractres obligatoire.
CREATE TABLE role (idActeur INT not null, idFilm INT not null , Personnage
VARCHAR (100))
EL MEZOUARI IGA Casablanca
59
Table CUSTOMER
nom de colonne
caractristique
SID
Cl primaire
Last_Name
First_Name
Table ORDERS
nom de colonne
caractristique
Order_ID
Cl primaire
Order_Date
Customer_SID
Cl trangre
Amount
EL MEZOUARI IGA Casablanca
60
MySQL
:
CREATE TABLE ORDERS
(Order_ID integer,
Order_Date date,
Customer_SID integer,
Amount double,
Primary Key (Order_ID),
Foreign Key (Customer_SID) references CUSTOMER(SID));
61
Oracle:
CREATE TABLE ORDERS
(Order_ID integer primary key,
Order_Date date,
Customer_SID integer references CUSTOMER(SID),
Amount double);
62
63
64
Exercices
65
Exercices
66
bouchaib.riyami@iga-casablanca.ma
Question 11 / 15 : Prix minimum de chaque article avec le fournisseur correspondant
Question 13 / 15 : Quels sont les fournisseurs qui fournissent les 2 articles 100 et 106, et quel
prix ?
SELECT Fournisseurs.NOMFOUR, Articles.NOART, Acheter.PRIXACHAT
FROM Fournisseurs INNER JOIN (Articles INNER JOIN Acheter ON Articles.NOART = Acheter.NOART) ON
Fournisseurs.NOFOUR = Acheter.NOFOUR
WHERE (((Articles.NOART)=100 Or (Articles.NOART)=106));
Question 14 / 15 : Listes des articles pouvant tre achets chez plusieurs fournisseurs,
avec le prix d'achat et le dlai correspondants
67
68