de relations : CREATE TABLE modification de relations: ALTER TABLE suppression de relations: DROP TABLE vues, index . : CREATE VIEW ...
de tuples: INSERT mise jour des tuples: UPDATE suppression de tuples: DELETE
2
SELECT dfinit le format du rsultat cherch FROM dfinit partir de quelles tables le rsultat est calcul WHERE dfinit les prdicats de slection du rsultat
4
Exemple de requte
SELECT * FROM country
->
table country table Country country Ireland Austria Utd Kingdom Switzerland capital Dublin Vienna London Berne population 3 8 56 7 area 70 83 244 41
5
SQL / Algbre
SQL/Algbre
Passage de l algbre relationnelle au langage de requtes de SQL Traduction de chacun des 9 oprateurs en un bloc SQL
En algbre : [condition] R
population 3 8 36 7 189
Suisse USA
En algbre :
11
Suisse USA
Suisse USA
rsultat
population 3 8 7
Suisse Berne algbre: 13 [nom, capitale, population] ( [population < 20] Pays)
En algbre : RS
15
En algbre : R S
En SQL : SELECT * FROM R, S WHERE R.A1 = S.A1 AND R.A2 = S.A2 AND R.An = S.An Avec A1, , An tous les attributs communs R et S
16
Jointure de 2 relations
JO
anne 1896 1900
1904
SELECT anne, lieu, pays, capitale FROM JO, PAYS WHERE JO.pays = PAYS.nom;
1908
PAYS
nom Irlande Autriche
Royaume-Uni
population 3 8 36 7 189
Suisse USA
PAYS
lieu Athnes Paris St.Louis Londres pays Grce France USA
Royaume-Uni
1908
Suisse USA
3 8 36 7 189
70 83 244 41 441
Rsultat
anne
1904
pays USA
Royaume-Uni
capitale Washington
Londres
1908
SELECT anne, lieu, pays, capitale FROM JO, PAYS WHERE JO.pays = PAYS.nom ;
18
Comment comparer les populations des pays? ?? Toutes les paires de pays telles que le premier pays a une population plus grande que le deuxime pays
SELECT P1.nom, P1.population, P2.nom, P2.population FROM PAYS as P1, PAYS as P2 WHERE P1.population > P2.population; NB: La table PAYS est renomme en P1 et P2 (alias)
19
population 3 8 36 7 189
Suisse USA
PAYS
nom Irlande Autriche
Royaume-Uni
population 3 8 36 7 189
surface 70 83 244 41
20
Suisse USA
PAYS-P1 nom Irlande Autriche RU Suisse USA PAYS-P2 nom Irlande Autriche RU Suisse USA
population 3 8 36 7 Washington 189 population 3 8 36 7 Washington 189 capitale Dublin Vienne Londres Berne
SELECT P1.nom, P1.population, P2.nom, P2.population FROM PAYS P1, PAYS P2 WHERE P1.population > P2.population
rsultat
nom-P1 Autriche Autriche
RU RU RU
pop-P1 8 8 36 36 36
Jointure externe
Jointure classique: on supprime les tuples qui ne vrifient pas la condition de jointure Jointure externe:
Dfinition dune table dominante et dune table subordonne On garde toutes les lignes de la table dominante quon joint avec null
Jointure externe
Right outer join: SELECT From A, B Where A.x= B.y Full outer join: SELECT From A FULL OUTER JOIN B On A.x = B.y
23
Jointure externe
JO
anne 1896 1900
1904
PAYS
nom Irlande Autriche
Royaume-Uni
1908
Suisse USA
3 8 36 7 189
70 83 244 41 441
Rsultat
anne 1896 1900 1904 lieu pays Grce
France USA Royaume-Uni
capitale NULL
NULL Washington Londres
Table
1908
dominante
SELECT anne, lieu, JO.pays, capitale FROM JO LEFT OUTER JOIN PAYS ON JO.pays = PAYS.nom;
24
En algbre : RS
En algbre : RS
SELECT * FROM S
26
En algbre : RS
Diffrences
En SQL :
Le rsultat d'une requte peut tre tri, Il existe une valeur spciale dite indfinie (NULL) utilise pour remplir un champ dont on ne connat pas la valeur.
28
Remarques
En SQL, le produit cartsien est possible sans renommer les attributs communs.
Ex
S).
En SQL, si plusieurs attributs ont le mme nom, pour rsoudre lambigut, on spcifie la relation auquel lattribut appartient.
Ex
Oprateurs de comparaison
= gal <> diffrent > plus grand que >= plus grand ou gal < plus petit que <= plus petit ou gal
WHERE surface = 200 WHERE capitale <> Paris WHERE population > 8 WHERE population >= 8 WHERE surface < 83 WHERE surface <= 83
31
Oprateurs logiques
SELECT P1.nom, P2.nom, P1.capitale FROM PAYS P1, PAYS P2 WHERE P1.capitale = P2.capitale AND NOT P1.nom = P2.nom ;
32
Expressions logiques
Combinaisons:
WHERE ( ensoleillement > 80% AND pluviosit < 200 ) OR temprature > 30 WHERE ensoleillement > 80% AND ( pluviosit < 200 OR temprature > 30 )
33
Appartenance un ensemble: IN
WHERE monnaie = Pound monnaie = Schilling monnaie = Franc OR OR
SELECT * FROM Employee WHERE salary >= 1400 AND salary >= 3000); quivalent : SELECT * FROM Employee WHERE salary >= ALL ( 1400, 3000);
35
AND
NOT BETWEEN
36
Conditions partielles
% : zro ou nimporte quel caractre
_ : exactement un caractre
NOT LIKE
37
Valeurs calcules
SELECT nom, population, surface, natalit FROM PAYS AND (population * natalit / surface) > 0 SELECT nom, ( population * 1000 / surface ) FROM PAYS Valeurs numriques: + - * /
38
( population > 0 ) ?
z
( population = NULL ) ?
z
La
Fonctions
z
Rsum
If A is:
10 10 10 10 NULL NULL NULL NULL NULL NULL
Condition
a a a a a a a a a a IS NULL IS NOT NULL = NULL != NULL IS NULL IS NOT NULL = NULL != NULL = 10 != 10
Evaluates to:
FALSE TRUE UNKNOWN UNKNOWN TRUE FALSE UNKNOWN UNKNOWN UNKNOWN UNKNOWN
42
BD Exemple : Livraisons
P ( np , nomp , couleur , poids , prix ) les produits U ( nu , nomu , ville , pays ) F ( nf , nomf , type , ville , pays ) PUF ( np, nu, nf , quantit ) les usines les fournisseurs les livraisons
np, nu, nf dans PUF sont des identifiants externes sur P, U et F (respectivement)
44
45
SELECT nomp, couleur FROM P WHERE np IN ( SELECT np FROM PUF WHERE nf = 1) ; IN compare chaque valeur de np avec l'ensemble (ou multi-ensemble) de valeurs retourn par la sous-requte IN peut aussi comparer un tuple de valeurs:
SELECT
Composition de conditions
Nom des fournisseurs qui approvisionnent une usine de Londres ou de Paris en un produit rouge SELECT nomf FROM F WHERE nf IN (SELECT nf FROM PUF WHERE np IN (SELECT np FROM P
SELECT nomf FROM PUF, P, F, U WHERE couleur = 'rouge' AND PUF.np = P.np AND PUF.nf = F.nf AND PUF.nu = U.nu
AND (U.ville = 'Londres' WHERE couleur = 'rouge') OR U.ville = 'Paris'); AND nu IN (SELECT nu FROM U WHERE ville = 'Londres' OR ville = 'Paris') ) ;
47
48
Quantificateurs : ALL
Numros des fournisseurs qui ne fournissent que des produits rouges ALL: tous les lments de l'ensemble doivent vrifier la condition SELECT nf FROM F WHERE 'rouge' = ALL
( SELECT couleur FROM P WHERE np IN
La requte imbrique est r-value pour chaque tuple de la requte (ici pour chaque nf)
Noms des fournisseurs qui fournissent au moins un produit rouge SELECT nomf FROM F ce fournisseur WHERE EXISTS ( SELECT * FROM PUF, P WHERE PUF.nf = F.nf AND PUF.np = P.np Produit fourni AND P.couleur = 'rouge' ) ; est rouge 50
condition vrai si vrifie pour au moins une des valeurs retourne par la requte
condition vrai si vrifie pour toutes les valeurs retournes par la requte Teste si lensemble nest pas vide
EXISTS requte
Attributs calculs
Ex:
SELECT nom, population*1000/surface FROM PAYS somme des valeurs des tuples slectionns moyenne
Oprateur agrgation
PAYS nom capitale population surface continent Irlande Dublin 3 70 Europe Autriche Vienne 8 83 Europe R-Uni Londres 36 244 Europe Suisse Berne 7 41 Europe USA Washington 189 441 Amerique
Retourne un tuple avec: - la pop. du plus petit pays dEurope, - la pop. du plus grand, - la moyenne des pop. de tous les pays dEurope, - la somme des surfaces des pays dEurope - le nombre de pays dEurope
54
SELECT MIN(population), MAX(population), AVG(population), SUM(surface), COUNT(*) FROM PAYS WHERE continent = Europe
DISTINCT
PAYS nom capitale population surface 3 8 36 7 189 70 83 244 41 441 continent Europe Europe Europe Europe Amerique
Irlande Dublin Autriche Vienne R-Uni Londres Suisse Berne USA Washington
55
PAYS
ORDER BY
Tri des tuples du rsultat
capitale population surface continent Dublin Vienne Londres Berne Washington 3 8 36 7 189 70 83 244 41 441 Europe Europe Europe Europe Amerique
SELECT continent, nom, population FROM PAYS WHERE surface > 60 ORDER BY continent, nom DESC ASC/DESC
rsultat
continent population Europe Europe Europe Amerique 36 3 8 189 nom
Royaume-Uni
56
PAYS
GROUP BY
Suisse USA
Condition HAVING
SELECT FROM WHERE GROUP BY HAVING <condition> Partition de lensemble des tuples en groupes homognes
SELECT continent, SUM(population) FROM PAYS GROUP BY continent HAVING SUM(surface) > 439 ;
Attention la condition ne porte pas sur chaque tuple de la table comme pour le where mais sur lensemble des tuples dun groupe:
On retourne la population totale par continent, tel que chaque continent a une superficie > 439
rsultat
continent SUM(pop) Europe Amerique 54 189
58
AS sum_surface, AS count
INSERT INTO
INSERT
64
UPDATE
65
UPDATE
UPDATE {nom_table nom_vue} SET { (nom_col)* = (sous-requte) nom_col = { valeur (sous-requte)} }* WHERE condition;
66
DELETE FROM
DELETE
68