Vous êtes sur la page 1sur 68

SQL

EL MEZOUARI IGA Casablanca

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.

EL MEZOUARI IGA Casablanca

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

SQL LMD Langage de Manipulation de Donnes


1- SELECT... FROM... WHERE...

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

les 2 requtes ci-dessus ne suppriment pas les doublons


Select distinct nomC, prnomC From CLIENT
Cette requte correspond la projection car elle supprime les
doublons
ELcode_postal,
MEZOUARI
Casablanca
CLIENT (Nclient, nomC, prnomC, adresseC,
ville,IGA
tlphone)

SQL LMD
Question : Liste de tous les clients habitant Casablanca

Requtes S.Q.L.
Select * From CLIENT
Select all * From CLIENT

Where ville = Casablanca


Where ville = Casablanca

les 2 requtes ci-dessus suppriment pas les doublons

Select distinct * From CLIENT Where ville=Casablanca

Cette requte correspond la slection car elle supprime les


doublons
ELcode_postal,
MEZOUARI
Casablanca
CLIENT (Nclient, nomC, prnomC, adresseC,
ville,IGA
tlphone)

SQL LMD
Question : Liste de tous les clients habitant Casablanca ou Rabat

Requtes S.Q.L.
Select

* From CLIENT Where ville=Casablanca or ville=Rabat

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

CLIENT (Nclient, nomC, prnomC, adresseC, code_postal, ville, tlphone)

EL MEZOUARI IGA Casablanca

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

Requte S.Q.L en utilisant loprateur dintervalle.

Select * From CLIENT Where code_postal BETWEEN 20000 and 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.

Select * From CLIENT Where code_postal like 20*

* remplace une suite de caractre


_ remplace un caractre
On pourra crire

Select * From CLIENT Where code_postal like 20___


ELcode_postal,
MEZOUARI
Casablanca
CLIENT (Nclient, nomC, prnomC, adresseC,
ville,IGA
tlphone)

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.

Select * From CLIENT Where code_postal =20000 or code_postal =10000


or code_postal =28000 or code_postal =27000

On pourra crire

Select * From CLIENT Where code_postal in (20000,10000,28000,27000)

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 :

COMMANDE (Ncommande, date_commande, date_livraison, montant, Nclient#)


CLIENT (Nclient, nomC, prnomC, adresseC, code_postal, ville, tlphone)

Requte S.Q.L.
Select * From CLIENT, COMMANDE

EL MEZOUARI IGA Casablanca

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.

SELECT * FROM Client, Commande


where Client.Num_Client = Commande.Num_Client;

EL MEZOUARI IGA Casablanca

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)

EL MEZOUARI IGA Casablanca

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

En algbre relationnelle il est frquent quune requte fasse intervenir un certain


nombre doprateurs combins (projection, jointure, slection). On pourra dans
certain cas les traduire par une seule requte S.Q.L.

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

Question : Quels sont les N de commande passs par les clients de


nom NABIL BENNANI?

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";

EL MEZOUARI IGA Casablanca

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

EL MEZOUARI IGA Casablanca

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

EL MEZOUARI IGA Casablanca

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));

EL MEZOUARI IGA Casablanca

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

EL MEZOUARI IGA Casablanca

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

Question : Combien de clients sont rfrencs par lentreprise ?


Requte S.Q.L.
Select count(*) From CLIENT
Fonction somme
Question : A combien slve le montant total des commandes du clients CL254 ?
Requte S.Q.L.
Select sum(montant)From COMMANDE Where Nclient =
CL254
EL MEZOUARI IGA Casablanca
24

Oprateurs de calcul

Oprateurs gnraux

+
addition
soustraction
*
multiplication
/
division
^ ou **puissance
soit la relation
DETAILS (Ncommande, Nproduit, prixunitaire, quantit)
Requte SQL

Select * From DETAILS Where quantite - quantit * 0.1 > 500

Select sum (prixunitaire * quantite) From DETAILS Where


Ncommande = 'CO012'
EL MEZOUARI IGA Casablanca

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;

Req2 : le nombre des commandes valides par responsable.


SELECT Employ.Num_Employ, Employ.Nom_Prenom, COUNT(Commande.Num_Commande) AS commandevalide
FROM Employ, Commande
WHERE Employ.Num_Employ=Commande.Num_Employ
GROUP BY Employ.Num_Employ, Employ.Nom_Prenom;

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;

EL MEZOUARI IGA Casablanca

26

Req4 : une requte qui permet de calculer pour chaque commande


le montant Hors taxe (Prix unitaire * Quantit commande par le
client), les champs de la requte (Num_CDE, Rfrence,
Prix_Unitaire, Quantit_Commande, Catgorie, Dsignation,
Remise et le champ calculer Montant HT).

SELECT Num_Commande, Article.Rfrence, Article.Prix_Unitaire,


Quantit_Commande, Catgorie ,Dsignation
,Remise,Article.Prix_Unitaire* Quantit_Commande As
Montant_HT
FROM Article, Ligne_de_Commande, Categorie
WHERE Article.Rfrence = Ligne_de_Commande.Rfrence AND
Article.Code_Categorie = Categorie.Code_Categorie ;

EL MEZOUARI IGA Casablanca

27

Regroupement de valeurs rsultats


Le regroupement permet le travail de srie de valeurs par srie de valeurs
en fonction de la spcification dune rubrique dtermine.
Le regroupement est le plus souvent utilis avec une ou plusieurs
fonctions de calcul.
Question : Combien de commandes ont t passes par chaque client.
Requte S.Q.L.
Select Nclient, count(*) From COMMANDE Group by Nclient
Question : Pour chaque client ayant pass plus de 2 commandes. Quel est le
montant minimum, et maximum des commandes quil a pass ?

Requte S.Q.L.
Select Nclient, min(montant), max(montant)
From COMMANDE Group by Nclient Having count(*) > 2
EL MEZOUARI IGA Casablanca

28

SELECT Num_Client, Count(Num_Client)


FROM Commande
GROUP BY Num_Client;

EL MEZOUARI IGA Casablanca

29

Organisation des rsultats dune


requte
La table rsultant de toute requte peut tre organise en fonction des besoins de
lutilisateur, sur des critres de tris, de regroupement, ou mme des deux.

Tris de tables rsultats


Question : liste des clients (nom, prnom, ville) par ordre croissant des prnoms
Requte algbrique
Tri (CLIENT (prnom (ascendant)))
Requte S.Q.L.
Select nomC, prenomC, ville From CLIENT Order by prenomC
Ou
Ou

Select nomC, prenomC, ville From CLIENT Order by prenomC asc


Select nomC, prenomC, ville From CLIENT Order by 2
EL MEZOUARI IGA Casablanca

30

Tris de tables rsultats


Question : liste des clients (nom, prnom, ville) par ordre dcroissant des villes
Requte S.Q.L.
Select nomC, prenomC, ville From CLIENT Order by 3 desc
Question : Liste des clients (nom, prnom, ville) par ordre croissant des noms,
prnoms ayant pass au moins une commande.
Requte algbrique
R1 = Jointure (CLIENT, COMMANDE (nclient = nclient ))
R2 = (R1 (nomC, prnomC, ville))
R3 = Tri (CLIENT (nomC, prnomC (ascendant)))
Requete SQL
Select nomC, prenomC, ville From CLIENT cl, COMMANDE co
Where cl.numclient = co.numclient Order by nomC, prenomC

EL MEZOUARI IGA Casablanca

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

EL MEZOUARI IGA Casablanca

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

EL MEZOUARI IGA Casablanca

33

Modifications des
occurrences de tables.
Les instructions SQL permettant la modification des
occurrences des tables :
- INSERT
- UPDATE
- DELETE

EL MEZOUARI IGA Casablanca

34

Schma Entits/Associations
Soit lexemple du modle relationnel
AUTEUR
CREER
DOMAINE
MOT_CLE
POSSEDE
RESSOURCE

(N_auteur, Nom_a, Info_a, prenom_a, tel_a, e_mail_a)


(#N_Res, N_auteur#)
(N_domaine, Nom_d, Info_d, niveau_d)
(N_mot_cle, Nom_m_c, Info_m_c)
(#N_Res, # N_mot_cle)
(N_res, Info_res, date_creation, date_maj, Nom_r,,adresse_r, taille_r,
#N_domaine)

EL MEZOUARI IGA Casablanca

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

EL MEZOUARI IGA Casablanca

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

EL MEZOUARI IGA Casablanca

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

Ajout d'un nouveau domaine


INSERT INTO DOMAINE (N_domaine, Nom_d, info_d, Niveau_d)
values (10, 'Nouveau domaine , 'dfinition d'un nouveau domaine', 1)
Ajout d'un nouveau domaine (sans les colonnes autorises en valeur NULL)
INSERT INTO DOMAINE (N_domaine, Nom_d)
VALUES (17,'Nouveau domaine')

EL MEZOUARI IGA Casablanca

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

Migration de lensemble des occurrences de la table Domaine de la base


Gestion
INSERT INTO Domaine (N_domaine, Nom_d, Info_d, niveau_d)
SELECT N_domaine, Nom_d, Info_d, niveau_d FROM Gestion.dbo.domaine

EL MEZOUARI IGA Casablanca

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

Migration de lensemble des occurrences de la table Domaine de la base


Gestion
INSERT INTO Domaine (N_domaine, Nom_d, Info_d, niveau_d)
SELECT N_domaine, Nom_d, Info_d, niveau_d FROM Gestion.dbo.domaine

EL MEZOUARI IGA Casablanca

41

UPDATE (modification)

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

EL MEZOUARI IGA Casablanca

42

Modification des informations de l'auteur de numro 110 (nom Mekkes, prnom


Hamda adresse lectronique Hamda.mekkes@etud.iga-casablanca.ma et
numro de tlphone 0621234567.

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

EL MEZOUARI IGA Casablanca

43

Modification de toutes les dates de mise jour de la table RESSOURCE


actuellement nulles la date du jour

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'

EL MEZOUARI IGA Casablanca

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

Suppression du domaine n 35 qui ne rfrence aucune ressource


DELETE FROM DOMAINE WHERE N_domaine = 35
ou
DELETE DOMAINE WHERE N_domaine = 35

EL MEZOUARI IGA Casablanca

45

Suppression de l'auteur numro 110


DELETE FROM CREER WHERE N_auteur = 110
DELETE FROM AUTEUR WHERE N_auteur = 110
Noter que pour supprimer un auteur il faut supprimer les ressources qu'il
a cres pour respecter la gestion des rfrences d'intgrit (pour
qu'existe une cl trangre dans CREER, il faut qu'elle existe comme cl
primaire dans AUTEUR

EL MEZOUARI IGA Casablanca

46

Les fonctions SQL


fonction donnant la longueur d'une chane de caractres
LEN(chaine) : Retourne la longueur de la chane de caractres "chaine".

SELECT champ, LEN (champ) FROM table

Les fonctions de substitution

LCASE(chaine) : Retourne la chane de caractres "chaine" en


minuscules.

SELECT champ, LCASE(champ) FROM table


UCASE(chaine) : Retourne la chane de caractres "chaine" en majuscules.

SELECT champ, ucase(champ) FROM table

REPLACE(chaine1,chaine2,chaine3) : Retourne une chaine de caractre


dans laquelle toutes les occurrences de "chaine2" dans "chaine1" ont t
remplaces par "chaine3".

SELECT champ, REPLACE (champ, Facile',' Difficile !')


FROM table
STRREVERSE(chaine) : Inverse l'ordre des caractres de la chane "chaine".

SELECT champ,STRREVERSE(champ) FROM table


update garage set tele=left(tele,1) +'5'+ right(tele,8);
EL MEZOUARI IGA
Casablanca
EL MEZOUARI
IGA Casablanca

49
49

Gestion des tables de bases de donnes


Les instructions SQL permettant la gestion des tables
d'une base de donnes.
CREATE : Cration de tables
ALTER : Modification de la structure de table
DROP : Suppression de table
EL MEZOUARI IGA Casablanca

50

Cration de base de donnes


Pour crer la base de donnes SQL on utilise la commande :
CREATE DATABASE nom_base_de_donnes

Activation de base de donnes


Pour activer la base de donnes SQL on utilise la commande :
START DATABASE nom_base_de_donnes
EL MEZOUARI IGA Casablanca

51

Cration dune table


Pour crer une table intitule amis, on utilise la commande :
CREATE TABLE amis
(nom CHAR(15), adresse CHAR(25), age SMALLINT)
Les diffrents types de donnes sont :
SMALLINT
INTEGER
FLAOT(X,Y)
DCIMAL(X,Y)
NUMERIC(X,Y)
CHAR(N)
LOGICAL
DATE
EL MEZOUARI IGA Casablanca

52

Nom
smallint

Taille de stockage
Description
2 octets
entier de faible tendue

integer

4 octets

entiers les plus courants

bigint

8 octets

grands entiers

decimal

variable

prcision indique par l'utilisateur,


valeurs exactes

pas de limite

numeric

variable

prcision indique par l'utilisateur,


valeurs exactes

pas de limite

real

4 octets

prcision variable, valeurs inexactes

prcision de 6 dcimales

double precision

8 octets

prcision variable, valeurs inexactes

prcision de 15 dcimales

serial

4 octets

entier incrmentation automatique

de 1 2147483647

bigserial

8 octets

entier de grande taille


incrmentation automatique

de 1
9223372036854775807

EL MEZOUARI IGA Casablanca

tendue
de -32768 +32767
de -2147483648
+2147483647
de 9223372036854775808
9223372036854775807

53

Suppression dune table


Pour supprimer une table on utilise la commande :
DROP TABLE nom_table

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.

1. la colonne nom aura un type VarChar(30)


Alter Table PERSONNE Alter Column nom varchar(30)
2. la colonne prnom devient obligatoire
Alter Table PERSONNE Alter Column prenom varchar(30) not null
3. ajout de la colonne nouvcol de type numeric(10) non obligatoire
Alter Table PERSONNE Add Nouvcol numeric(10)
ou
Alter Table PERSONNE Add Nouvcol numeric(10) Null
4. suppression de la colonne age
Alter Table PERSONNE Drop Column age

EL MEZOUARI IGA Casablanca

56

DROP TABLE
DROP TABLE permet de supprimer une table de la base de donnes,
la suppression concerne la structure et les donnes.

Supprimer d'abord les tables contenant des cls


trangres en dpendance fonctionnelle avec les cls
primaires d'autres tables pour respecter les rfrences
d'intgrit.
Suppression de la table PERSONNE
DROP TABLE PERSONNE

EL MEZOUARI IGA Casablanca

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))

Exemple dillustration (suite)


Crer une table acteurs ayant comme champ : idacteur (Cl primaire
obligatoire et auto incrmentale, Nom (55 caractres) obligatoire,
Prnom (55 caractres obligatoire.
CREATE TABLE acteurs (idActeur INT not null AUTO_INCREMENT, Nom
VARCHAR (55) not null , Prnom VARCHAR (55) not null , PRIMARY KEY
(idActeur))

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));

EL MEZOUARI IGA Casablanca

61

Oracle:
CREATE TABLE ORDERS
(Order_ID integer primary key,
Order_Date date,
Customer_SID integer references CUSTOMER(SID),
Amount double);

EL MEZOUARI IGA Casablanca

62

select r.numero_reunion, r.libelle_reunion from


reunion as r, participe as p, personne as pr
where pr.Numero_personne=p.Numero_personne
and
p.numero_reunion = r.numero_reunion and
pr.nom="FDDOULI" and pr.prenom = "Ali";
8- select r.numero_reunion, r.libelle_reunion from reunion as r, participe
as p, personne as pr
where pr.Numero_personne=p.Numero_personne and
p.numero_reunion = r.numero_reunion and
pr.nom=[Nom : ] and pr.prenom =[Prnom : ];

EL MEZOUARI IGA Casablanca

63

SELECT R.numero_reunion , R.libelle_reunion from


reunion R, personne Per, participe Par
where R.numero_reunion=Par.numero_reunion
and Per.numero_personne = Par.numero_personne
and per.Numero_personne=[Entrer le numro de
l'lve :];

EL MEZOUARI IGA Casablanca

64

Exercices

ARTICLES (NOART, LIBELLE, STOCK, PRIXINVENT)


FOURNISSEURS (NOFOUR, NOMFOUR, ADRFOUR, VILLEFOUR)
ACHETER (NOFOUR#, NOART#, PRIXACHAT, DELAI)

Question 1 / 15 : numros et libells des articles dont le stock est


infrieur 10 ? SELECT NOART, LIBELLE FROM ARTICLES WHERE STOCK <10;
Question 2 / 15 : Liste des articles dont le prix d'inventaire est
compris entre 100 et 300 ? SELECT * FROM ARTICLES WHERE PRIXINVENT between 100 and 300
Question 3 / 15 : Liste des fournisseurs dont on ne connat pas
l'adresse ? SELECT * From FOURNISSEURS where ADRFOUR is NULL;
Question 4 / 15 : Liste des fournisseurs dont le nom commence par
"STE" ? SELECT * FROM FOURNISSEURS WHERE NOMFOUR like "STE*";
Question 5 / 15 : noms et adresses des fournisseurs qui proposent des
articles pour lesquels le dlai d'approvisionnement est suprieur 20
jours ?
SELECT NOMFOUR, ADRFOUR FROM FOURNISSEURS FO, ACHETER AC WHERE FO.NOFOUR = AC.NOFOUR AND delai >20;

EL MEZOUARI IGA Casablanca

65

Exercices

ARTICLES (NOART, LIBELLE, STOCK, PRIXINVENT)


FOURNISSEURS (NOFOUR, NOMFOUR, ADRFOUR, VILLEFOUR)
ACHETER (NOFOUR#, NOART#, PRIXACHAT, DELAI)

Question 6 / 15 : Nombre d'articles rfrencs ?


SELECT count(*) as Nombre_Articles from articles;

Question 7 / 15 : Valeur du stock ?

SELECT SUM( Stock*PrixInvent) as Valeur_Du_Stock FROM ARTICLES;

Question 8 / 15 : numros et libells des articles tris dans l'ordre


dcroissant des stocks ?
SELECT NOART, LIBELLE, STOCK FROM ARTICLES ORDER BY 3 DESC;

Question 9 / 15 : Liste pour chaque article (numro et libell) du prix


d'achat maximum, minimum et moyen ?
SELECT AR.Noart, Libelle, Max(PrixAchat) as Maximum, Min(PrixAchat) as Minimum, Avg(PrixAchat) As Moyenne
From Articles AR, Acheter AC
Where AR.Noart=AC.Noart
Group by AR.Noart, Libelle

Question 10 / 15 : Dlai moyen pour chaque fournisseur proposant au


moins 2 articles ?
SELECT FO.NoFour, NomFour, Avg(Delai) As Dlai_Moyen
From Fournisseurs FO, Acheter AC
Where FO.NoFour = AC.NoFour
Group By FO.NoFour, NomFour
EL MEZOUARI IGA Casablanca
having count(*) >= 2

66

bouchaib.riyami@iga-casablanca.ma
Question 11 / 15 : Prix minimum de chaque article avec le fournisseur correspondant

SELECT Fournisseurs.NOMFOUR, Articles.LIBELLE, Min(Acheter.PRIXACHAT) AS MinDePRIXACHAT


FROM (Acheter INNER JOIN Articles ON Acheter.NOART=Articles.NOART) INNER JOIN Fournisseurs ON
Acheter.NOFOUR=Fournisseurs.NOFOUR
GROUP BY Fournisseurs.NOMFOUR, Articles.LIBELLE;

Question 12 / 15 : Fournisseurs auprs desquels on ne s'approvisionne plus et qu'il


faudrait donc peut-tre supprimer de la table Fournisseurs
SELECT FO.nofour, nomfour, adrfour, villefour
FROM fournisseurs FO LEFT JOIN acheter AC on FO.nofour=AC.nofour
WHERE AC.noart IS NULL;

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

SELECT Articles.NOART, Count(Fournisseurs.NOMFOUR) AS CompteDeNOMFOUR


FROM Fournisseurs INNER JOIN (Articles INNER JOIN Acheter ON Articles.NOART = Acheter.NOART) ON Fournisseurs.NOFOUR
= Acheter.NOFOUR
GROUP BY Articles.NOART
HAVING (((Count(Fournisseurs.NOMFOUR))>=2));
SELECT Requte4.NOART, Acheter.PRIXACHAT, Acheter.DELAI
FROM Fournisseurs INNER JOIN (Requte4 INNER JOIN (Articles INNER JOIN Acheter ON Articles.NOART=Acheter.NOART) ON
Requte4.NOART=Articles.NOART) ON Fournisseurs.NOFOUR=Acheter.NOFOUR
GROUP BY Requte4.NOART, Requte4.CompteDeNOMFOUR, Acheter.PRIXACHAT, Acheter.DELAI
HAVING (((Requte4.CompteDeNOMFOUR)=2));

Question 15 / 15 : Quels sont le ou les fournisseurs qui fournissent le plus de produits ?


EL MEZOUARI IGA Casablanca

67

SQL LEFT JOIN


Dans le langage SQL, la commande LEFT JOIN (aussi appele
LEFT OUTER JOIN) est un type de jointure entre 2 tables. Cela
permet de lister tous les rsultats de la table de gauche (left =
gauche) mme sil ny a pas de correspondance dans la
deuxime tables.
Jointure gauche (LEFT JOINT)

EL MEZOUARI IGA Casablanca

68

Vous aimerez peut-être aussi