SQL
SQL pour communiquer avec un SGBDR
SQL : Structured Query Language
Permet de communiquer avec un SGBDR
Prsente les avantages suivant :
- langage efficace pour la communication avec une SGDBR
- facile apprendre et utiliser
- dispose de fonctionnalits compltes : dfinir, extraire et
manipuler les donnes des tables
Objets manipuls par SQL
Les identificateurs
SQL utilise des identificateurs pour dsigner les objets qu'il
manipule : utilisateurs, tables, colonnes,
Un identificateur est un mot form d'au plus 30 caractres,
commenant obligatoirement par une lettre de l'alphabet. Les
caractres suivants peuvent tre une lettre, un chiffre, ou l'un
des symboles # $ et _
SQL ne fait pas la diffrence entre les lettres minuscules et
majuscules (sauf aprs la condition where attribut=valeur ,
voir TP)
Les voyelles accentues ne sont pas acceptes.
Objets manipuls par SQL
Les identificateurs
Un identificateur ne doit pas figurer dans la liste des mot cls
rservs
Quelques mot-cl rservs :
DATE, TABLE, INDEX
DECIMAL, DEFINITION, FILE, FORMAT, INDEX, LIST, MODE,
OPTION, PARTITION, PRIVILEGES, PUBLIC, REF,
REFERENCES, SELECT, SEQUENCE, SESSION, SET, TABLE,
TYPE.
Objets manipuls par SQL
Les Tables
Les relations (dun schma relationnel ) sont stockes sous
forme de tables composes de lignes et de colonnes.
Objets manipuls par SQL
Les Tables
Il est d'usage (mais non obligatoire ) de mettre les noms
de table au singulier : plutt employe que employes pour une
table d'employs.
Exemple : Table deptement des dpartements
deptement
numdept
nomd
ieu
10
Recherche
Rennes
20
vente
Metz
30
direction
Gif
40
fabrication
Reims
6
Objets manipuls par SQL
Les colonnes
Les donnes contenues dans une colonne doivent tre
toutes d'un mme type de donnes. Ce type est indiqu au
moment de la cration de la table qui contient la colonne
Types de donnes :
- caractres : char, varchar,
- valeurs numrique NUMBER : NUMBER(taille_maxi) ,
- date/ heure : DATE
Instructions SQL
Interrogation de donnes :
SELECT :
Extraction de donnes
Langage de manipulation de (LMD) :
INSERT : insertion
UPDATE : mise jour
DELET : suppression de lignes
Langage de dfinition de donnes (LDD) :
CREATE : cration d'un objet (table, )
ALTER : modification d'un objet
DROP : supprimer un objet
RENAME : : renommer un objet
8
Interrogation de donnes
Interrogation de donnes
Toute interrogation se fait par la commande SELECT
Commande dclarative : dcrit ce que lon cherche sans
dcrire le moyen de le raliser
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
Nom de la colonnes de la projection
select nomd, lieu from departement
Nom de la table
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 : [Link]
SELECT [Link], [Link] FROM departement;
=
SELECT nomd, lieu FROM departement;
Le nom de la table peut tre omis quand il n'y a pas d'ambigut. Il
doit tre prcis s'il y a une ambigut, ce qui peut arriver quand on fait une
slection sur plusieurs tables la fois et que celles-ci contiennent des colonnes
qui ont le mme nom
SELECT [Link], [Link] FROM table1,table2;
13
Extraction de toutes les colonnes
Utilisation de * :
*) pas de projection
*) slection de toute la table
SELECT * FROM Departement ;
Toutes les colonnes
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 :
permet de renommer des colonnes laffichage ou des tables dans la
requte
== > alias colonne et alias table
15
Alias dune colonne (1)
alias colonne :
SELECT permet d'indiquer quelles colonnes, ou quelles expressions
doivent tre retournes par l'interrogation
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
Alias dune colonne (2)
Exemple alias colonne :
Soit la relation : employe(nom,num,fonction,n_sup,embauche,salaire,comm,dept)
salaire mensuelle de chaque salari :
SELECT nom AS nomPersonne, sal*12 AS Salaire_Annuel FROM employe
17
Alias dune colonne (3)
alias colonne :
Remarque : Si le nom contient des sparateurs (espace, caractre
spcial), ou s'il est identique un mot rserv SQL (exemple :
DATE), il doit tre mis entre guillemets
Exemple :
SELECT nom, sal*12 AS Salaire Annuel FROM employe ;
18
Alias des tables
alias Table : si on dfinit lalias dune table , Il faut prfixer
les colonnes par lalias de la table
Exemple:
SELECT [Link] FROM employe emp;
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
SELECT compa FROM Pilote
Compa
----------AF
AF
SING
SING
AF
CAST
Avec
duplicatas
SELECT DISTINCT compa FROM Pilote
Compa
----------AF
SING
AF
CAST
Sans
duplicatas
21
Expressions arithmtiques
Des
expressions sur des donnes de type NUMBER et DATE
Oprateur
*
/
+
-
description
priorit
multiplication
division
addition
soustraction
1
1
2
2
Les oprateurs prsentant la mme priorit sont valus de gauche
droite
Les parenthses sont utilises pour forcer des priorits et pour amliorer la
clart
Exercice : Simuler une augmentation de 10% des salaires des employs
(utiliser la table emp)
== > SELECT
sal * 1.10 augmentation FROM pilote;
22
Restriction : Instruction WHERE
WHERE prdicat :
SELECT FROM <nom de table>
WHERE <predicat> ;
Exemple : donnez la liste des employs dont le salaire est > 40000
Table emp
== > SELECT nom FROM emp
WHERE sal >40000
Jaubert
Cdd
Lamer
23
Restriction : Instruction WHERE
Instruction WHERE : prdicats
- Un prdicat simple est la comparaison de deux expressions ou plus au
moyen d'un oprateur :
WHERE exp1 = exp2
WHERE exp1 != exp2
WHERE exp1 < exp2
WHERE exp1 > exp2
WHERE exp1 <= exp2
WHERE exp1 >= exp2
WHERE exp1 BETWEEN exp2 AND exp3
WHERE exp1 LIKE exp2
WHERE exp1 NOT LIKE exp2
WHERE exp1 IN (exp2, exp3,...)
WHERE exp1 NOT IN (exp2, exp3,...)
WHERE exp IS NULL
WHERE exp IS NOT NULL
24
Restriction : Instruction WHERE
Oprateur LIKE : exp1 LIKE exp2
teste l'galit de deux chanes en tenant compte des caractres jokers
dans la 2me chane :
_ remplace 1 caractre exactement
% remplace une chane de caractres de longueur quelconque
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
Restriction : Instruction WHERE
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
Restriction : Instruction WHERE
IN : est l'oprateur qui permet de tester l'appartenance de la
valeur d'une colonne une liste
Exemples :
Liste des vols dont la ville d'arrive est Nice ou Paris.
SELECT numvol
FROM vol
WHERE va IN ('Nice ', 'Paris');
BETWEEN : est l'oprateur qui permet de tester si une
valeur appartient n intervalle (les bornes sont
incluses)
SELECT WHERE exp1 BETWEEN exp2 AND exp3
Exemple : Salaire et nom des employs gagnant entre 15000 et 18000
27
Restriction : Instruction WHERE
Oprateur SQL de ngation
Dans certain cas il est plus simple de rechercher les lignes qui
ne satisfont pas une condition ==> utilisation les oprateurs
SQL avec une expression de ngation
Exemple :
WHERE dep !=75;
WHERE job NOT LIKE C%;
WHERE commission IS NOT NULL
WHERE ville IS NOT IN ('Nice ', 'Paris');
IS NULL et IS NOT NULL sont les oprateurs qui permettent de tester
si une valeur a t dfinie ou pas pour une colonne.
NULL = non dfini
28
Restriction : Instruction WHERE
Oprateurs
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;
- Noms des directeur et des administratif du dpartementr 30
SELECT nom, num, fonction, n_dept FROM emp
WHERE (fonction = directeur OR fonction =administratif)
AND n_dept = 30 ;
- Priort : AND > OR
plus de claret
utiliser les paranthses pour forcer la priorit et pour
29
Restriction : Instruction WHERE
Dfinir une valeur NULL
- Une valeur NULL est une valeur non disponible, non attribue
- Une valeur NULL est diffrente dun zro ou dun espace
- la valeur dune ligne est absente pour une colonne donne, cette valeur
est considr comme NULL
- Les colonnes, quel que soit leur type de donnes peuvent contenir des
valeur NULL, except lorsque la colonne a t dfinie comme NOT NULL
ou comme PRIAMARY KEY lors de sa cration
- Attention :
NULL 0
expr = NULL : toujours FAUX !
Tester avec : IS NULL et IS NOT NULL
30
30
Restriction : Instruction WHERE
Dfinir une valeur NULL
- 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 ;
Exercice : afficher la liste des employs qui nont pas de
commission
31
Ordonnancement : ORDER BY
Clause ORDER BY : Classement des rsultats dun SELECT
Prcise l'ordre dans lequel la liste des lignes slectionnes sera donne.
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
on peut lui associer :
- ASC : ordre croissant (par dfaut)
- DESC : ordre dcroissant
34
Ordonnancement : ORDER BY
Exemple : Donner pour chaque fonction la liste des noms des employs ainsi
que leurs salaire tri dans lordre dcroissant
SELECT ename, job, sal
FROM emp
ORDER BY job, sal DESC
Ename
BARA
BALIN
LAMBERT
DUPONT
DUPOND
LEFEBVRE
PAQUEL
MARTIN
LEBRETON
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
Possibilit de faire le trie en fonction de la position : utile
lors dun tri en fonction dune expression longue
SELECT nom, date_emb, 12*sal FROM emp ORDER BY 3;
== > trie les rsultats en fonction du troisime lment de linstruction
SELECT
39
Fonctions de groupes
Les fonctions de groupes peuvent apparatre dans le Select
ou le Having. Ci-dessous quelques fonctions usuelles:
AVG moyenne
SUM somme
MIN plus petite des valeurs
MAX plus grande des valeurs
VARIANCE variance
STDDEV cart type (dviation standard)
COUNT(*) nombre de lignes
COUNT(col ) nombre de valeurs non nulles de la colonne
COUNT(DISTINCT col ) nombre de valeurs non nulles diffrentes
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
SELECT nom, fonction, salaire
FROM employe
WHERE salaire = (SELECT
MAX(salaire) FROM emp) ;
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
nbrHvol prime embauche
450
0
1000
2450
400
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
Ecrire les requtes qui permettent de donner :
1- Moyenne des heures de vol et des primes des pilotes de la compagnie AF
2-Nombre de pilotes, nombre total dheures effectues par tous les pilotes, nombre de
primes (toutes et distinctes)
3- le nombre dheures de vol le plus lev, le nombre dheure de vol le moins lev
4- date dembauche la plus rcente, date dembauche la plus ancienne, la prime la
plus faible, la prime la plus leve, la moyenne des primes,
5 - le salaire le plus bas, le salaire le plus haut, le salaire moyenne
42
Fonctions de groupes
Solution :
1- Moyenne des heures de vol et des primes des pilote de la compagnie AF :
SELECT AVG(nbHVol),AVG(prime) FROM pilote WHERE compa=AF;
43
Regroupement : GROUP BY HAVING
Table Pilote
brevet
nom
nbrHvol prime embauche typeAvion
compa
450
500 05/02/1965
A320
AF
Exemple : PL-1 Gratien Viel
PL-2 Didier Donsez
0
13/05/1965
A320
AF
PL-3
Richard Grin
1000
11/09/2001
A320
SING
PL-4 Placide Fresnais 2450
500 21/09/2001
1330
SING
PL-5
Daniel Vielle
400 600 16/01/1965A340
AF
PL-6
Franoise Tort
0 24/12/2000A340
CAST
En regroupant sur la colonne compa, trois ensemble de lignes (groupement)
sont composs
possibilit dappliquer des fonctions de groupe chacun
de ces ensembles
brevet
nom
nbrHvol prime
PL-1
Gratien Viel
450
500
PL-2 Didier Donsez
0
PL-5
Daniel Vielle
400
600
PL-6 Franoise Tort
0
PL-3
Richard Grin
1000
PL-4 Placide Fresnais 2450
500
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
Possibilit de grouper sur plusieurs colonnes : exemple compa et typeAvion
pour classifier les pilotes selon ces deux critres
44
Regroupement : GROUP BY HAVING
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
Permet de poser des conditions sur chaque
groupement
45
Regroupement : GROUP BY HAVING
Sappliquent au groupe par groupe
SELECT SUM(sal) , numdept
FROM employe
GROUP BY numdept ;
SUM(sal) numdept
------------- -------------163500
10 Un SELECT de
162500
20 groupe (avec GROUP BY)
114000
30 ne donnera quune ligne par
groupe
Liste les colonnes du groupement
Que des fonctions de groupe ou des
expressions du GROUP BY
!!
Les colonnes prsentant dans le SELECT doivent apparaitre dans Group
By . Seules des fonctions ou expressions peuvent exister en plus dans le
SELECT
46
Regroupement : GROUP BY HAVING
- Utilisation de la clause GROUP BY expr1, expr2, :
Parmi les lignes ayant mme valeur pour expr1, on regroupe celle ayant
mme valeur pour expr2,
Exemple :
soit la relation Pilot(brevet,nom,nbrHvol,prime,embauche,typeAvion,compa)
Donner le nombre de pilote par compagnie et par type dappareil
== > SELECT compa, typeAvion,COUNT(brevet)
GROUP BY compa, typeAvion;
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
Regroupement : GROUP BY HAVING
- Utilisationn de HAVING:
- HAVING joue le rle de filtre pour la clause GROUP BY, mais ne porte
que sur des caractristiques de groupe :
*) fonction de groupe
*) expressions prsentes dans le GROUP BY
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
Regroupement : GROUP BY HAVING
- 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
Regroupement : GROUP BY HAVING
-Solution :
1- Moyenne des heures de vol et des primes pour chaque compagnie :
SELECT compa, AVG(nbHvol), AVG(prime) FROM Pilote
GROUP By compa;
Compa AVG(nbHvol) AVG(prime)
-----------------------------------------------------AF
283,33
550
CAST
0
SING
1725
500
--------------------------------------------------------
2- Nombre de pilote par compagnie :
SELECT compa, count(*) From Pilote
GROUP By compa;
Compa COUNT(*)
------------------------------------AF
3
CAST
1
SING
2
--------------------------------------------------------
52
Regroupement : GROUP BY HAVING
3- Nombre dheures de vol le plus lev, date dembauche la plus rcente par
compagnie:
SELECT compa, MAX(nbHvol), MAX(embauche) as embauche recent
FROM Pilote
GROUP By compa;
Compa MAX(nbHvol)
date embauche recente
-----------------------------------------------------------------------AF
450
13/O5/95
CAST
24/12/00
SING
2450
21/09/01
--------------------------------------------------------
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
Regroupement : GROUP BY HAVING
5- Nombre de pilotes qualifi (nombre de brevet) par compagnie et par type
dappareil :
SELECT compa, typAvion, count(brevet) FROM Pilote
GROUP By compa, typeAvion;
Compa typeAvion count(brevet)
-----------------------------------------------------AF
A320
2
AF
A340
1
CAST
A340
1
SING
A320
1
SING
A330
1
--------------------------------------------------------
6- le nombre de pilotes par compagnie ayant plus dun pilote:
SELECT compa, count(brevet) Frome Pilote
GROUP By compa
HAVING count(brevet)>=2;
Compa COUNT(brevet)
------------------------------------AF
3
SING
2
--------------------------------------------------------
54
Jointure
Les jointures permettent dextraire les donnes issues de plusieurs tables
== > met en relation deux tables sur la base dune condition de jointure
(comparaison de colonne)
Tout simplement en spcifiant plusieurs tables aprs le FROM
- Une condition de jointure exprime une relation existant entre les donnes
dune colonne dune table et de celle dune autre colonne dune autre table
== > gnralement fait intervenir une cl trangre dune table avec une
cl primaire dune autre table
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
SELECT [Link], lieu
FROM emp, dept
WHERE [Link] = [Link] ;
numdept
Nomd
lieu
10
Recherche
Rennes
20
vente
Metz
30
direction
Gif
40
fabrication
Reims
56
Jointure
Equi-Jointure
entre deux tables : jointure avec condition dgalit
SELECT nom, lieu
FROM emp, dept
WHERE [Link] = [Link] ;
num_dept est un nom de colonne
commun aux deux tables : il faut prfixer par
le nom de la table
Nom
lieu
--------MARTIN Gif
DUPONT Gif
DUPOND Metz
LAMBERT Metz
Pas daffichage de
Reims
Equi-Jointure utilise loprateur dgalit dans la clause de jointure
et compare gnralement des cls primaire avec des cls
trangres
57
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 [Link], [Link]
FROM emp,
emp mgr
WHERE emp.num_sup = [Link]
Besoin de renommer la table pour indiquer
de quelle ligne vient la colonne cite
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 [Link], lieu
FROM emp, dept
WHERE [Link] =
[Link] ;
Sans jointure externe le site de Reims
ne figure pas dans la rponse (car
aucun employ ny travaille!)
BARA
Gif
MARTIN Gif
DUPONT Gif
DUPOND Metz
.
BARA
Gif
Avec la jointure externe il sera ajout :
BARA
Gif
MARTIN Gif
DUPONT Gif
DUPOND Metz
.
BARA
Gif
Reims
60
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 :
SELECT [Link], lieu
FROM emp,dept
WHERE [Link] (+) = [Link] ;
On ajoute (+) au nom de la colonne dont les valeurs ne
couvrent pas assez de champ (l o il manque des valeurs).
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 [Link],[Link] FROM Pilote p1, Pilote p2
WHERE [Link]>[Link] AND [Link]=PL-2;
Exemple 2 :
les noms, salaires et fonctions des employs gagnant plus que
lemploy SIMON
SELECT [Link], [Link], [Link]
FROM emp, emp j
WHERE [Link] > [Link] AND
[Link] =SIMON ;
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
SELECT typeAvion From avion where compa =AF
INTERSECT
SELECT typeAvion From avion where compa =SING
== > typeAvion
-------------A320
A340
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
- Les avions exploits par la compagnies AF mais pas par SING
SELECT typeAvion From avion where compa =AF
MINUS
SELECT typeAvion From avion where compa =SING
== > typeAvion
-------------Concorde
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);
Renvoi le nom des salaris ayant mme
fonction que toto et appartenant au mme
dpartement que toto
67
Loprateur EXISTS
- Utilis dans une requte principale
- Il est suivi dune sous requte entre parenthse :
EXISTS (sous requte);
- Permet de tester si la sous requte renvoi au moins un
ou non :
renvoi un vrai si oui un faux sinon
enregistrement
68
Loprateur EXISTS
Soit la relation :
Emp(empno,Ename job,embauche,sal,comm,#deptno,tel)
Dept(deptno,nomD)
Les noms des dpartements qui ont au moins
un employ ayant comme salaire plus de 1000
SELECT nomd FROM Dept
WHERE EXISTS ( SELECT * FROM Emp
WHERE sal>1000 and
[Link]=[Link]
);
Sous-requte corrle
== > sous-requte est
excut pour chaque
tuple de la table Dept
69
Loprateur NOT EXISTS
- Utilis dans une requte principale
- Il est suivi dune sous requte entre parenthse :
NOT EXISTS (sous requte);
- Permet de tester si la sous requte renvoi au moins unenregistrement
ou non :
renvoi un vrai si non faux si oui
70
Loprateur NOT EXISTS
Soit la relation :
Emp(empno,Ename job,embauche,sal,comm,#deptno,tel)
Dept(deptno,nomD)
Les noms des dpartements qui nont aucun employ
ayant comme salaire plus de 1000
SELECT nomD FROM Dept
WHERE NOT EXISTS ( SELECT * FROM Emp
WHERE sal>1000 and
Sous-requte corrle
== > sous-requte
[Link]=[Link]
excute pour chaque
);
tuple de la table Dept
viter si
possible
71
Lopratuer NOT EXISTS
- Utilisation parfois incontournable
- Utiliser pour exprimer la division : permet de traduire le terme tous les
Exemple :
Etudiant(numE,nom prnom)
UV(numUV,intitul)
Inscrit(numE,numE)
Donner les noms tudiants inscrits dans tous les UV :
== > quivalent : Les noms des tudiants pour lesquels il nexiste pas dUV
dans lequel ils ne soient pas inscrits :
SELECT nom FROM Etudiant E
WHERE NOT EXISTS( SLECT * FROM UV
WHERE NOT EXISTS( SELECT * FROM Inscrit I
WHERE [Link]=[Link]
and [Link]=[Link]
)
);
72
dfinition des donnes : le Langage de Dfinition de Donnes (LDD)
73
Cration dune table
Syntaxe :
CREATE TABLE nomTable(
colonne1 type1 [DEFAULT val1] [NOT NULL],
colonne2 type2 [DEFAULT val2] [NOT NULL],
CONSTRAINT nomContrainte TypeContrainte
);
nomTable : le nom de la table
Colonne<i> et type<i> : nom de la colonne avec son type (CHAR,
VARCHAR, NUMBER,DATE, )
nomContrainte : nom de la contrainte
typeContrainte : le type de la contrainte (cl primaire, cl trangre,etc)
DEFAULT : Possibilit de donner une valeur par dfaut pour une colonne
si la colonne n'est pas renseigne :
Exemple : datemaj DATE DEFAULT CURRENT_DATE,
ville Varchar(30) DEFAULT Paris,
74
Cration dune table
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
Cration dune table
Pilote
brevet
nom
nbrHvol
prime
embauche
typeAvion
compa
compagnie
CREATE TABLE compagnie (
compa
nrue
rue
compa VARCHAR(10),
nomComp VARCHAR(30) NOT NULL,
nrue NUMBER(3),
rue VARCHAR(20),
ville VARCHAR(15) DEFAULT Paris,
CONSTRAINT pk_Comppagnie PRIMARY KEY(comp),
);
ville
nomcompa
CREATE TABLE pilote (
brevet varchar(6), nom varchar(15) IS NOT NULL, nbHvol NUMBER(7),
compa varchar(4),
CONSTRAINT pk_pilote PRIMARY KEY(brevet),
CONSTRAINT un_nom UNIQUE(nom),
CONSTRAINT fk_pilote_compa FOREIGN KEY (compa) REFERENCES
compagnie(compa)
);
76
Supprimer une table
Syntaxe :
DROP TABLE <nomTable>;
impossible de supprimer une table rfrence par une
contrainte d'intgrit rfrentielle
Possiblit dutiliser loption CASCADE CONSTRAINTS par Oracle :
DROP TABLE <nomTable>
[CASCADE CONSTRAINTS];
L'option CASCADE CONSTRAINTS est requise s'il s'agit de la table
parent d'une relation de cl trangre.
77
Renommer une table
Syntaxe :
ALTER TABLE <nomTable> RENAME To <newname>
78
Modification structurelles dune table
Ajout de colonne :
ALTER TABLE <nomTable> ADD (col1 type1, col2 type2 );
Exemple :
ALTER TABLE Pilote ADD(tel VARCHAR(10));
Suppression de colonne :
Syntaxe :
ALTER TABLE <nomTable> DROP COLUMN <nomColonne>;
Exemple :
ALTER TABLE Pilote DROP COLUMN adresse;
PS : La suppression nest possible que si l colonne n'est pas l'objet d'une
contrainte d'intgrit
Renommer une colonne :
ALTER TABLE <nomTable> RENAME COLUMN <nomColonne> To
<newColumnName>;
Exemple :
ALTER TABLE Pilote RENAME COLUMN ville To adresse;
79
Modification structurelles dune table
Modifier le type dune colonne
Exemple :
- changement de la taille de la colonne compa et change de la contrainte par
dfaut.
ALTER TABLE Pilote MODIFY compa VARCHAR (6) DEFAULT SING ;
- Rendre possible linsertion de valeur nulle dans la colonne compa :
ALTER TABLE Pilote MODIFY compa ;
80
Modification des donnes
Modification des donnes :
langage de manipulation de donnes
En SQL :
- INSERT, UPDATE, DELETE
- COMMIT, ROLLBACK : pour valider ou annuler
les transactions
81
Modification des donnes
Ajout de lignes : INSERT
INSERT permet dinsrer une ligne en spcifiant les valeurs :
Syntaxe :
INSERT INTO nom_table(nom_col1,nom_col2, ...)
VALUES (val1,val2...)
les colonnes ne sont pas prciss , elles sont considres dans lordre de
la dclaration de la table
Exemple :
INSERT INTO compa VALUES (AC,124, Champs Elyses, Aire France) ;
INSERT INTO emp VALUES ( 7369, 'DUPON, 'commercial', 27047,17-12-80,
26000, 2500, 20) ;
82
Modification des donnes
UPDATE :
UPDATE permet de modifier les valeurs dune ou plusieurs
colonnes dans une ou plusieurs lignes dj existantes
Les nouvelles valeurs peuvent tre nonces par lutilisateur ou provenir
dun ou plusieurs SELECT
Syntaxe :
UPDATE nom_table
SET nom_col1 = {expression1 | ( SELECT ...) },
nom_col2 = {expression2 | ( SELECT ...) }
WHERE predicat;
Exemple:
UPDATE Employee SET salary = salary * 1.25 WHERE name =
'Bob'
83
Modification des donnes
DELETE: suppression de ligne
DELETE permet de supprimer une ou plusieurs lignes dune table
DELETE FROM nom_table
WHERE predicat ;
Sans clause WHERE : toutes les lignes sont supprimes
Exemple : supprimer tous les employs travaillant Rennes
DELETE FROM emp
WHERE emp .numdept = (SELECT [Link] FROM dept
WHERE lieu='Rennes)
Doit retourner une valeur et une seule
84
Modification des donnes
TRUNCATE:
TRUNCATE : supprime tous les enregistrements dune table et libre
ventuellement de lespace de stockage utilis par la table
Syntaxe :
TRUNCATE TABLE <nomTable];
PS : Il nest pas possible de tronquer une table qui est rfrencie par des cls
trangres actives.
85
Soit le schma suivant :
Hopital(codeHopital,nom,adresse,ville)
Laboratoire(codeLabo,nomLabo,#codeHopital)
Service(codeService,nomService,#codeHopital,nombreLits,#Matriculechef)
Medecin(Matricule,nom,adresse,specialite,fonction,#codeLabo,#codeService,
#codeHopital,mail)
Patient(numSecu, nom,prenom,adresse,datenaissance,mail)
Consultation(#Matriule, #numSecu,montant, TypePaiment )
- Ecrire, en SQL, les requtes suivantes :
a- Donner les noms des mdecins pour chaque hpital et pour chaque service.
b- Les noms des mdecins de la mme spcialit que le Dr. Toto
c- Les noms des services, ainsi que lhpital de leurs appartenances, qui ont un nombre
de lits suprieur au service de gncologie de lhpital de Ibn Tofail de la ville de
Marrakech.
d- Les noms des patients qui ont le mme nom quun mdecin quils ont consults
e- Le nombre de mdecins par hpital et par service
f- Le nombre de mdecins par hpital et par service ayant plus de vingt mdecins,
tri dans lordre alphabtique du nom dhpital.
86