Vous êtes sur la page 1sur 131

Approfondissement Bases de Donnes

NFA011
Cdric du Mouza
(daprs des supports dElisabeth Mtais)

Cdric du Mouza NFA011

SQL, le langage d'interrogation

Rappels

Algbre relationnelle - les oprateurs

Expression des requtes l'aide de l'algbre relationnelle

Projection et restriction

Fonctionnalits diverses

Requtes imbriques

La jointure

Oprateurs ensemblistes

La division

Groupement (GROUP BY)


Cdric du Mouza NFA011

Le modle relationnel
Une base de donnes est constitue dun ensemble de relations
Une relation possde un schma, constitu dun nom de relation
et dun ensemble dattributs
Un attribut dune relation se caractrise par un nom unique et
prend ses valeurs dans un domaine donn (ex.: chane de
caractres, entier, date, etc)

Exemple:
AVION(Numav:entier,Capacit:entier,Type:string,Entrepot:string)
PILOTE(Matricule:entier,Nom:string,Ville:string,Age:entier,Salaire:
entier)

Cdric du Mouza NFA011

Schma relationnel

Une relation peut tre reprsente sous forme de table o:

Chaque colonne correspond un attribut


Chaque ligne (appele aussi nuplet) correspond un lment de lensemble de la
relation
Lordre des lignes na pas dimportance contrairement aux colonnes

AVION

Numav
14
345

PILOTE Matricule
1
2

Capacite
25
75

Type
A400
B200

Nom
Ville
Figue
Cannes
Lavande Touquet

Cdric du Mouza NFA011

Entrepot
Garches
Maubeuge

Age
45
24

Salaire
28004
11758

Langage dinterrogation
Rappels

Cdric du Mouza NFA011

SQL (Structured Query Language)

SQL permet:

La dfinition et la modification
du schma de la base de
donne,

La manipulation des donnes

L'interrogation des donnes,

Le contrle des accs la base.

Cdric du Mouza NFA011

Gnalogie du langage SQL

Heure_dpart
Caen

VOL

{V.Heure_Dpart/ Vol (V)

Numvol

DEPART

Autre

Algbre
relationnelle

et V.Ville_arrive = 'Caen'
et D / Dpart (D)
et D.Numvol = V.Numvol
et D.Date = '19-12-95'}

Calcul de
tuples

SQL
Cdric du Mouza NFA011

Compagnie Aerienne (1)


AVION

Numav
14
345

Capacite
25
75

Type
A400
B200

PILOTE Matricule
1
2

PASSAGER

Numab
1
8

Entrepot
Garches
Maubeuge

Nom
Ville
Figue
Cannes
Lavande Touquet

Nomab
Nifance
Tarice

Cdric du Mouza NFA011

Age
45
24

Salaire
28004
11758

Compagnie Aerienne (2)


VOL

Numvol Heure_dpart Heure_arrive Ville _dpart Ville_arrive


AL12
AF8

08-18
11-20

DEPART

09-12
23-54

Numvol
AL12
AL12

RESERVATION

Date_dep
31-12-95
19-12-95

Numab

Numvol

Date_dep

1
2

AL12
AL12

31-12-95
31-12-95

Cdric du Mouza NFA011

Paris
Vaux

Numav
14
345

Lilles
Rio

Matricule
1
2

Langage dinterrogation
Algbre relationnelle - les oprateurs

Cdric du Mouza NFA011

10

Oprateurs de l'algbre relationnelle


Interrogation de la base de donnes travers des
oprateurs de type algbrique, c'est--dire qui peuvent se
composer pour obtenir le rsultat.
5 oprations de base pour exprimer toutes les requtes.
2

Oprations unaires:
Restriction
Projection

Cdric du Mouza NFA011

11

Oprateurs de l'algbre relationnelle


3

oprations binaires
Union
Diffrence
Produit

Autres

cartsien

oprations drives

Jointure
Intersection
Division
Cdric du Mouza NFA011

12

La restriction

La restriction (ou slection) d'une relation R selon un


critre Q donne une relation de mme schma, avec pour
tuples rsultats ceux de R qui satisfont le critre Q.
Elle est note

Q(R)

Q est une expression compose de connecteurs (ET ^,


OU v) et de prdicats (<, >, , , , =) portant sur les
attributs, valuables Vrai ou Faux pour un tuple
donn.
Cdric du Mouza NFA011

13

La restriction
AVION

Critre de restriction:
Entrept = 'Cannes'

NUMAV

CAPAC.

TYPE

ENTREP.

150

B707

Cannes

100

A500

Cannes

45

C2000

Rio

200

B707

Nice

Cdric du Mouza NFA011

14

La projection

La projection d'une relation R sur un ensemble d'attribut C


donne une relation ayant pour schma cet ensemble
d'attributs.
Elle est note

C(R)

Ses tuples sont ceux de la relation R, rduits aux attributs de


la projection.

Cdric du Mouza NFA011

15

La projection

AVION

Attributs de projection:
capacit, type

NUMAV

CAPAC.

TYPE

ENTREP.

150

B707

Cannes

100

A500

Cannes

45

C2000

Rio

200

B707

Nice

Cdric du Mouza NFA011

16

Combinaison des deux oprations

AVION

Les oprateurs de restriction


et de projection peuvent se
combiner pour slectionner
un rsultat:

NUMAV

CAPAC.

TYPE

ENTREP.

150

B707

Cannes

100

A500

Cannes

45

C2000

Rio

200

B707

Nice

Cdric du Mouza NFA011

17

UNION, DIFFERENCE ET INTERSECTION


R1

R1

R1

R2

R2

UNION

R2

R2

INTERSECTION

DIFFERENCE
Cdric du Mouza NFA011

18

Sur l'exemple:
AVION_1

AVION_2

NUMAV

CAPAC.

TYPE

NUMAV

C2000

Nice

100

A500

Cannes

200

B707

Nice

Cdric du Mouza NFA011

TYPE

ENTREP.

150

B707

Cannes

100

A500

Cannes

ENTREP.

45

CAPAC.

19

Sur l'exemple: UNION


AVION_1 AVION_2

NUMAV

CAPAC.

TYPE

ENTREP.

150

B707

Cannes

100

A500

Cannes

45

C2000

Nice

200

B707

Nice

Cdric du Mouza NFA011

20

Sur l'exemple: INTERSECTION

AVION_1 AVION_2

NUMAV

CAPAC.

100

Cdric du Mouza NFA011

21

TYPE

ENTREP.

A500

Cannes

Sur l'exemple: DIFFERENCE

AVION_1AVION_2

NUMAV

CAPAC.

TYPE

ENTREP.

150

B707

Cannes

Cdric du Mouza NFA011

22

Le produit cartsien
Le produit cartsien de deux relations R1 et R2 est une relation
dont le schma est la concatnation des schmas de R1 et R2.
Il est not R1 x R2
Ses tuples sont ceux de R1, concatns chacun tous les
tuples de R2.

RESERVATION

NUMAB

NOM

19-DEC-95

Amandier

AI200

23-DEC-95

Lavande

AL 500

24-DEC-95

NUMAB

NUMVOL

DATE_DEP

AI 100

2
2

Cdric du Mouza NFA011

PASSAGER

23

Le produit cartsien
Rservation X Passager

R.NUMAB

NUMVOL

DATE_DEP

P.NUMAB

NOM

AI 100

19-DEC-95

Amandier

AI200

23-DEC-95

Amandier

AL 500

24-DEC-95

Amandier

AI 100

19-DEC-95

Lavande

AI200

23-DEC-95

Lavande

AL 500

24-DEC-95

Lavande

Cdric du Mouza NFA011

24

La jointure
Une jointure est un produit cartsien suivi d'une
restriction sur un critre.
Rservation X Passager

Critre:
RESERVATION.NUMAB
= PASSAGER.NUMAB

R.NUMAB NUMVOL

DATE_DEP

P.NUMAB

NOM

AI 100

19-DEC-95

Amandier

AI200

23-DEC-95

Amandier

AL 500

24-DEC-95

Amandier

AI 100

19-DEC-95

Lavande

AI200

23-DEC-95

Lavande

AL 500

24-DEC-95

Lavande

Cdric du Mouza NFA011

25

Rsultat de la jointure
RESULTAT:
Jointure de la relation RESERVATION et de la relation PASSAGER
sur le critre RESERVATION.NUMAB = PASSAGER.NUMAB

RESERVATION

PASSAGER

numab

R.NUMAB NUMVOL

DATE_DEP

P.NUMAB

NOM

AI 100

19-DEC-95

Amandier

AI200

23-DEC-95

Lavande

AL 500

24-DEC-95

Lavande

Cdric du Mouza NFA011

26

La division
Le rsultat de la division d'une relation R par une relation S est une relation Q telle
que:
(1) Le schma de Q est constitu des attributs de R n'appartenant pas S.
(2) Les tuples de Q sont ceux qui, concatns n'importe quel tuple de S donnent un
tuple de R.
R

MATRICULE

NUMAV

100

100

101

NUMAV
100
101

Cdric du Mouza NFA011

MATRICULE
2

27

Langage dinterrogation
Expression des requtes l'aide de l'algbre
relationnelle

Cdric du Mouza NFA011

28

Exemple 1

REQUETE:
Quels sont les numros, types et capacits des avions ayant une
capacit suprieure 100 ?

Cdric du Mouza NFA011

29

Exemple 1
Rsultat

REQUETE:
Quels sont les numros,
types et capacits des avions
ayant une capacit
suprieure 100 ?

NUMAV, TYPE,
CAPACITE

CAPACITE > 100

AVION
Cdric du Mouza NFA011

30

Exemple 1
2 oprations de restriction sont-elles commutatives?

A(B(R))=B(A(R)) ??
2 oprations de projection sont-elles commutatives?

A(B(R)) = B(A(R)) ??
La restriction et la projection sont-elles des oprations
commutatives?

A(B(R)) = B(A(R)) ??

Cdric du Mouza NFA011

31

Exemple 2

REQUETE:
Quels sont les noms des passagers voyageant sur le vol
AF105 du 26 mars 1996?

Cdric du Mouza NFA011

32

Exemple 2
REQUETE:
NOMAB

Quels sont les noms


des passagers
voyageant sur le vol
AF105 du 26 mars
1996?

Numab = Numab

NUMVOL = 'AF105'
AND DATE_DEP =
'26-03-96'

PASSAGER
Cdric du Mouza NFA011

33

RESERVATION

Exemple 2
Une opration de slection et de jointure sont-elles
commutatives?

A(RS) = A(R)S
Une opration de projection et de jointure sont-elles
commutatives?

A(RS) = A(R)S

Cdric du Mouza NFA011

34

Exemple 3

REQUETE:
Quels sont les pilotes habitant Deauville et partant pour Las
Vegas ?

Cdric du Mouza NFA011

35

Exemple 3
REQUETE:
Nom

Quels sont les


pilotes habitant
Deauville et partant
pour Las Vegas ?

Matricule
Numvol

Ville = 'Deauville'

Ville_arrive =
'Las Vegas'

VOL
Cdric du Mouza NFA011

DEPART
36

PILOTE

Exemple 3
2 jointures sont-elles commutatives?

R(ST) = (RS)T ??

Cdric du Mouza NFA011

37

Exemple 3

Daprs les rgles identifies, proposer dautres expressions sous


forme darbre pour la requte de lexemple 3.
Conclusion?

Cdric du Mouza NFA011

38

Exemple 4

REQUETE:
Quels sont les noms des pilotes effectuant le vol
AL123 ?

Cdric du Mouza NFA011

39

Exemple 4

REQUETE:

Nom

Quels sont les noms des


pilotes effectuant le vol
AL123 ?
Matricule = Matricule

Numvol = 'AL123

DEPART

PILOTE
Cdric du Mouza NFA011

40

Exemple 5

REQUETE:
Quels sont les noms des passagers pour des vols partant pour Dakar ?

Cdric du Mouza NFA011

41

Exemple 5
REQUETE:

NOMAB

Quels sont les noms des


passagers pour des vols partant
pour Dakar ?
Numab
Numvol

Ville_arrive =
'Dakar'

VOL
Cdric du Mouza NFA011

RESERVATION
42

PASSAGER

Langage dinterrogation
Projection et restriction

Cdric du Mouza NFA011

43

Projection, Restriction
Le

principe
SELECT AVION.numav
FROM AVION
WHERE AVION.capacit > 200

Projection seule:

Restriction seule:

SELECT AVION.numav
FROM AVION

SELECT AVION.*
FROM AVION
WHERE AVION.capacit > 200

Cdric du Mouza NFA011

44

Exercices

Exercice n 1: Quel est l'ge du pilote de matricule 15 ?

Exercice n 2: Quels sont les pilotes de cette compagnie


arienne ?
(leur matricule, leur nom, leur ville, leur ge et leur salaire).

Cdric du Mouza NFA011

45

Correction de l'exercice n 1
Exercice n 1: Quel est l'ge du pilote de matricule 15 ?
SELECT PILOTE.AGE
FROM PILOTE
WHERE MATRICULE = 15

Cdric du Mouza NFA011

46

Correction de l'exercice n 2
Exercice n 2: Quels sont les pilotes de cette compagnie
arienne (leur matricule, leur nom, leur ville, leur ge et leur
salaire).
SELECT *
FROM PILOTE

Cdric du Mouza NFA011

47

Langage dinterrogation
Fonctionnalits diverses

Cdric du Mouza NFA011

48

Tri, doublons, et alias


(a) Tri

(c) Omission du prfixe

SELECT AVION.numav
FROM AVION
WHERE AVION.CAPACITE > 200
ORDER BY AVION.numav DESC
(ou ASC)

(b) Suppression des doublons

SELECT numav
FROM AVION
WHERE CAPACITE > 200

(d) Emploi d alias

SELECT DISTINCT AVION.numav


FROM AVION
WHERE AVION.CAPACITE > 200
(ou ALL)

Cdric du Mouza NFA011

SELECT A.numav
FROM AVION A
WHERE A.CAPACITE > 200

49

Exercices

Exercice n 3: Quels sont les types d'avions entreposs


Tarascon, avec leur capacit, par ordre de capacits croissantes ?

Cdric du Mouza NFA011

50

Correction de l'exercices n 3

Exercice n 3: Quels sont les types d'avions entreposs


Tarascon, avec leur capacit, par ordre de capacits croissantes ?
SELECT DISTINCT TYPE, CAPACITE
FROM AVION
WHERE ENTREPOT = 'Tarascon'
ORDER BY CAPACITE ASC

Cdric du Mouza NFA011

51

Prdicats dans le critre de slection


= != > < >= <=

NOT OR AND

IN BETWEEN x AND y

LIKE

SELECT NUMAV
FROM AVION
WHERE CAPACITE > 200
AND ((ENTREPOT= 'Saint nom la Bretche') OR (ENTREPOT= 'Mantes la Jolie'))
AND NUMAV != 300
SELECT NUMAV
FROM AVION
WHERE ENTREPOT IN ('Saint nom la Bretche' , 'Mantes la Jolie')
AND CAPACITE BETWEEN 200 AND 210
AND TYPE LIKE 'B_EING%'

Cdric du Mouza NFA011

52

Oprateurs logiques et valeurs nulles


NOT

TRUE
FALSE

FALSE
TRUE

NULL
NULL

AND
TRUE
FALSE
NULL

TRUE
TRUE
FALSE
NULL

FALSE
FALSE
FALSE
FALSE

NULL
NULL
FALSE
NULL

OR
TRUE
FALSE
NULL

TRUE
TRUE
TRUE
TRUE

FALSE
TRUE
FALSE
NULL

NULL
TRUE
NULL
NULL

Cdric du Mouza NFA011

53

Exercices

Exercice n 4: Quelles sont les villes ayant un nom


commenant par 'L' et o un pilote de moins de 20 ans gagne
plus de 200000F ?

Exercice n 5: Quels sont les numros d'avions, avec leur


entrept, ne rsidant pas Marolles-en-Hurepoix, ayant une
capacit suprieure 200 ?
(donns par ordre de numros dcroissants).

Cdric du Mouza NFA011

54

Correction de l'exercice n 4

Exercice n 4: Quelles sont les villes ayant un nom commenant


par 'L' et o un pilote de moins de 20 ans gagne plus de 200000F ?
SELECT DISTINCT VILLE
FROM PILOTE
WHERE AGE < 20
AND SALAIRE > 200000
AND VILLE LIKE 'L%'

Cdric du Mouza NFA011

55

Correction de l'exercice n 5
Exercice n 5: Quels sont les numros d'avions, avec leur
entrept, ne rsidant pas Marolles-en-Hurepoix, ayant une
capacit suprieure 200 ?
(donns par ordre de numros dcroissants).
SELECT NUMAV, ENTREPOT
FROM AVION
WHERE ENTREPOT != 'Marolles-en-Hurepoix'
AND CAPACITE > 200
ORDER BY NUMAV DESC

Cdric du Mouza NFA011

56

Les fonctions de date


Fonction

Desc

Norme

Access

MySQL

Sql Srv

Oracle

Current_date

Date courante

Current_time

Heure courante

Getdate

Heure et date courante

Now

Heure et date courante

Sysdate

Date et heure courante

Day/month/year

Slectionne le jour/mois/an

To_char(f1,f2)

Conversion de date ou
numrique en string

Cdric du Mouza NFA011

57

Les fonctions sur chanes de caractres


Fonction

Desc

Norme

Access

MySQL

Sql Srv

Oracle

Lower/Upper

Mise en minuscules/majusc

Substring

Extraction sous-chane

Substr

Extraction sous-chane

Position

Position dune chane dans


une autre

Locate

Position dune chane dans


une autre

Cdric du Mouza NFA011

58

Les fonctions numriques


Fonction

Desc

Norme

Access

MySQL

Sql Srv

Oracle

Abs

Valeur absolue

Ceiling

Valeur approche haute

Ceil

Valeur approche haute

Floor

Valeur approche basse

Cos, sin, tan,


exp, log,mod,
power, sqrt

Oprations diverses

Cdric du Mouza NFA011

59

Les fonctions
Lower(a), Soundex (a), Abs(a), Sqrt(n), Length(a), etc...
SELECT NUMAV
FROM AVION
WHERE LOWER (ENTREPOT) = 'le vsiney'
SELECT MATRICULE, NOM
FROM PILOTE
WHERE SOUNDEX (NOM) = SOUNDEX ('SINTEXUPERI')
SELECT UPPER (NOM)
FROM PILOTE
WHERE ADRESSE = 'Cordillre des Andes'

Cdric du Mouza NFA011

60

Exercices
Exercice n 6: Quelles sont les villes d'o part un vol pour Ajaccio?
(donner les rsultats en majuscule).

Cdric du Mouza NFA011

61

Correction de l'exercice n 6

Exercice n 6: Quelles sont les villes d'o part un vol pour Ajaccio?
(donner les rsultats en majuscule).

SELECT DISTINCT UPPER (VILLE_DEPART)


FROM VOL
WHERE VILLE_ARRIVEE = 'Ajaccio'

Cdric du Mouza NFA011

62

Valeurs nulles

La valeur de certains attributs peut ne pas tre connue, on parle


alors de valeurs nulles (mot-cl NULL)

NULL nest pas une valeur mais une absence de valeur! Les
oprations ou les comparaisons ne peuvent lui tre appliqu

Toute opration applique NULL donne NULL

Toute comparaison avec NULL donne ni vrai ni faux, mais


UNKNOW

Cdric du Mouza NFA011

63

Valeurs nulles

On associe TRUE la valeur 1, FALSE la valeur 0 et


UNKNOW la valeur
x AND y = min ( x , y )
x OR y = max ( x , y )
NOT x = 1 x

Les conditions dans la clause WHERE sont values pour


chaque tuple et seuls ceux pour lesquels on obtient 1 (TRUE)
sont gards.

Cdric du Mouza NFA011

64

Valeurs nulles

PILOTE Matricule
1
2

Nom

Ville

Figue
Cannes
Lavande Touquet

Age

Salaire
28004

24

SELECT Nom

SELECT Nom

SELECT Nom

From PILOTE

From PILOTE

From PILOTE

Where Age < 40

Where Age < 40

Where Age < 40

AND Salaire > 10000

OR Salaire < 10000

SELECT Nom From PILOTE


Where Age 40 OR Age 40
Cdric du Mouza NFA011

65

Agrgations
Jusqu

prsent on a vu des requtes comme suite


doprations tuple tuple
Les fonctions dagrgation permettent dexprimer
des conditions/faire des oprations sur des groupes
de tuples
Avec SQL nous pouvons:
Partitionner une relation en groupes
Exprimer des relations sur des groupes
Agrger des valeurs sur les groupes
Il existe un groupe par dfaut: la relation entire
Cdric du Mouza NFA011

66

Fonctions dagrgation
Sappliquent

en gnrale des valeurs numriques


5 principales, appliques sur chaque groupe

COUNT qui compte le nombre de valeurs non nulles


AVG qui calcule la moyenne des valeurs sur une colonne choisie
SUM idem mais fait la somme
MIN/MAX retourne la valeur MIN/MAX des valeurs dune colonne choisie

Les

oprateurs dagrgation ne peuvent tre utilis


que dans un SELECT (ou HAVING, voir plus loin)
Ne peuvent tre utilis dans un SELECT avec
dautres attributs (sauf si GROUP BY, voir plus loin)
Cdric du Mouza NFA011

67

Les agrgats
Avg, Count, Max, Min, Sum, Stddev, Variance
Exemple:
Quel est le nombre d'avions ayant une capacit suprieure 200?
SELECT COUNT (NUMAV)
FROM AVION
WHERE CAPACITE > 200
SELECT COUNT (DISTINCT NUMAV)
FROM AVION
WHERE CAPACITE > 200
(ou ALL)

Cdric du Mouza NFA011

68

Exercices
Exercice n 7: Quel est le nombre d'avions en services (i.e. dans
la relation DEPART), le 19 dcembre 1995 ?

Exercice n 8: Quelle est la capacit moyenne des avions


entreposs Pogo Togo ?

Cdric du Mouza NFA011

69

Correction de l'exercice n 7

Exercice n 7: Quel est le nombre d'avions en services (i.e.


dans la relation DEPART), le 19 dcembre 1995 ?
SELECT COUNT (DISTINCT NUMAV)
FROM DEPART
WHERE DATE_DEP = '19-12-95'

Cdric du Mouza NFA011

70

Correction de l'exercice n 8
Exercice n 8 : Quelle est la capacit moyenne des avions
entreposs Pogo Togo ?
SELECT AVG (ALL CAPACITE)
FROM AVION
WHERE AVION.ENTREPOT = 'Pogo Togo'

Cdric du Mouza NFA011

71

Langage dinterrogation
Requtes imbriques

Cdric du Mouza NFA011

72

Prdicat dexistence
SELECT
FROM
WHERE EXISTS ( SELECT
FROM
WHERE

);

Exemple:
Quels sont les pilotes qui habitent dans une ville o n'est bas aucun avion ?
SELECT PILOTE.MATRICULE, PILOTE.NOM
FROM PILOTE
WHERE NOT EXISTS ( SELECT AVION.*
FROM AVION
WHERE AVION.ENTREPOT = PILOTE.VILLE)

Cdric du Mouza NFA011

73

Requte l'intrieur de IN

Exemple: Quels sont les noms des pilotes (avec leurs matricules) qui habitent
dans une ville o sont localiss des avions de capacit suprieure 250 ?

SELECT PILOTE.MATRICULE, PILOTE.NOM


FROM PILOTE
WHERE VILLE IN ( SELECT ENTREPOT
FROM AVION
WHERE CAPACITE > 250)

Cdric du Mouza NFA011

74

Exercices

Exercice n 9: Exprimer la requte suivante avec un "EXISTS":


Quels sont les noms des pilotes (avec leur matricule) qui habitent
dans une ville o sont localiss des avions de capacit suprieure
250 ?
Exercice n 10:
Exprimer la requte suivante avec un "IN":
Quels sont les noms des passagers (avec leur numro d'abonn)
ayant rserv pour le 1er avril 1996 ?

Cdric du Mouza NFA011

75

Correction de l'exercice n 9
Exercice n 9: Exprimer la requte suivante avec un "EXISTS":
Quels sont les noms des pilotes (avec leur matricule) qui habitent
dans une ville o sont localiss des avions de capacit suprieure
250 ?
SELECT PILOTE.MATRICULE, PILOTE.NOM
FROM PILOTE
WHERE EXISTS ( SELECT *
FROM AVION
WHERE CAPACITE > 250
AND AVION.ENTREPOT = PILOTE.VILLE)

Cdric du Mouza NFA011

76

Correction de l'exercice n 10

Exercice n 10: Quels sont les noms des passagers (avec leur
numro d'abonn) ayant rserv pour le 1er avril 1996 ?
(avec un "IN").
SELECT PASSAGER. NUMAB, PASSAGER. NOMAB
FROM PASSAGER
WHERE NUMAB IN (SELECT RESERVATION.NUMAB
FROM RESERVATION
WHERE RESERVATION.DATE_DEP = '01-04-96')

Cdric du Mouza NFA011

77

Langage dinterrogation
La jointure

Cdric du Mouza NFA011

78

Exemple
Quels sont les noms des pilotes (avec leur matricule) qui assurent un vol le
vendredi 13 octobre 1995 ?

SELECT DISTINCT PILOTE.MATRICULE, PILOTE.NOM


FROM PILOTE, DEPART
WHERE PILOTE.MATRICULE = DEPART.MATRICULE
AND DEPART.DATE_DEP = '13-10-95'

Cdric du Mouza NFA011

79

Expression d'une jointure l'aide de requtes


imbriques
Avec EXISTS SELECT PILOTE.MATRICULE, PILOTE.NOM
FROM PILOTE
WHERE EXISTS (SELECT *
FROM DEPART
WHERE PILOTE.MATRICULE = DEPART.MATRICULE
AND DEPART.DATE_DEP = '13-10-95')

Avec IN

SELECT PILOTE.MATRICULE, PILOTE.NOM


FROM PILOTE
WHERE MATRICULE IN ( SELECT DEPART.MATRICULE
FROM DEPART
WHERE DATE_DEP ='13-10-95')
Cdric du Mouza NFA011

80

Exercice
Exercice n 11:
Quels sont les noms des pilotes (avec leur matricule) qui assurent
un vol le vendredi 13 octobre 1995, sur un avion de capacit
suprieure 250 ?
a) de manire prdicative,
b) l'aide de requtes imbriques.

Cdric du Mouza NFA011

81

Correction de l'exercice n 11
Exercice n 11:
Quels sont les noms des pilotes (avec leur matricule) qui assurent
un vol le vendredi 13 octobre 1995, sur un avion de capacit
suprieure 250 ?
a) de manire prdicative,
SELECT DISTINCT PILOTE.MATRICULE, PILOTE.NOM
FROM PILOTE, DEPART, AVION
WHERE PILOTE.MATRICULE = DEPART.MATRICULE
AND DEPART.DATE_DEP = '13-10-95'
AND DEPART.NUMAV = AVION.NUMAV
AND AVION.CAPACITE > 250

Cdric du Mouza NFA011

82

Correction de l'exercice n 11 (suite)


Exercice n 11:
Quels sont les noms des pilotes (avec leur matricule) qui assurent
un vol le vendredi 13 octobre 1995, sur un avion de capacit
suprieure 250 ?
b) l'aide de requtes imbriques
SELECT PILOTE.MATRICULE, PILOTE.NOM
FROM PILOTE
WHERE MATRICULE IN ( SELECT DEPART.MATRICULE
FROM DEPART
WHERE DATE_DEP ='13-10-95'
AND NUMAV IN (SELECT AVION.NUMAV
FROM AVION
WHERE CAPACITE > 250))
Cdric du Mouza NFA011

83

Exercices
Exercice n 12: Quelles sont les paires de pilotes (matricules)
habitant dans la mme ville ?
Exercice n 13: Quels sont les noms des pilotes (avec leur
matricule) qui conduisent l'avion de numro '666' ?
Exercice n 14: Quels sont les noms des pilotes (avec leur
matricule) qui habitent dans la ville o est entrepos l'avion '666' ?

Cdric du Mouza NFA011

84

Correction de l'exercice n 12
Exercice n 12: Quelles sont les paires de pilotes (matricules)
habitant dans la mme ville ?

Il s'agit d'une auto-jointure

SELECT P1.MATRICULE, P2.MATRICULE


FROM PILOTE P1, PILOTE P2
WHERE P1.VILLE = P2.VILLE
AND P1.MATRICULE > P2.MATRICULE

Cdric du Mouza NFA011

85

Correction de l'exercice n 13

Exercice n 13: Quels sont les noms des pilotes (avec leur
matricule) qui conduisent l' avion de numro '666' ?
SELECT DISTINCT PILOTE.MATRICULE, PILOTE.NOM
FROM PILOTE, DEPART
WHERE PILOTE.MATRICULE = DEPART. MATRICULE
AND DEPART.NUMAV = '666'

Cdric du Mouza NFA011

86

Correction de l'exercice n 14
Exercice n 14: Quels sont les noms des pilotes (avec leur
matricule) qui habitent dans la ville o est entrepos l'avion '666' ?
SELECT PILOTE.MATRICULE, PILOTE.NOM
FROM PILOTE, AVION
WHERE PILOTE.VILLE = AVION.ENTREPOT
AND AVION.NUMAV = '666'

Cdric du Mouza NFA011

87

Autres types de jointure

LEFT/RIGHT OUTER JOIN : retourne le rsultat de la jointure


plus tous les enregistrements de la table de gauche/droite
nayant pas joint (complts avec des valeurs NULL)

FULL OUTER JOIN : fonctionne comme si on faisait la fois une


LEFT et RIGHT OUTER JOIN

A INNER JOIN B ON : qui-jointure (notation explicite)

A NATURAL JOIN B : jointure naturelle

A CROSS JOIN B : produit cartsien (notation explicite)


Cdric du Mouza NFA011

88

Langage dinterrogation
Oprateurs ensemblistes

Cdric du Mouza NFA011

89

Lunion dans SQL


Quels sont les pilotes (matricule et nom) qui conduisent l'avion de numro '666' OU
qui habitent dans la ville ou est entrepos l'avion '666' ?
SELECT DISTINCT PILOTE.MATRICULE, PILOTE.NOM
FROM PILOTE, DEPART
WHERE PILOTE.MATRICULE = DEPART. MATRICULE
AND DEPART.NUMAV = '666'
UNION
SELECT PILOTE.MATRICULE, PILOTE.NOM
FROM PILOTE, AVION
WHERE PILOTE.VILLE = AVION.ENTREPOT
AND AVION.NUMAV = '666'

Cdric du Mouza NFA011

90

Lintersection dans SQL


Quels sont les pilotes (matricule et nom) qui conduisent l'avion de numro '666'
ET qui habitent dans la ville ou est entrepos l'avion '666' ?
SELECT DISTINCT PILOTE.MATRICULE, PILOTE.NOM
FROM PILOTE, DEPART
WHERE PILOTE.MATRICULE = DEPART. MATRICULE
AND DEPART.NUMAV = '666'
INTERSECT
SELECT PILOTE.MATRICULE, PILOTE.NOM
FROM PILOTE, AVION
WHERE PILOTE.VILLE = AVION.ENTREPOT
AND AVION.NUMAV = '666'

Cdric du Mouza NFA011

91

La diffrence dans SQL


Quels sont les pilotes (matricule et nom) qui conduisent l'avion de numro
'666' SAUF ceux qui habitent dans la ville ou est entrepos l'avion '666' ?
SELECT DISTINCT PILOTE.MATRICULE, PILOTE.NOM
FROM PILOTE, DEPART
WHERE PILOTE.MATRICULE = DEPART. MATRICULE
AND DEPART.NUMAV = '666'
MINUS
SELECT PILOTE.MATRICULE, PILOTE.NOM
FROM PILOTE, AVION
WHERE PILOTE.VILLE = AVION.ENTREPOT
AND AVION.NUMAV = '666'

Cdric du Mouza NFA011

92

Langage dinterrogation
La division

Cdric du Mouza NFA011

93

Expression de la division dans SQL


Quels sont les pilotes (leur matricule et leur nom) qui conduisent tous les avions?
<=> Quels sont les pilotes tels que, quel que soit l'avion, ils le conduisent ?
<=> Quels sont les pilotes tels que, quel que soit l'avion, il existe un dpart assur
par ce pilote sur cet avion ?
<=> Quels sont les pilotes tels qu'il n'existe pas d'avion tel qu'il n'existe pas de
dpart de ce pilote sur cet avion ?
SELECT MATRICULE
FROM PILOTE
WHERE NOT EXISTS( SELECT *
FROM AVION
WHERE NOT EXISTS ( SELECT *
FROM DEPART
WHERE DEPART.MATRICULE = PILOTE.MATRICULE
AND DEPART.NUMAV = AVION.NUMAV))

Cdric du Mouza NFA011

94

Exercices
Exercice n 15: Quels sont les passagers qui ont rserv sur
tous les vols ?
Exercice n 16: Quel est le nombre de pilotes qui conduisent
des avions en service
(i.e. dans la relation dpart)?

Cdric du Mouza NFA011

95

Correction de l'exercice n 15
Exercice n 15: Quels sont les passagers qui ont rserv sur
tous les vols ?
SELECT NUMAB
FROM PASSAGER P
WHERE NOT EXISTS ( SELECT *
FROM VOL V
WHERE NOT EXISTS (SELECT *
FROM RESERVATION R
WHERE R.NUMAB = P.NUMAB
AND R.Numvol = V.NUMVOL))

Cdric du Mouza NFA011

96

Correction de l'exercice n 16

Exercice n 16: Quel est le nombre de pilotes qui conduisent


des avions en service
(i.e. dans la relation dpart)?
SELECT COUNT (DISTINCT DEPART.MATRICULE)
FROM DEPART;

Cdric du Mouza NFA011

97

Langage dinterrogation
Groupement (GROUP BY)

Cdric du Mouza NFA011

98

GROUP BY
L'oprateur

"GROUP BY" partitionne la table

on construit les groupes en associant les tuples


partageant la mme valeur pour un ou plusieurs
attributs

On

effectue le SELECTFROMWHERE, puis on


partitionne le rsultat, puis on effectue les
fonctions dagrgation

Dans

le select on ne peut avoir que des fonctions


dagrgation ou des attributs du GROUP BY
Cdric du Mouza NFA011

99

GROUP BY
EXEMPLE: Quel

est le nombre de pilotes qui conduisent


des avions en service, par avion ?
SELECT NUMAV, COUNT (DISTINCT DEPART.MATRICULE)
FROM DEPART
GROUP BY NUMAV;

EXEMPLE: Quel

est lheure maximale des vols


commenant par la lettre A par trajet ?
SELECT MAX (Heure_dpart)
FROM VOL
WHERE Numvol LIKE A%
GROUP BY Ville_dpart, Ville_arrive
Cdric du Mouza NFA011

100

Exercice

Exercice n 17: Quelle est la capacit moyenne des avions, par


entrept et par type ?

Cdric du Mouza NFA011

101

Correction de l'exercice n 17

Exercice n 17: Quelle est la capacit moyenne des avions, par


entrept et par type ?
SELECT ENTREPOT, TYPE, AVG (CAPACITE)
FROM AVION
GROUP BY ENTREPOT,TYPE;

Cdric du Mouza NFA011

102

GROUP BY ... HAVING

L'oprateur HAVING permet d'introduire une qualification sur


les sous-tables issues du GROUP BY:
Le HAVING est au GROUP BY ce que le WHERE est au FROM.

EXEMPLE:
Quels sont les avions qui
assurent plus de 3
dparts ?

SELECT DEPART.NUMAV
FROM DEPART
GROUP BY NUMAV
HAVING COUNT (*) > 3;

Cdric du Mouza NFA011

103

Exercice
Exercice n 18: Quelles sont les villes o sont entreposs plus de
2 avions de type 'ICBM' ?

Cdric du Mouza NFA011

104

Correction de l'exercice n 18

Exercice n 18: Quelles sont les villes o sont entreposs plus de


2 avions de type ''ICBM' ?
SELECT DISTINCT ENTREPOT
FROM AVION
WHERE TYPE = 'ICBM'
GROUP BY ENTREPOT
HAVING COUNT (*) > 2;

Cdric du Mouza NFA011

105

CONCLUSION
SQL est un langage
d'interrogation trs lisible,
par tous les utilisateurs
SQL est un langage dans
lequel il est relativement
facile d'crire, pour un
programmeur, condition
de bien visualiser l'ordre d'
application
des
instructions:

Cdric du Mouza NFA011

(1)
(2)
(3)
(4)
(5)
(6)

106

From
Where
Group by
Having
Select
Order by

BIBLIOGRAPHIE
:
"L'art des bases de donnes",
tome 3: "Comprendre et valuer SQL"
Serge Miranda. Editions Eyrolles.

Cdric du Mouza NFA011

107

Exercices supplmentaires
S1 Quels sont les noms des pilotes (avec leur matricule) gs de
moins de 30 ans avec un salaire suprieur celui dun pilote
quelconque ayant plus que 40 ans?
S2 Quels sont les noms des pilotes (avec leur matricule) ayant
moins de 30 ans avec un salaire suprieur ceux de tous les
pilotes ayant plus de 40 ans?
S3 Proposer une requte capable de donner les tuples qui sont en
doublons par rapport aux deux colonnes de la table Pilote :
Nom et Ville
S4 Proposer une requte capable de supprimer les tuples qui sont
en doublons par rapport aux deux colonnes Nom, Ville de la
table Pilote en laissant un seul tuple par ensemble de doublons

Cdric du Mouza NFA011

108

Correction exercice S1
S1 Quels sont les noms des pilotes (avec leur matricule) ayant
moins de 30 ans avec un salaire suprieur celui dun
pilote quelconque ayant plus de 40 ans?
SELECT Matricule
FROM Pilote
WHERE Age < 30
AND Salaire >= ANY (

SELECT Salaire
FROM Pilote
WHERE Age > 40)

Cdric du Mouza NFA011

109

Correction exercice S2
S2 Quels sont les matricules des pilotes ayant moins de 30 ans
avec un salaire suprieur celui de tous les pilotes ayant
plus de 40 ans?
SELECT Matricule
FROM Pilote
WHERE Age < 30
AND Salaire >= ALL (

SELECT Salaire
FROM Pilote
WHERE Age > 40)

Cdric du Mouza NFA011

110

Correction exercice S3
S3 Proposer une requte capable de donner les tuples qui sont
en doublons par rapport aux deux colonnes de la table
Pilote : Nom et Ville
SELECT Nom, Ville
FROM Pilote
GROUP BY Nom, Ville
HAVING COUNT(*) > 1

Cdric du Mouza NFA011

111

Correction exercice S4
S4 Proposer une requte capable de supprimer les tuples qui
sont en doublons par rapport aux deux colonnes Nom, Ville de
la table Pilote tout en laissant un seul tuple par ensemble de
doublons
DELETE Pilote P1
WHERE EXISTS
(
SELECT *
FROM Pilote P2
WHERE P1.Ville = P2.Ville
AND P1.Nom = P2.Nom
AND P1.Matricule > P2.Matricule)
Cdric du Mouza NFA011

112

SQL comme Langage de Dfinition des Donnes

Cdric du Mouza NFA011

113

Types SQL
2

types dattributs numriques:


Numriques exacts (INTEGER, DECIMAL, )
Numriques flottants (FLOAT, DOUBLE, )
INTEGER stocke des entiers sur 4 octets (en
gnral) avec 2 variantes suivant la taille (SMALLINT
et BIGINT)
DECIMAL(M,D) (ou NUMERIC) est un numrique de
taille max. M, avec un nombre de dcimales fix D
Numriques exacts servent aux valeurs dont la
prcision est connue
Cdric du Mouza NFA011

114

Types SQL
Types

flottants:
Utilisation semblable celle des langages de
programmation
Sappuie sur la reprsentation des num. flottants
propre la machine
FLOAT correspond aux flottants en simple prcision
DOUBLE PRECISION (ou DOUBLE ou REAL) est un
flottant en double prcision

Cdric du Mouza NFA011

115

Types SQL
Type

Description

Taille

INTEGER

Entier relatif

4 octets

SMALLINT

Idem

2 octets

BIGINT

Idem

8 octets

FLOAT

Flottant simple prcision

4 octets

DOUBLE PRECISION
DOUBLE/REAL

Flottant double prcision

8 octets

NUMERIC(M,D)

Numrique avec D dcimales

M octets

DECIMAL

Numrique avec D dcimales

M octets

Cdric du Mouza NFA011

116

Types SQL
Chanes

de caractres:
CHAR(M) chane dexactement M caractres
(complte avec des blancs si besoin)
VARCHAR(M) chane de taille variable, au plus M
Pour des chanes trs longues, type BIT VARYING
(ou BLOB, ou LONG)
Dates
DATE stocke le jour, mois, anne (sur 4 chiffres)
TIME stocke heure, minute et seconde (HH:MM:SS)
DATETIME combine les 2 (AAAA-MM-JJ HH:MM:SS)
Cdric du Mouza NFA011

117

Types SQL
Type

Description

Taille

CHAR(M)

Chane de longueur fixe

M octets

VARCHAR(M)

Chane de longueur variable

m+1, mM

BIT VARYING(ou BLOB) Chane doctets

Longueur de la
chane

DATE

Date (jour, mois, anne)

4 octets

TIME

Heure (heure, minute,


seconde)

4 octets

DATETIME

Date et heure

8 octets

YEAR

Anne

2 octets

Cdric du Mouza NFA011

118

Types SQL

Exercice

1: Proposer les types associs aux


attributs de la table PILOTE. Quel serait alors la taille
dun enregistrement?

Exercice

2: Idem avec la table VOL

Cdric du Mouza NFA011

119

Cration de tables

On doit prciser le schma de la relation en entier: nom de la


relation, nom et type de chaque attribut. On peut ajouter des
contraintes.

Exemple:

CREATE TABLE AVION(Numav INTEGER,


Capacit SMALLINT,
Type VARCHAR(6),
Entrept VARCHAR(25));

Cdric du Mouza NFA011

120

Contraintes
Un

attribut peut tre forc tre renseign avec NOT


NULL
Cl primaire: il est important de donner une cl
primaire lors de la cration dune table, afin de
pouvoir dsigner de manire unique un nuplet dans
dautres tables
Se dclare aprs la dclaration des attributs laide
de PRIMARY KEY
Tous les attributs dune cl doivent tre dclars
comme NOT NULL

Cdric du Mouza NFA011

121

Contraintes

On

peut spcifier que la valeur dun attribut est


unique pour toute la colonne avec UNIQUE
Attention, la contrainte UNIQUE autorise que la
valeur ne soit pas renseigne (NULL)
On peut prciser les cls trangres laide de
FOREIGN KEY, et prciser la table (cl primaire)
rfrence par REFERENCES
On peut exprimer une condition sur un attribut
laide de CHECK
On peut aussi donner des valeurs par dfaut avec
DEFAULT
Cdric du Mouza NFA011

122

Contraintes - exemples
CREATE TABLE AVION(Numav INTEGER NOT NULL,
Capacit SMALLINT,
Type VARCHAR(6),
Entrept VARCHAR(25),
PRIMARY KEY(Numav),
CHECK capacit < 500,
CHECK Type IN (A380,B200,A330));
CREATE TABLE DEPART(Numvol INTEGER NOT NULL,
Date_dep DATE,
Numav INTEGER,
Matricule SMALLINT DEFAULT 1,
FOREIGN KEY(Numav) REFERENCES AVION,
Cdric du Mouza NFA011

123

Contraintes - exercices

Essayer

de crer la table vol avec ses contraintes

Complter

la cration de la table DEPART

Cdric du Mouza NFA011

124

Contraintes
On peut lors de la cration spcifier des rgles lies
aux cls trangres:
vnements surveills: suppression et mise--jour
Si le nuplet avec cl primaire supprim/modifi on
peut supprimer/modifier les nuplets avec cls
trangres correspondants: ON DELETE
CASCADE/ON UPDATE CASCADE
Lors dune suppression dun nuplet avec une cl
primaire on peut choisir de mettre la cl trangre
NULL dans les nuplets correspondants: ON DELETE
SET NULL
Cdric du Mouza NFA011

125

Insertions
On ralise une insertion laide de la commande
INSERT INTO VALUES
INSERT INTO AVION VALUES (14,300,A380,Nantes)
INSERT INTO AVION(Numav,Type) VALUES (18,A250)
Mais attention, lors dune insertion les contraintes (unicit, cl
primaire rfrence existante, les CHECK, non-nullit, etc)
doivent tre vrifies pour que linsertion ait lieu
Cdric du Mouza NFA011

126

Modification du schma

Ajouter dune colonne DateAchat AVION


ALTER TABLE AVION ADD DateAchat DATE;

Lors de lajout dune nouvelle colonne, ses valeurs sont mises


NULL ou si elle existe, une valeur par dfaut

Modifier la colonne Entrept (chane plus longue et non nulle)

ALTER TABLE AVION MODIFY Entrept VARCHAR(50) NOT NULL


Attention lors dune modification on peut avoir des rsultats
impossibles et/ou imprvisibles (varchar devenant integer, etc)
Cdric du Mouza NFA011

127

Modification du schma

Modifier la colonne en ajoutant une valeur par dfaut


ALTER TABLE AVION ALTER Type SET DEFAULT A380

Ajouter une contrainte CHECK


ALTER TABLE AVION ADD CONSTRAINT verifieCapacit
CHECK(Capacit < 600)

Supprimer une contrainte (nomme)


ALTER TABLE AVION DROP CONSTRAINT verifieCapacit
Cdric du Mouza NFA011

128

Modification du schma

Changer le nom dune colonne


ALTER TABLE AVION RENAME COLUMN Type TO Modle

Supprimer une colonne


ALTER TABLE AVION DROP COLUMN DateAchat

Crer un index
CREATE INDEX monIndex ON AVION(Capacit)

Cdric du Mouza NFA011

129

Crer une table partir de tables existantes


SELECT Numav, Type INTO LISTE_AVION FROM AVION
WHERE Entrept = Maubeuge
SELECT Numvol, Date_dep, Ville_arrive
INTO LISTE_VOL_DE_PARIS
FROM VOL, DEPART
WHERE VOL.Numvol = DEPART.Numvol
AND Ville_dpart = Paris

Cdric du Mouza NFA011

130

Exercices
Crer une table avec les numros de ville de dpart, ville
darrive, nom et ge des pilotes gagnant plus de 4000 euros.
Ajouter les contraintes suivantes: une cl primaire sur le nom,
un test pour interdire les pilotes ayant plus de 55 ans
Renommer la colonne nom en nom de famille
Ajouter une colonne anciennet et crer un index sur celle-ci
Supprimer lindex sur anciennet
Supprimer la colonne anciennet
Supprimer la contrainte sur lge
Supprimer la colonne anciennet

Cdric du Mouza NFA011

131