Escolar Documentos
Profissional Documentos
Cultura Documentos
Les Tables
Les relations (dun schma relationnel ) sont stockes sous
forme de tables composes de lignes et de colonnes.
nomd
ieu
10
Recherche
Rennes
20
vente
Metz
30
direction
Gif
40
fabrication
Reims
6
Types de donnes :
- caractres : char, varchar,
- valeurs numrique NUMBER : NUMBER(taille_maxi) ,
- date/ heure : DATE
Instructions SQL
Interrogation de donnes :
SELECT :
Extraction de donnes
Interrogation de donnes
Interrogation de donnes
10
Interrogation de donnes
Forme complte de la commande SELECT
- linstruction SELECT doit inclure :
*) une clause SELECT qui dtermine les colonnes afficher
*) une clause FROM : dtermine la table contenant les colonnes
rpertories dans la clause SELECT
SELECT [DISTINCT] {*| column [alias] | expression1 [as alias] }
FROM table1
[WHERE condition (s) ]
[GROUP BY expression]
[HAVING condition]
[ORDER BY {column, expr, alias} [ASC|DESC]]
[{UNION|INTERSECT|MINUS} (sous requte)] ;
Notes :
| : choix entre diffrentes options
{} : choix obligatoire
[] : facultatif
11
Exemple dinterrogation
Exemple dinterrogation simple : extraction de certains
colonnes (projection)
>> Soit la relation : depatement(dept, nom, lieu)
numdept
nomd
ieu
10
Recherche
Rennes
20
vente
Metz
30
direction
Gif
40
fabrication
Reims
Nomd
Direction
Recherche
Fabrication
Vente
lieu
Gif
Rennes
Reims
Metz
12
Interrogation de donnes
Le nom complet d'une colonne d'une table est le nom de la table suivi d'un
point et du nom de la colonne.
Par exemple : employe.nom
SELECT departement.nomd, departement.lieu FROM departement;
=
SELECT nomd, lieu FROM departement;
Utilisation de * :
*) pas de projection
*) slection de toute la table
Nom de la table
numdept
nomd
lieu
10
Recherche
Rennes
20
vente
Metz
30
direction
Gif
40
fabrication
Reims
Le contenu de toute la
table
14
Alias
utilisation dalias :
15
alias colonne :
SELECT [DISTINCT] *
ou
SELECT [DISTINCT] exp1 [[AS] nom1 ], exp2 [[AS] nom2 ], .....
- exp1, exp2, ... sont des expressions,
- nom1, nom2, ... sont des alias : des noms facultatifs de 30 caractres
maximum, donns aux expressions. Chacun de ces noms est
insr derrire l'expression, spar de cette dernire par un blanc ou par le
mot cl AS (optionnel) ; il constituera le titre de la colonne dans l'affichage
du rsultat de la slection
16
17
18
19
Duplicatas
Duplicatas :
la directive DESTINCT limine les ventuelle duplicatas
20
Duplicatas
Table Pilote
brevet
PL-1
PL-2
PL-3
PL-4
PL-5
PL-6
nom
nbrHvol prime
embauche typeAvion compa
Gratien
05/02/196
Viel
450
500
5A320
AF
Didier
13/05/196
Donsez
0
5A320
AF
Richard
11/09/200
Grin
1000
1A320
SING
Placide
21/09/200
Fresnais
2450
500
1
1330SING
Daniel
16/01/196
Vielle
400
600
5A340
AF
Franoise
24/12/200
Tort
0
0A340
CAST
Avec
duplicatas
Sans
duplicatas
21
Expressions arithmtiques
Des
description
priorit
multiplication
division
addition
soustraction
1
1
2
2
23
Exemple :
- les noms des employs dont la premire lettre est c :
SELECT nom FROM employe where nom LIKE c%;
- les noms des employs qui contiennent la chane de caractre at :
SELECT nom FROM employe WHERE nom LIKE %at%;
25
Exemple :
soit la relation
Emp(empno,Ename job,embauche,sal,comm,#deptno)
- afficher le nom de tous les employs dont la deuxime lettre du
nom est un a et qui ont t embauchs en 1987
- afficher le nom et date dembauche de tous les employs
qui ont t embauch depuis 2000.
26
Exemple :
WHERE dep !=75;
WHERE job NOT LIKE C%;
WHERE commission IS NOT NULL
WHERE ville IS NOT IN ('Nice ', 'Paris');
logiques : AND et OR
Peuvent tre utiliss pour combiner plusieurs prdicats
L'oprateur AND est prioritaire par rapport l'oprateur OR
L'oprateur NOT plac devant un prdicat en inverse le sens.
SELECT WHERE condition1 AND/OR condition2
Exemple :
- Slectionner les employs du dpartement 30 ayant un salaire suprieur
1500 :
SELECT nom FROM emp WHERE dep=30 AND Sal >1500;
30
30
- Exemple :
Soit la relation :
Emp(empno,Ename job,embauche,sal,comm,#deptno,tel)
Donnez la liste de employs dont le numro de tlphone
nest pas renseigns :
== > SELECT nom
FROM emp
WHERE tel IS NULL ;
Ordonnancement : ORDER BY
Expression gnrale :
SELECT col1, col2, fonction1Groupe,
FROM table (s)
[WHERE condition (s) ]
[GROUP BY cole1[,col2, ]
[HAVING condition]
[ORDER BY {column | position| alias} [ASC|DESC]]
[{UNION|INTERSECT|MINUS} (sous requte)] ;
32
Ordonnancement : ORDER BY
Exemple : Donner pour chaque fonction la liste des noms des employs
SELECT ename, job
FROM emp
ORDER BY job
== > trie selon la fonction
Ename
job
BARA
BALIN
LAMBERT
DUPONT
DUPOND
LEFEBVRE
PAQUEL
MARTIN
LEBRETON
administratif
administratif
administratif
administratif
commercial
commercial
commercial
commercial
commercial
33
Ordonnancement : ORDER BY
34
Ordonnancement : ORDER BY
Exemple : Donner pour chaque fonction la liste des noms des employs ainsi
que leurs salaire tri dans lordre dcroissant
job
administratif
administratif
administratif
administratif
commercial
commercial
commercial
commercial
commercial
sal
15000
13500
12000
9000
25000
23500
22000
20000
15000
35
Ordonnancement : ORDER BY
36
Ordonnancement : ORDER BY
37
Ordonnancement : ORDER BY
Exercice :
Donnez pour chaque dpartement (deptno) la liste des noms
des employs ainsi que leurs salaire tri dans lordre dcroissant
Rappel :
Emp(empno,Ename, job,embauche,sal,comm,#deptno)
38
Ordonnancement : ORDER BY
39
Fonctions de groupes
40
Fonctions de groupes
-Fonctions de groupe : Les fonctions de groupe permettent
de faire des calculs sur lensemble des valeurs dune colonne
Exemple :
SELECT SUM(sal)
FROM employe
WHERE dep = 10
Renvoie le total
des salaires du
dpartement 10
Renvoie le nom, la
fonction et le salaire
de lemploy (ou des
employs) ayant le
salaire le plus lev
Cas des valeurs NULL : non prises en compte, exceptes par COUNT(*)
41
Fonctions de groupes
Exercice : soit la table Pilote ci-dessous
Table Pilote
brevet
PL-1
PL-2
PL-3
PL-4
PL-5
PL-6
nom
Gratien Viel
Didier Donsez
Richard Grin
Placide Fresnais
Daniel Vielle
Franoise Tort
500
500
600
0
05/02/1965
13/05/1965
11/09/2001
21/09/2001
16/01/1965
24/12/2000
typeAvion
A320
A320
A320
1330
A340
A340
compa
AF
AF
SING
SING
AF
CAST
Fonctions de groupes
Solution :
43
embauche
05/02/1965
13/05/1965
16/01/1965
24/12/2000
11/09/2001
21/09/2001
typeAvion
A320
A320
A340
A340
A320
1330
compa
AF
AF
AF
CAST
SING
SING
Clause GROUP BY :
- constituer des groupements de lignes
- liste les colonne du groupement
== > Un SELECT de groupe (avec GROUP BY) ne donnera quune
ligne par groupe
liste les colonnes du select doivent apparaitre
dans el groupe by
Expression gnrale :
SELECT col1 [,col2, ], fonction1Groupe,
FROM table (s)
Permet dexclure des lignes
pour chaque groupement ou
[WHERE condition ]
de rejeter des groupements
entiers. Elle saplpique la
[GROUP BY cole1[,col2, ]
totalit de la table
[HAVING condition]
liste les colonnes du groupement.
;
!! Pas de fct de groupe
SUM(sal) numdept
------------- -------------163500
10 Un SELECT de
162500
20 groupe (avec GROUP BY)
114000
30 ne donnera quune ligne par
groupe
!!
46
compa typeAvion
AF
A320
AF
A340
CAST
A340
SING
A320
SING
A330
COUNT(brevet)
2
1
1
1
1
FROM Pilote
47
GROUP BY : Exemple
Exemple : le nombre demploys par dpartement et par fonction
(job).
SELECT deptno, job, COUNT(*) FROM emp
GROUP BY deptno, job
Trie alatoire
48
GROUP BY : Exemple
Exemple : le nombre demploys par dpartement et par fonction
(job).
SELECT deptno, job, COUNT(*) FROM emp
GROUP BY deptno, job ORDER BY deptno;
Trie du rsultat :
49
Exemple : Liste des salaires moyens par fonction (job) ayant plus de deux
employs.
SELECT fonction,COUNT(*), AVG(sal)
FROM employe
GROUP BY fonction
HAVING COUNT(*) >= 2;
50
- soit la relation :
Pilote(brevet,nom,nbHvol,typeavion,compa)
Ecrire les requtes rpondant aux questions suivantes :
1- Moyenne des heures de vol et des primes par compagnie
2- Nombre de pilote par compagnie
3- Nombre dheures de vol le plus lev, date dembauche la plus rcente par
compagnie
4- somme des heures de vol des pilotes volant sur A320 par compagnie
5- Nombre de pilotes qualifi (nombre de brevet) par compagnie et par type
dappareil
6- le nombre de pilotes par compagnie ayant plus dun pilote
51
52
4- somme des heures de vol des pilotes volant sur A320 par compagnie:
SELECT compa, SUM(nbHvol) Frome Pilote
WHERE typAvion=A320
GROUP By compa;
Compa SUM(NBHVOL)
-------------------------------------------------------------AF
450
SING
1000
--------------------------------------------------------------53
54
Jointure
55
Jointure
Exemple de jointure :
- La cl secondaire de la table emp correspond la cl primaire de dep
Table emp
num
16712
17574
26691
25012
nom
MARTIN
DUPONT
DUPOND
LAMBERT
fonction
num_sup embauche
directeur
25717
23-MAY-90
administratif
16712
03-MAY-95
commercial
27047 04-APR-88
administratif
27047 14-APR-91
sal
40000
9000
25000
12000
comm
2500
numdept
30
30
20
20
Table dept
Exemple : liste des employs et de leur
lieux de travail
Jointure entre tables
emp et dept
numdept
Nomd
lieu
10
Recherche
Rennes
20
vente
Metz
30
direction
Gif
40
fabrication
Reims
56
Jointure
Equi-Jointure
Nom
lieu
--------MARTIN Gif
DUPONT Gif
DUPOND Metz
LAMBERT Metz
Pas daffichage de
Reims
Jointure
Auto-jointure : cas particulier de lquijointure
Relie une table elle-mme
Pourquoi ? : pour rassembler des informations venant de 2 lignes
diffrentes dune mme table
Exemple : noms des employs et noms de leurs managers
SELECT emp.nom, mgr.nom
FROM emp,
emp mgr
58
Jointure
Jointure externe :
On rappel les deux tables
Table dept
numdept
nomd
ieu
10
Recherche
Rennes
20
vente
Metz
30
direction
Gif
40
fabrication
Reims
Table emp
59
Jointure
Jointure externe :
permettent dextraire des enregistrements qui ne rpondent pas aux critres
de jointure
le lieu de travail des employs :
SELECT emp.nom, lieu
FROM emp, dept
WHERE emp.numdept =
dept.numdept ;
Jointure
Jointure externe :
Il sagit de prendre en compte les lignes dune table nayant pas eu de
correspondance dans les autres tables.
Par dfaut ces lignes sont limins de la jointure.
Avec une jointure externe elles seront ajoutes au rsultat :
BARA
Gif
MARTIN Gif
DUPONT Gif
DUPOND Metz
.
BARA
Gif
Reims
61
Jointure
Exercice :
Soient les deux relation :
Pilote(brevet,nom,nbHvol,typeavion,#compa)
Compagnie(comp,adresse, nomComp)
Qualifs(brevet,typeAvion,validit)
1- Liste des pilotes et les noms de leurs compagnies mme les compagnies
nayant pas de pilote
2-Liste des pilotes et le numro de leurs brevet mme les pilotes nayant pas
encore leurs qualification
62
Jointure
inqui-jointure :
Les requtes dinqui-jointure font intervenir tout type doprateur
(<>,>,<,>=,<=,BETWEEN,LIKE,IN). A l'inverse de lqui-jointure, la clause dune
quijointure nest pas base sur lgalit des cls primaires et les cls
trangres
Exemple 1 :
Soit : Pilote(brevet,nom,nbHvol,typeavion,#compa)
- les noms et numros des brevets des pilotes ayant plus dexprience (celui qui a
comptabilis plus dheur de vol) que le pilote de numro de brevet PL-2 :
SELECT p1.nom,p1.brevet FROM Pilote p1, Pilote p2
WHERE p1.nbHvol>p2.nbHvol AND p2.brevet=PL-2;
Exemple 2 :
63
Oprateurs ensemblistes
But : combiner dans un rsultat unique des lignes venant
dinterrogations diffrentes
Oprateurs ensemblistes possibles :
Union (UNION et UNION ALL), Intersection (INTERSECT) et
diffrence relationnelle (MINUS)
Syntaxe :
SELECT FROM nomTable [WHERE ]
{UNION | INTERSECT | MINUS}
SELECT FROM nomTable [WHERE ]
! Aprs projection et avant combinaison, les lignes doivent
avoir rigoureusement le mme nombre de colonnes avec des
types identiques
64
Oprateurs ensemblistes
Exemple :
Soit la relation :
Avion(immatruculation,typeAvion,compa,PrixAchat)
- Les types davions communs que les deux compagnies AF et SING utilisent
Table Avion
immatriculat
ion
F-WTS
F-GTMP
F-GTMP
A-TNP
F-WXF
F-ITR
F-LAV
F-BIO
F-INR
typeAvion
A320
A320
A320
1330
A340
A340
Concord
A340
A330
compa
AF
AF
SING
SING
AF
CAST
AF
SING
SING
PrixAchat
104500
104500
198000
204500
120000
104500
15600
198000
204500
65
Oprateurs ensemblistes
Tous les types davions que les deux compagnies AF et SING exploietent
SELECT typeAvion From avion where compa =AF
UNION
SELECT typeAvion From avion where compa =SING
== > typeAvion
-------------A320
A340
A330
concorde
1330
PS : on peut mettre UNION ALL = > on aura des doublons
66
sous-interrogations
Un critre de recherche employ dans une clause WHERE
peut tre lui-mme le rsultat dun SELECT
Exemple 1: sous-interrogation simple ramenant une seule valeur
SELECT nom
FROM emp
WHERE fonction=(SELECT job
FROM emp
WHERE nom =toto);
Renvoi le nom de
salaris ayant mme
job que toto
Exemple 2:
SELECT nom
FROM emp
WHERE (fonction, numdep)=(SELECT fonction, numdep FROM emp WHERE
nom=toto);
67
Loprateur EXISTS
enregistrement
68
Loprateur EXISTS
Soit la relation :
Emp(empno,Ename job,embauche,sal,comm,#deptno,tel)
Dept(deptno,nomD)
Sous-requte corrle
== > sous-requte est
excut pour chaque
tuple de la table Dept
69
70
Soit la relation :
Emp(empno,Ename job,embauche,sal,comm,#deptno,tel)
Dept(deptno,nomD)
viter si
possible
71
73
Contraintes :
Objectif : programmer des rgles de gestion au niveau des colonnes des tables
allger les programme client
Syntaxe :
CONSTRAINT nom_de_la_contrainte
- PRIMARY KEY(colonne)
- FOREIGN KEY (colonne) REFERENCES TABLE(colonne)
- CHECK (condition)
- UNIQUE (colonne) => pas de valeurs distinct
Ajout de contrainte :
ALTER TABLE <nomTable> ADD CONSTRAINT nom_contrainte
typeContrainte;
Suppression de contrainte (Oracle) :
ALTER TABLE <nomTAble> DROP CONSTRAINT nomContrainte [CASCADE];
75
nom
nbrHvol
prime
embauche
typeAvion
compa
compagnie
ville
nomcompa
76
Syntaxe :
DROP TABLE <nomTable>;
Syntaxe :
ALTER TABLE <nomTable> RENAME To <newname>
78
79
80
81
82
Exemple:
UPDATE Employee SET salary = salary * 1.25 WHERE name =
'Bob'
83
PS : Il nest pas possible de tronquer une table qui est rfrencie par des cls
trangres actives.
85