Vous êtes sur la page 1sur 47

Chapitre 4

LE LANGAGE
SQL

2me Anne LFG


Cours MIAD - 3me Anne HEC

Le langage SQL (1)

Le langage SQL (Structured Query Language) peut tre


considr comme le langage daccs normalis aux bases
de donnes.

Il est aujourdhui support par la plupart des SGBD


commercialiss (micro tq Access ou professionnels tq
Oracle).

Il a fait lobjet de plusieurs normes ANSI/ISO dont la plus


rpandue aujourdhui est la norme SQL2 qui a t dfinie
en 1992.

Le succs du langage SQL est du essentiellement sa


simplicit et au fait quil sappuie sur le schma conceptuel
pour noncer des requtes en laissant le SGBD
responsable de la stratgie dexcution.
2

Le langage SQL (2)


Le langage SQL comporte :
1. Langage de dfinition des donnes (LDD) qui permet
de dfinir des relations, des vues externes et des
contraintes dintgrit;
2. Langage de manipulation des donnes (LMD) qui
permet dinterroger une base de donnes sous forme
dclarative sans se proccuper de lorganisation
physique des donnes;
3. Langage de contrle des donnes (LCD) qui permet
de contrler la scurit et les accs aux donnes.
NB: Nous prsentons ici les principaux aspects du LMD.
3

Exemple de BD (1)
Soit le MLD dune BD relationnelle suivant:
Client
NoCli
Nom
Adresse
Catgorie
Compte

Produit
NoProd
Libelle
Prix
QteStock

Commande
NoCom
#NoCli
Date

LigneCommande
#NoCom
#NoProd
QteCommandee
4

Exemple de BD (2)
Soit le dtail de la table Client :
Client
NoCli
1
2
3
4
5
6
7
8
9

Nom
AMEUR
BEN SALAH
MRABET
KRAIEM
LABIDI
CHAOUACHI
GAFSI
JELALI
ROUISSI

Adresse
23, a. Carthage
25, r. du Caire
112, r. dAthne
5, a. de Madrid
180, r. de Rome
3, a. des Roses
14, r. de lEt
72, r. de la Gare
65, r. Lafayette

Localit
Carthage
Tunis
Ariana
Tunis
Tunis
La Marsa
Carthage
Ariana
Tunis

Catgorie

Compte

1
1
1
1
2
2
3
3
3

125.000
-230.000
0.000
0.000
72.000
-258.000
870.000
320.000
35.000

Requte SQL
Une requte SQL se prsente comme suit:
SELECT [DISTINCT] {* | expr [AS alias], ... }
FROM table [alias], ...
[WHERE { conditions | sous conditions} ]
[GROUP BY expr, ...] [HAVING conditions]
[ORDER BY {expr | num}{ASC | DESC}, ...] ;
Rq: [.] : facultatif.
6

Interprtation
SELECT

Prcise les colonnes qui vont apparatre dans la rponse

FROM

Prcise la (ou les) table intervenant dans l'interrogation

WHERE

Prcise les conditions appliquer sur les lignes. On peut trouver :


- des comparateurs : =, >, <, >=, <=,<>
- des oprateurs logiques : AND, OR, NOT
- des prdicats : IN, LIKE, NULL, ALL, SOME, ANY, EXISTS...

GROUP BY

Prcise la (ou les) colonne de regroupement

HAVING

Prcise la (ou les) conditions associes un regroupement

ORDER BY

Prcise l'ordre dans lequel vont apparatre les lignes de la rponse :


- ASC : En ordre ascendant (par dfaut)
- DESC: En ordre descendant

Requte SQL (Exemples)


1. SELECT Nom, Localit
FROM

Nom
AMEUR
BEN SALAH
MRABET
KRAIEM
LABIDI
CHAOUACHI
GAFSI
JELALI
ROUISSI

Client;

Localit
Carthage
Tunis
Ariana
Tunis
Tunis
La Marsa
Carthage
Ariana
Tunis

2. SELECT Nom, Localit


FROM Client
WHERE Localit = Ariana;

Nom
MRABET
JELALI

Localit
Ariana
Ariana

Du Langage Algbrique (LA) SQL

Oprations algbriques

Requtes SQL

Du Langage Algbrique (LA) SQL

Oprateurs relationnels
en LA
PROJECT
SELECT
JOIN
DIV

SQL
?

10

Projection
LA:

NR = PROJECT (DR, liste des attributs)

SQL:

SELECT colonnes (ou attributs)


FROM
table;

Principe:
Choisit le nom des colonnes de la (ou des) table(s) que
l'on souhaite voir apparatre dans la rponse.
Les colonnes sont donnes aprs linstruction SELECT.
La ou les table(s) (ou relations) sont indiques aprs la
clause FROM.
11

Projection (Exemples)
Exemple 1:
LA: NR1 = PROJECT (Client, Nom, Localit )
SQL: SELECT Nom, Localit
FROM

Nom

Localit

Toutes les lignes de la


table Client

Client;

Exemple 2:
LA: NR2 = PROJECT (Client, NoCli, Nom, Adresse,Localit,
Catgorie, Compte )

SQL: SELECT
FROM

*Client;

* dnote toutes les colonnes de la relation.

Nom

Compte

Toutes les lignes de la


table Client

12

Slection
LA:

NR = SELECT (DR,condition)

SQL:

SELECT
*
FROM
table
WHERE conditions;

Principe:
Slectionne des lignes (n-uplets, tuples) d'une (ou
plusieurs) table(s) qui satisfont certaines conditions.
La ou les conditions sont indiques aprs la clause
WHERE.
13

Slection (Exemple)
LA: NR = SELECT (Client, Localit = Ariana )
SQL: SELECT

*Client

FROM
WHERE Localit = Ariana;

NoCli
3
8

Nom

Adresse

MRABET
JELALI

112, r. dAthne
72, r. de la Gare

Localit
Ariana
Ariana

Catgorie
1
3

Compte
0.000
320.000
14

Projection & Slection


LA:

R1 = SELECT (DR,condition)
NR = PROJECT (R1, liste des attributs)

SQL:

SELECT colonnes (ou attributs)


FROM
table
WHERE conditions;

Les deux oprations algbriques sont utilises


dans la mme requte SQL
15

Projection & Slection (Exemple)

LA: R1 = SELECT (Client, Localit = Ariana )


NR = PROJECT (R1, Nom, Localit)

SQL: SELECT Nom, Localit


FROM
Client
WHERE Localit = Ariana;
Nom
MRABET
JELALI

Localit
Ariana
Ariana

16

Jointure
LA: NR = JOIN (R1,R2,condition dgalit entre attributs)
SQL:

SELECT colonnes (ou attributs)


FROM
table1, table2
WHERE table1.att = table2.att;

Principe:
Permet lextraction de donnes partir de 2 ou plusieurs tables.
Runit, 2 par 2, des tables.
Aprs la clause FROM, le nom des tables intervenant dans la
jointure.
Aprs la clause WHERE, les conditions permettant de raliser
la jointure.
17

Jointure (Exemple)
LA: R1 = JOIN (Client,Commande,
Client.NoCli = Commande.NoCli)

SQL: SELECT

FROM Client,Commande
WHERE Client.NoCli = Commande.NoCli;

NoCli
1
2
2
3
4
5
8
9
9

Nom

Adresse

Localit

AMEUR
BEN SALAH
BEN SALAH
MRABET
KRAIEM
LABIDI
JELALI
ROUISSII
ROUISSII

23, a. Carthage
25, r. du Caire
25, r. du Caire
112, r. dAthne
5, a. de Madrid
180, r. de Rome
72, r. de la Gare
65, r. Lafayette
65, r. Lafayette

Carthage
Tunis
Ariana
Tunis
Tunis
La Marsa
Carthage
Ariana
Tunis

Catgorie
1
1
1
1
2
2
3
3
3

Compte NoCom
125.000
-230.000
0.000
0.000
72.000
-258.000
870.000
320.000
35.000

108
105
107
106
102
103
101
100
104

Date
12/04/02
15/02/01
16/04/01
09/07/01
03/01/00
05/04/00
07/12/99
09/09/99
12/12/00

18

Division
Il n'existe pas en SQL d'quivalent direct la division.
Cependant il est toujours possible de trouver une autre
solution, notamment par l'intermdiaire des oprations
de calcul et de regroupement.

19

Du Langage Algbrique (LA) SQL

Oprateurs ensemblistes
en LA
UNION
INTER
DIFFER
PRODUIT

SQL
?

20

Union
LA:

R3 = UNION (R1,R2)

SQL:

(SELECT )
UNION
(SELECT )

Principe:
L'union est applique sur deux relations de mme structure R1 et
R2 pour obtenir une relation R3.
R3

- mme structure que R1 et R2


- ensemble des tuples de R1 et R2
- les duplications sont limines

21

Union (Exemple)
LA:

R1

R3 = UNION (R1,R2)

NoCli

Nom

1
2
3
8

AMEUR
BEN SALAH
MRABET
JELALI

NoCli

Nom

NoCli

Nom

1
9

AMEUR
ROUISSII

1
2
3
8
9

AMEUR
BEN SALAH
MRABET
JELALI
ROUISSII

SQL: (SELECT * FROM R1)


UNION

(SELECT

* FROM R2);

R2

22

Intersection
LA:

R3 = INTER (R1,R2)

SQL:

(SELECT )
INTERSECT
(SELECT )

Principe:
L'intersection est applique sur deux relations de mme structure
R1 et R2 pour obtenir une relation R3.
R3

mme structure que R1 et R2


ensemble des tuples appartenant
la fois R1 et R2.
23

Intersection (Exemple)
R1
NoCli

Nom

1
2
3
8

AMEUR
BEN SALAH
MRABET
JELALI

LA:

R3 = INTER (R1,R2)

SQL: (SELECT * FROM R1)


INTERSECT
(SELECT

R2
NoCli

Nom

1
9

AMEUR
ROUISSII

* FROM R2);

NoCli

Nom

AMEUR

24

Diffrence
LA:

R3 = DIFFER (R1,R2)

SQL:

(SELECT )
EXCEPT (ou MINUS)

(SELECT )
Principe:
La diffrence est applique sur deux relations de mme
structure R1 et R2 pour obtenir une relation R3.
R3

mme structure que R1 et R2


ensemble des tuples appartenant R1
et n'appartenant pas R2.
25

Diffrence (Exemple)
R1
NoCli

Nom

1
2
3
8

AMEUR
BEN SALAH
MRABET
JELALI

LA:

R3 = DIFFER (R1,R2)

SQL: (SELECT * FROM R1)


EXCEPT (ou MINUS)

(SELECT

R2
NoCli

Nom

1
9

AMEUR
ROUISSII

* FROM R2);

NoCli

Nom

2
3
8

BEN SALAH
MRABET
JELALI
26

Produit Cartsien
LA:

R3 = PRODUIT (R1,R2)

SQL:

SELECT
*
FROM
table1, table2;

Principe:
Le produit cartsien est appliqu sur deux relations R1 et R2
n'ayant pas ncessairement la mme structure pour obtenir une
relation R3.
R3

structure gale la juxtaposition des


structures de R1 et R2.
compose de l'ensemble des tuples obtenus
suite toutes les combinaisons des tuples
de R1, R2

27

Produit Cartsien (Exemple)


R1
NoCli

Nom

1
2

AMEUR
BEN SALAH

R2
NoCom

Date

108
105
107

12/04/02
15/02/01
16/04/01

LA:

R3 = PRODUIT (R1,R2)

SQL: SELECT * FROM R1,R2;

NoCli

Nom

NoCom

Date

1
1
1
2
2
2

AMEUR
AMEUR
AMEUR
BEN SALAH
BEN SALAH
BEN SALAH

108
105
107
108
105
107

12/04/02
15/02/01
16/04/01
12/04/02
15/02/01
16/04/01
28

La clause DISTINCT
La clause DISTINCT permet d'liminer les doublons.
Exemple 1 :
SELECT Localit
FROM Client
WHERE Catgorie= 1;

Localit
Carthage
Tunis
Ariana
Tunis

Exemple 2 :
SELECT DISTINCT Localit

Localit

FROM Client

Carthage
Tunis
Ariana

WHERE Catgorie= 1;

29

Requtes avec comparaisons (1)


La clause WHERE peut utiliser :
des comparateurs: =, >, <, >=, <=,<>
des oprateurs logiques: AND, OR, NOT
des prdicats: IN, LIKE, NULL, ALL, SOME, ANY,EXISTS
Ces oprateurs sappliquent aux valeurs numriques, aux
chanes de caractres, et aux dates.

Les chanes de caractres et les dates doivent tre


encadres par '...' contrairement aux nombres.

30

Requtes avec comparaisons (2)


Exemple 1 :
SELECT Nom, Adresse, Compte
FROM Client
WHERE Localit = 'Ariana' AND Compte <= 0;

Nom

Adresse

Compte

MRABET

112, r. dAthne

0.000

Exemple 2 :
SELECT Nom, Adresse, Compte
FROM Client
WHERE Compte between 100 AND 500;

Nom

Adresse

Compte

JELALI

72, r. de la Gare

320.000

AMEUR

23, a. Carthage

125.000

Exemple 3 :
SELECT Nom, Adresse, Compte
FROM
CLIENT
WHERE Nom LIKE 'BEN%';
Rq: '..%' commence par ..
'%..%' contient ..

Nom

Adresse

BEN SALAH

25, r. du Caire

Compte
-230.000

31

Requtes avec comparaisons (3)


Exemple 4 :

Nom

Adresse

SELECT Nom, Adresse, Compte


FROM Client
WHERE Localit IN ('Ariana','Tunis');

BEN SALAH
MRABET
KRAIEM
LABIDI
JELALI
ROUISSI

25, r. du Caire
112, r. dAthne
5, a. de Madrid
180, r. de Rome
72, r. de la Gare
65, r. Lafayette

Exemple 5 :

SELECT Nom, Adresse, Compte


Nom
FROM Client
AMEUR
WHERE Localit NOT IN ('Ariana','Tunis'); CHAOUACHI

Adresse

Compte
-230.000
0.000
0.000
72.000
320.000
35.000

Compte

GAFSI

23, a. Carthage
3, a. des Roses
14, r. de lEt

125.000
-258.000
870.000

NoCom

QteCommande

Exemple 6 :
SELECT NoCom, QteCommande
FROM LigneCommande
WHERE QteCommande IS NULL;

Champ non renseign

32

Requtes avec regroupement (1)


La clause GROUP BY permet de crer des sous-ensembles
(regroupements) de lignes pour lesquels la valeur d'une (ou
plusieurs) colonne est identique.
Tous les attributs placs derrire la clause SELECT doivent
tre prsents derrire la clause GROUP BY. La proposition
inverse n'est pas vraie.
La clause GROUP BY est obligatoire ds lors qu'il y a la fois
des attributs et des fonctions de calcul derrire la clause
SELECT.
La slection sur les regroupements se fait en utilisant la clause
HAVING.
SELECT
FROM
GROUP BY expr, ... [HAVING conditions];
33

Requtes avec regroupement (2)


Exemple 1:
SELECT
Catgorie
FROM
Client
GROUP BY Catgorie;

3 sous-ensembles :
1, 2, 3.

Exemple 2:
SELECT
FROM
GROUP BY
HAVING

Cette requte va crer


autant de sousensembles que de
valeurs possibles de
l'attribut Catgorie:

Catgorie
Client
Catgorie
Catgorie = 1;

Regroupement par catgorie


des clients de catgorie 1.

34

La clause ORDER BY
La clause ORDER BY permet de trier le rsultat affich.
SELECT
FROM
ORDER BY attribut1 [ASC], attribut2 DESC, ... ;

Pour afficher un ordre dcroissant il suffit de prciser DESC


derrire la colonne cite dans le tri . Lordre croissant (ASC) tant
celui par dfaut.
Le nom de colonne peut tre remplac par la position de la
colonne derrire la clause SELECT.
SELECT attribut1, attribut2
FROM
table
ORDER BY 1 DESC;

Ordre dcroissant
selon lattribut1
35

La clause ORDER BY (Exemples)


Exemple 1:

NoCli

Nom

3
5
4
8
7
6
2
1

MRABET
LABIDI
KRAIEM
JELALI
GAFSI
CHAOUACHI
BEN SALAH
AMEUR

SELECT
NoCli, Nom
FROM
Client
ORDER BY Nom DESC;

Exemple 2:
SELECT
FROM
WHERE
ORDER BY

NoCli, Nom, Localit


Client
Catgorie IN (1,2)
3;

NoCli
3
1
6
2
4
5

Nom
MRABET
AMEUR
CHAOUACHI
BEN SALAH
KRAIEM
LABIDI

Localit
Ariana
Carthage
La Marsa
Tunis
Tunis
Tunis
36

Notion dALIAS
Permet de renommer des attributs ou des tables.
SELECT attribut1 AS alias1, attribut2 AS alias2, ...
FROM

table alias, ...;

Dsormais le nom de la table nest plus reconnu que par


lalias dans la totalit de la requte.

Pour les attributs, lalias correspond aux titres des colonnes


affiches dans le rsultat de la requte.
La notion dalias pour les attributs est souvent utilise
lorsquil sagit dattributs calculs.

37

Notion dALIAS (Exemples)


Exemple 1:

Numro_Client

Nom

1
2
3
4
5
6

AMEUR
BEN SALAH
MRABET
KRAIEM
LABIDI
CHAOUACH

SELECT NoCli AS Numro_Client, Nom


FROM
Client C
WHERE C.Catgorie IN (1,2);

Exemple 2:
SELECT NoCom AS NCde, NoProd,
QteCommande*Prix AS Total-DNT
FROM
LigneCommande LC, Produit P
WHERE LC.NoProd = P.NoProd;

NCde NoProd
100
100
101
102
102
103
104
104
104
104

10
17
12
12
17
11
14
15
16
17

Total-DNT
5.100,000
15.625,000
5.500,000
19.250,000
5.625,000
5.300,000
10.750,000
2.640,000
7.125,000
23.625,000
38

Les fonctions d'agrgation


Elles sont utilises avec les oprateurs de calcul et de
regroupement. SELECT fonction1(att1), fonction2(att2), ...
FROM

table;

Les fonctions statistiques de base

La fonction de comptage

SUM(attribut) : total des valeurs d'un attribut.

COUNT(*) : nombre de n-uplets.

AVG(attribut) : moyenne des valeurs d'un


attribut.

COUNT(DISTINCT attribut) :
nombre de valeurs diffrentes de
l'attribut.

MIN(attribut) : plus petite valeur d'un attribut.


MAX(attribut) : plus grande valeur d'un
attribut.
Rq : les valeurs NULL sont ignores.

39

Les fonctions statistiques (1)


Exemple 1: SUM
SELECT
FROM
GROUP BY

NoProd, SUM(QteCommande) AS Qte-Totale


LigneCommande
NoProd;

Quantit totale commande pour chaque produit.

Exemple 2: AVG
SELECT
FROM
GROUP BY

NoProd, AVG(QteCommande) AS Qte-Moyenne


LigneCommande
NoProd;

Quantit moyenne commande pour chaque produit.


40

Les fonctions statistiques (2)


Exemple 3: MIN
SELECT
FROM

NoCli, Nom, MIN(Compte) AS Compte-Min


Client;

Les clients dont la valeur des comptes est minimale.


Exemple 4: MAX
SELECT
FROM

NoProd, MAX(QteStock) AS Stock-Max


Produit ;

Les produit dont la quantit en stock est maximale.

41

La fonction de comptage
Exemple 1: Nombre total de commandes.
SELECT
FROM

Count( ) AS Nbre-Total-Cdes
Commande;

Exemple 2: Nombre de produits diffrents commands.


SELECT
FROM
GROUP BY

NoCom, Count(DISTINCT NoProd) AS Nbre-Produits


LigneCommande
NoCom;

Exemple 3: Quantit moyenne commande pour les produits faisant


lobjet de plus de 3 commandes.

SELECT
FROM
GROUP BY

NoProd, AVG(QteCommande)
LigneCommande
NoProd

HAVING

Count(*) > 3;
42

Requtes imbriques
SQL offre la possibilit dimbriquer des requtes.
On parle de requte principale et de sous requte.
Le lien entre la requte principale et la sous requte
peut se faire en comparant une colonne avec le
rsultat de la sous requte .
Ceci se fait en utilisant les comparateurs (=, >, <, >=,
<=,<>) ou les prdicats (IN, LIKE, NULL, ALL, SOME,
ANY,EXISTS)

43

Requtes imbriques (Exemples)


Exemple 1: Numros et dates des commandes des clients de lAriana.
SELECT NoCom, Date
FROM
Commande
WHERE NoCli IN (SELECT NoCli
FROM
Client
WHERE Localit = Ariana);
Jointure

quivalente

NoCom

Date

101
106

07/12/99
09/07/01

SELECT NoCom, Date


FROM
Commande Cd, Client C
WHERE C.NoCli = Cd.NoCli
AND Localit = Ariana;

44

Requtes imbriques (Exemples)


Exemple 2: Nom des clients qui ont pass au moins une commande.
SELECT Nom
FROM

Client C

WHERE EXIST (SELECT


FROM Commande Cd
WHERE C.NoCli = Cd.NoCli );

Exemple 3: Nom des clients qui nont pass aucune commande.


SELECT Nom

FROM

Client C

WHERE NOT EXIST (SELECT


FROM
Commande Cd
WHERE C.NoCli = Cd.NoCli );

45

Les vues sous SQL


La commande SQL CREATE VIEW permet de crer des
vues:
CREATE VIEW Nom-Vue AS

commande SELECT;

Une vue permet de rutiliser le rsultat dune requte


dans dautres requtes comme s'il s'agissait d'une
nouvelle
table
(bien
qu'elle
soit
rgnre
dynamiquement lors de son utilisation).

46

Les vues sous SQL (Exemple)


Exemple : Noms des clients de Tunis qui ont pass des commandes
le mois davril.
CREATE VIEW Client-Tunis AS
SELECT
FROM Client
WHERE Localit = Tunis';

SELECT Nom
FROM Client-Tunis CT, Commande Cd
WHERE CT.NoCli = Cd.NoCli
AND Date > '01/04/01'
AND Date < '30/04/01;
47