Vous êtes sur la page 1sur 73

SQL :

Structured Query Langage

1
SQL: Trois langages C. Vangenot

 Langage de définition de données (LDD/DDL)


– création de relations : CREATE TABLE
– modification de relations: ALTER TABLE
– suppression de relations: DROP TABLE
– vues, index …. : CREATE VIEW ...
 Langage de requêtes (LMD/DML)
– SELECT ….... FROM ....... WHERE ..........
 Langage de manipulation de données (LMD /DML)
– insertion de tuples: INSERT
– mise à jour des tuples: UPDATE
– suppression de tuples: DELETE

2
SQL : partie langage de requêtes

3
Structure générale d’une requête :
le BLOC C. Vangenot

 Structure d'une requête formée de trois clauses:


SELECT <liste-attributs>
FROM <liste-tables>
WHERE <condition>

 SELECT définit le format du résultat cherché


 FROM définit à partir de quelles tables le résultat est
calculé
 WHERE définit les prédicats de sélection du résultat

4
SQL/Algèbre C. Vangenot

 Passage de l ’algèbre relationnelle au


langage de requêtes de SQL
 Traduction de chacun des 9 opérateurs en
un bloc SQL

5
SQL / Algèbre … Identité C. Vangenot

 En algèbre :  En SQL :
Id(R) SELECT *
FROM R

6
Exemple de requête
C. Vangenot

SELECT * FROM Pays;


-> tous les attributs de tous les tuples de la table Pays

PAYS
nom capitale population surface
Irlande Dublin 3 70
Autriche Vienne 8 83
Royaume-Uni Londres 36 244
Suisse Berne 7 41
USA Washington 189 441

7
SQL / Algèbre … Sélection C. Vangenot

 En algèbre :  En SQL :
σ[condition] R SELECT *
FROM R
WHERE condition

8
Exemple de requête de sélection C. Vangenot

algèbre:
SELECT *
σ[population < 20] Pays FROM Pays
WHERE population < 20 ;
PAYS
nom capitale population surface
Irlande Dublin 3 70
Autriche Vienne 8 83
Royaume-Uni Londres 36 244
Suisse Berne 7 41
USA Washington 189 441

* = toutes les colonnes


9
SQL / Algèbre … Projection C. Vangenot

 En algèbre :  En SQL :
π [ A1, A2,…, An] R SELECT A1,A2,…An
FROM R

10
Exemple de requête de projection C. Vangenot

SELECT nom, capitale


FROM Pays;

PAYS
nom capitale population surface
Irlande Dublin 3 70
Autriche Vienne 8 83
Royaume-Uni Londres 36 244
Suisse Berne 7 41
USA Washington 189 441

11
Projection - selection C. Vangenot

SELECT <liste-attributs> projection

FROM <liste-tables>

WHERE <condition> selection

12
SELECT nom, capitale, population
sélection +
projection FROM Pays C. Vangenot

WHERE population < 20 ;


PAYS
nom capitale population surface
Irlande Dublin 3 70
Autriche Vienne 8 83
Royaume-Uni Londres 36 244
Suisse Berne 7 41
USA Washington 189 441
résultat
nom capitale population
Irlande Dublin 3
Autriche Vienne 8
Suisse Berne 7
algèbre:
π13
[nom, capitale, population] (σ [population < 20] Pays)
SQL / Algèbre … Renommage C. Vangenot

En algèbre :  En SQL : Impossible de


renommer des attributs. Il faut
α (A1/B1, ..., An/Bn) R faire des “copies logiques” des
relations.
SELECT *
FROM R, R R2
WHERE R.A = R2.A ….

 R2 peut être vue comme une


copie logique de R

14
SQL / Algèbre … Produit cartésien C. Vangenot

 En algèbre :  En SQL :
R×S SELECT *
FROM R, S

15
Exemple
C. Vangenot

SELECT * FROM R, S
A B C D E
a b c d e
a b b a b
a b a a c
R A B S C D E b c c d e
a b c d e b c b a b
b c b a b b c a a c
c b c b c d e
a a c c b b a b
c b a a c

n tuples m tuples n x m tuples

16
Exemple II
PAYS C. Vangenot
JO
nom capitale population surface
année lieu pays
Irlande Dublin 3 70
1896 Athènes Grèce
Autriche Vienne 8 83
1900 Paris France
RU Londres 36 244
1904 St.Louis USA Suisse Berne 7 41
1908 Londres RU
USA Washington 189 441

SELECT année, lieu, pays, capitale


FROM JO, PAYS

17
SQL / Algèbre … Jointure C. Vangenot

 En SQL :
 En algèbre : SELECT *
R S 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

18
Jointure de 2 relations
C. Vangenot
JO SELECT année, lieu, pays,
année lieu pays capitale
1896 Athènes Grèce FROM JO, PAYS
WHERE JO.pays = PAYS.nom;
1900 Paris France
1904 St.Louis USA
1908 Londres Royaume-Uni

PAYS
nom capitale population surface

Irlande Dublin 3 70
Autriche Vienne 8 83
Royaume-Uni Londres 36 244
Suisse Berne 7 41
USA Washington 189 441
19
Jointure de 2 relations: résultat
C. Vangenot
JO PAYS
année lieu pays nom capitale population surface

1896 Athènes Grèce Irlande Dublin 3 70


Autriche Vienne 8 83
1900 Paris France
Royaume-Uni Londres 36 244
1904 St.Louis USA
Suisse Berne 7 41
1908 Londres Royaume-Uni
USA Washington 189 441
Résultat
année lieu pays capitale
1904 St.Louis USA Washington
1908 Londres Royaume-Uni Londres

SELECT année, lieu, pays, capitale


FROM JO, PAYS
20 WHERE JO.pays = PAYS.nom ;
Jointure sur la même table C. Vangenot

 Comment comparer les populations des pays?


 ?? Toutes les paires de pays telles que le premier
pays a une population plus grande que le
deuxième 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 renommée en P1 et P2 (alias)

21
Jointure sur la même table C. Vangenot
PAYS
nom capitale population surface
Irlande Dublin 3 70
Autriche Vienne 8 83
Royaume-Uni Londres 36 244
Suisse Berne 7 41
USA Washington 189 441

PAYS
nom capitale population surface
Irlande Dublin 3 70
Autriche Vienne 8 83
Royaume-Uni Londres 36 244
Suisse Berne 7 41
22 USA Washington 189 441
PAYS-P1
nom capitale population surface
Irlande Dublin 3 70
Autriche Vienne 8 83 SELECT P1.nom, P1.population,
RU Londres 36 244
Suisse Berne 7 41 P2.nom, P2.population C. Vangenot
USA Washington 189 441
FROM PAYS P1, PAYS P2
PAYS-P2
WHERE P1.population > P2.population
nom capitale population surface
Irlande Dublin 3 70
Autriche Vienne 8 83
RU Londres 36 244
Suisse Berne 7 41
USA Washington 189 441
P1.population > P2.population
résultat
nom-P1 pop-P1 nom-P2 pop-P2
Autriche 8 Irlande 3
Autriche 8 Suisse 7
RU 36 Irlande 3
RU 36 Autriche 8
RU 36 Suisse 7

23
Jointure externe C. Vangenot

 Jointure classique: on supprime les tuples qui ne vérifient


pas la condition de jointure
 Jointure externe:
– Définition d’une table dominante et d’une table subordonnée
– On garde toutes les lignes de la table dominante qu’on ‘joint’ avec
null
 SELECT … SELECT …
From A, B From A LEFT OUTER JOIN B
Where A.x = B.y (+) On A.x = B.y
 A : table dominante
– Retourne tous les tuples de A
 Attention: Mettre (+) pour toutes les conditions de jointure

24
Jointure externe C. Vangenot

 Right outer join:


SELECT … SELECT …
From A, B From A RIGHT OUTER JOIN B
Where A.x (+) = B.y On A.x = B.y

 Full outer join:


SELECT …
From A FULL OUTER JOIN B
On A.x = B.y

25
Jointure externe
JO PAYS
nom capitale population surface
année lieu pays C. Vangenot
Irlande Dublin 3 70
1896 Athènes Grèce
Autriche Vienne 8 83
1900 Paris France Royaume-Uni Londres 36 244
1904 St.Louis USA Suisse Berne 7 41
1908 Londres Royaume-Uni USA Washington 189 441

Résultat
année lieu pays capitale
1896 Athènes Grèce NULL
1900 Paris France NULL
1904 St Louis USA Washington

Table 1908 Londres Royaume-Uni Londres

dominante SELECT année, lieu, JO.pays, capitale


FROM JO LEFT OUTER JOIN PAYS
ON JO.pays = PAYS.nom;
26
SQL / Algèbre … union C. Vangenot

 En algèbre :  En SQL :
R∪S BlocR UNION BlocS

SELECT *
FROM R
UNION
SELECT *
Les tuples en double sont éliminés
FROM S
du résultat

27
SQL / Algèbre … intersection C. Vangenot

 En algèbre :  En SQL :
BlocR INTERSECT BlocS
R∩S
SELECT *
FROM R
INTERSECT
SELECT *
FROM S
Les tuples en double sont éliminés
du résultat

28
SQL / Algèbre … différence C. Vangenot

 En algèbre :  En SQL :
R−S BlocR MINUS BlocS

SELECT *
FROM R
MINUS
SELECT *
Les tuples en double sont éliminés
FROM S
du résultat

29
Différences C. Vangenot

 En SQL :
– Le résultat d'une requête peut contenir plusieurs
occurrences d’un n-uplet,
 pour avoir une seule occurrence de chaque n-uplet dans
une relation : DISTINCT
 Exemple : select DISTINCT nom
from Personne
– Le résultat d'une requête peut être trié,
– Il existe une valeur spéciale dite indéfinie (NULL)
utilisée pour remplir un champ dont on ne connaît
pas la valeur.

30
Remarques C. Vangenot

 En SQL, le produit cartésien est possible


sans renommer les attributs communs.
– Ex : schéma(R×S) = A (de R), B (de R), B (de S), C (de S).
 En SQL, si plusieurs attributs ont le même
nom, pour résoudre l’ambiguïté, on spécifie
la relation auquel l’attribut appartient.
– Ex : select A, R.B, C
from R, S

31
Ecriture des conditions

32
Opérateurs de comparaison C. Vangenot

 = égal  WHERE surface = 200


 <> différent  WHERE capitale <> ‘Paris’
 > plus grand que  WHERE population > 8
 >= plus grand ou égal  WHERE population >= 8
 < plus petit que  WHERE surface < 83
 <= plus petit ou égal  WHERE surface <= 83

33
Opérateurs logiques C. Vangenot

 Tous les prédicats : AND


ex: WHERE population<10 AND surface<500

 Un des prédicats : OR
ex: WHERE population<10 OR surface<500

 Négation de la condition : NOT


ex: SELECT P1.nom, P2.nom, P1.capitale
FROM PAYS P1, PAYS P2
WHERE P1.capitale = P2.capitale
AND NOT P1.nom = P2.nom ;

34
Expressions logiques
C. Vangenot

 Combinaisons:
WHERE ( ensoleillement > 80% AND pluviosité < 200 )
OR température > 30

WHERE ensoleillement > 80% AND


( pluviosité < 200 OR température > 30 )

35
Appartenance à un ensemble: IN
C. Vangenot

 WHERE monnaie = ‘Pound’ OR


monnaie = ‘Schilling’ OR
monnaie = ‘Franc’
 Équivalent à:
WHERE monnaie IN (‘Pound’, ‘Schilling’,
‘Franc’)
 NOT IN: non appartenance à un ensemble

36
Comparaison à un ensemble: ALL C. Vangenot

 SELECT * FROM Employee


WHERE salary >= 1400
AND salary >= 3000;
 Équivalent à:
SELECT * FROM Employee
WHERE salary >= ALL ( 1400, 3000);

37
Valeur dans un intervalle: BETWEEN
C. Vangenot

 WHERE population >= 50 AND


population <= 60

 Équivalent à:
WHERE population BETWEEN 50 AND 60

NOT BETWEEN

38
Conditions partielles (wildcards)
C. Vangenot

% : zéro ou n’importe quel caractère (x caractères)


 WHERE pays LIKE ‘%lande’
– -> Irlande, Islande, Finlande, Hollande
 WHERE pays LIKE ‘%ran%’
– -> Iran, France

_ : exactement un caractère
 WHERE pays LIKE ‘I_lande’
– -> Irlande, Islande
NOT LIKE
39
Valeurs calculées C. Vangenot

 SELECT nom, population, surface, natalité


FROM PAYS
WHERE (population * 1000 / surface) < 50
AND (population * natalité / surface) > 0

 SELECT nom, ( population * 1000 / surface )


FROM PAYS

Valeurs numériques: + - * /
40 Chaines de caractères: ¦¦
‘NULL’ <> 0 !!! C. Vangenot

 Null = valeur inconnue ou non définie:

Pays ( nom , population )

SELECT nom
FROM PAYS
WHERE population IS NULL

 -> pays dont on a pas entré la valeur de population

NULL = Pas de valeur


41
Operations sur ‘NULL’ C. Vangenot

 NULL dans conditions:


– ( select * from pays where population > 0 ) ?
 si population est NULL, le résultat est "unknown" donc "false"

– (select * from pays where population = NULL ) ?


 le test retourne toujours "false":

– La syntaxe correcte est: ( population IS NULL )

 NULL dans expression arithmétique:


– ( population + NULL ) retourne NULL

42
Opérations sur ‘NULL’ C. Vangenot

 NULL dans fonction SQL


– Concat (nom, '-', prénom) retourne NULL si
prénom null
 Concat ( nom, '-', NVL(prenom,' ')) retourne 'dupont-'
 NVL(attribut,valeur de remplacement): retourne la valeur
de remplacement lorsque que la valeur de l’attribut est
NULL.
– Fonctions d'agrégation ignorent les NULL:
 Moyenne(1000, null, null, null, and 2000) =
(1000+2000)/2

43
Résumé C. Vangenot

 If A is: Condition Evaluates to:


– 10 a IS NULL FALSE
– 10 a IS NOT NULL TRUE
– 10 a = NULL UNKNOWN
– 10 a != NULL UNKNOWN
– NULL a IS NULL TRUE
– NULL a IS NOT NULL FALSE
– NULL a = NULL UNKNOWN
– NULL a != NULL UNKNOWN
– NULL a = 10 UNKNOWN
– NULL a != 10 UNKNOWN
44
Requêtes avec blocs emboîtés

45
BD Exemple : Livraisons C. Vangenot

P ( np , nomp , couleur , poids , prix ) les produits


U ( nu , nomu , ville , pays ) les usines
F ( nf , nomf , type , ville , pays ) les fournisseurs
PUF ( np, nu, nf , quantité ) les livraisons

np, nu, nf dans PUF sont des identifiants externes


sur P, U et F (respectivement)

46
Jointure C. Vangenot

Nom et couleur des produits livrés par le fournisseur 1


Solution 1 : la jointure déclarative
SELECT nomp, couleur FROM P, PUF
WHERE PUF.np = P.np AND nf = 1 ;

47
Jointure par blocs emboîtés : IN (∈)
C. Vangenot

Nom et couleur des produits livrés par le fournisseur 1


Solution 1 : la jointure déclarative
SELECT nomp, couleur FROM P, PUF
WHERE PUF.np = P.np AND nf = 1 ;

Solution 2 : la jointure procédurale (par emboîtement)

SELECT nomp, couleur 2. Nom et


Outer couleur des
query FROM P produits du
WHERE np IN fournisseur 1
( SELECT np 1. Ensemble
des produits
Nested FROM PUF livrés par le
query WHERE nf = 1) ; fournisseur 1
48
Jointure par blocs emboîtés : IN (∈)
C. Vangenot

 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-
requête
 IN peut aussi comparer un tuple de valeurs:
– SELECT nu FROM U
WHERE (ville, pays) IN (SELECT ville, pays FROM F)

49
Composition de conditions
C. Vangenot

Nom des fournisseurs qui approvisionnent une usine de Londres ou


de Paris en un produit rouge
SELECT nomf FROM F SELECT nomf
WHERE nf IN FROM PUF, P, F, U
(SELECT nf FROM PUF WHERE couleur = 'rouge'
WHERE np IN
AND PUF.np = P.np
(SELECT np FROM P AND PUF.nf = F.nf
WHERE couleur = 'rouge') AND PUF.nu = U.nu
AND nu IN AND (U.ville = 'Londres'
(SELECT nu FROM U OR U.ville = 'Paris');
WHERE ville = 'Londres'
OR ville = 'Paris') ) ;

50
Quantificateurs : ANY
C. Vangenot

Numéro des fournisseurs de produits rouges:


SELECT nf
FROM PUF
WHERE np = ANY ( SELECT np FROM P
WHERE couleur = 'rouge' ) ;
Equivalent au IN: Existe t'il dans l'ensemble au moins un
élément qui vérifie la condition?
Numéro des fournisseurs fournissant des produits dont le numéro est
inférieur au numéro des produits pesant plus d’une tonne:
SELECT nf
FROM PUF
WHERE np < ANY ( SELECT np FROM P
WHERE poids > 1000 ) ;

51
Quantificateurs : ALL
C. Vangenot
ALL: tous les éléments de l'ensemble
doivent vérifier la condition
Numéros des fournisseurs qui ne fournissent que des
produits rouges
SELECT nf
FROM F
WHERE 'rouge' = ALL
( SELECT couleur
FROM P
WHERE np IN
( SELECT np
La requête imbriquée est FROM PUF
ré-évaluée pour chaque WHERE PUF.nf = F.nf ) )
;
tuple de la requête (ici
52pour chaque nf)
Conditions sur des ensembles: EXISTS
C. Vangenot

 Test si l’ensemble n’est pas vide (E ≠ ∅)


 Noms des fournisseurs qui fournissent au moins
un produit rouge

SELECT nomf
FROM F
WHERE EXISTS
( SELECT *
FROM PUF, P ce fournisseur
WHERE PUF.nf = F.nf
AND PUF.np = P.np
Produit fourni AND P.couleur = 'rouge' ) ;
est rouge

53
Recapitulation: blocs emboîtés C. Vangenot

attr IN requête attr NOT IN requête


condition vrai si vérifiée pour une des valeurs
retournée par la requête

attr opérateur ANY requête


condition vrai si vérifiée pour au moins une des valeurs
retournée par la requête

attr opérateur ALL reqûete


condition vrai si vérifiée pour toutes les valeurs
retournées par la requête

EXISTS requête NOT EXISTS requête


54 Teste si l’ensemble n’est pas vide
Traitement des résultats

55
Fonctions sur des colonnes C. Vangenot

 Attributs calculés
– Ex: SELECT nom, population*1000/surface FROM PAYS
 Opérateurs sur attributs numériques
– SUM: somme des valeurs des tuples sélectionnés
– AVG: moyenne
 Opérateurs sur tous types d’attributs Opérateur
– MIN: minimum agrégation
– MAX: maximum
– COUNT: nombre de tuples sélectionnés

56
PAYS
nom capitale population surface continent
Irlande Dublin 3 70 Europe
C. Vangenot
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:


SELECT MIN(population), - la pop. du plus petit pays d’Europe,
MAX(population),
- la pop. du plus grand,
AVG(population),
SUM(surface), - la moyenne des pop. de tous les pays
COUNT(*) d’Europe,
FROM PAYS - la somme des surfaces des pays
WHERE continent = ‘Europe’ d’Europe
- le nombre de pays d’Europe
57
DISTINCT
C. Vangenot
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

Suppression des doubles:


SELECT DISTINCT continent
FROM PAYS
Europe
Amerique
58
PAYS
ORDER nom capitale population surface continent
BY Irlande Dublin 3 70 C. Vangenot
Europe
Autriche Vienne 8 83 Europe
R-Uni Londres 36 244 Europe
Tri des
tuples du Suisse Berne 7 41 Europe
résultat USA Washington 189 441 Amerique

SELECT continent, population, nom


FROM PAYS
résultat
WHERE surface > 60
continent population nom
ORDER BY continent, nom DESC
Europe 36 Royaume-Uni

Europe 3 Irlande
Europe 8 Autriche
Amerique 189 USA

ASC/DESC
59
PAYS

GROUP nom capitale population surface continent

BY Irlande Dublin 3 70 Europe


C. Vangenot
Autriche Vienne 8 83 Europe
Royaume-Uni Londres 36 244 Europe
Suisse Berne 7 41 Europe
USA Washington 189 441 Amerique

Partition de l’ensemble des tuples en groupes


homogènes
SELECT continent, MIN(population), MAX(population),
AVG(population), SUM(surface), COUNT(*)
FROM PAYS
GROUP BY continent ;

résultat continent MIN(pop) MAX(pop) AVG(pop) SUM(surf) COUNT

un tuple par Europe 3 36 13,5 438 4


60
continent Amerique 189 189 189 441 1
Condition HAVING C. Vangenot

 SELECT … FROM … WHERE … GROUP BY … HAVING <condition>


 Partition de l’ensemble des tuples en groupes homogènes
– 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 l’ensemble des tuples d’un groupe:
– On retourne la population totale par continent, tel que chaque continent a
une superficie > 439

résultat continent SUM(pop)

un tuple par Europe 54


61 continent Amerique 189
Attention C. Vangenot

SELECT surface, MIN(population)


FROM Pays
WHERE continent = ‘Europe’;
Requête incorrecte !

Règle: chaque attribut dans clause SELECT est inclus dans


opérateur d’agrégation ou inclus dans clause GROUP BY

62
Renommage du nom des attributs:
AS C. Vangenot

SELECT MIN(population) AS min_pop,


MAX(population) AS max_pop,
AVG(population) AS avg_pop,
SUM(surface) AS sum_surface,
COUNT(*) AS count
FROM PAYS
WHERE continent = ‘Europe’ ;

63
Vues

64
Vues C. Vangenot

 Vue: vision logique des données contenues


dans une ou plusieurs tables
 Considérée comme une table virtuelle:
– N’a pas d’existence propre
– Aucune donnée ne lui est associée
– Sa description est stockée sous la forme d’une
requête

65
Exemple C. Vangenot
PAYS
nom capitale population surface
Grèce Athènes 3 70
France Paris 8 83
RU Londres 36 244
Suisse Berne 7 41
USA Washington 189 441

Vue constituant une restriction de la table PAYS:


CREATE VIEW Petit_pays
AS SELECT * FROM Pays WHERE surface < 100;

Petit_pays
nom capitale population surface
Grèce Athènes 3 70
France Paris 8 83
66 Suisse Berne 7 41
Petit_pays
nom capitale population surface
Utilisation Grèce Athènes 3 70
France Paris 8 83C. Vangenot
Suisse Berne 7 41

 Vue peut être utilisée dans un ordre select en


lieu et place d’une table
 Petit_pays: table virtuelle recomposée à
chaque appel de la vue:
– Create view Petit_pays as Select * from Pays
where population < 7;
– Select * from Petit_pays where surface < 100;
 SELECT * FROM Pays
WHERE population < 7 and surface < 100;

67
Utilité C. Vangenot

 Confidentialité
– Les utilisateurs n’ont le droit d’accéder qu’aux vues
 Vue sur la table Employé destinée aux employés ne sélectionne pas la
colonne Salaire contrairement à la vue destinée aux chefs de service.
 Présenter différentes perspectives sur les données aux
utilisateurs
– Renommage des colonnes
 Mises à jour des tables transparentes aux utilisateurs
 Cacher la complexité des données aux utilisateurs
– Vue simplifiée des données
 Requêtes complexes
– Qui ne peuvent être faites sans vues
– Qui sont fréquemment réalisées

68
Syntaxe C. Vangenot

 CREATE [OR REPLACE] VIEW nom_vue


[ ( nouveau_nom_col)*]
AS subquery ;

69
Syntaxe (2) C. Vangenot

 CREATE [OR REPLACE] VIEW nom_vue


[ ( nouveau_nom_col)*]
– Noms de colonnes facultatifs, par défaut ceux de la
table
– Nécessaire si certaines des colonnes spécifiées dans le
SELECT sont des expressions calculées

Table Pays (nom, capitale, population, surface)


Densité_pays
CREATE VIEW Densité_pays
nom densité
( nom, densité)
Grèce 0.04
AS SELECT nom, population/surface
France 0.09
FROM Pays; RU 0.14
Suisse 0.17
70 USA 0.42
Syntaxe (3) C. Vangenot

 CREATE [OR REPLACE] VIEW nom_vue


– Permet de modifier la vue sans avoir à la supprimer et la recréer

 CREATE OR REPLACE VIEW Petit_pays


AS SELECT * FROM Pays WHERE surface < 300;

– si pas "OR REPLACE" : erreur


– si "OR REPLACE" : la vue est remplacée par cette nouvelle
définition

71
Vue : exemple C. Vangenot
PAYS JO
nom capitale population surface
année lieu pays
Grèce Athènes 3 70
1896 Athènes Grèce
France Paris 8 83
1900 Paris France
RU Londres 36 244
Suisse Berne 7 41 1904 St. Louis USA
USA Washington 189 441 1908 York RU

CREATE VIEW capitale_olympique


(année, pays, capitale)
AS SELECT année, JO.pays, capitale
FROM JO, Pays
WHERE JO.pays = Pays.nom

72
Utilisation des Vues C. Vangenot

CREATE VIEW capitale_olympique (année, pays, capitale)


AS SELECT année, JO.pays, capitale FROM JO, Pays
WHERE JO.pays = Pays.nom

SELECT * FROM capitale_olympique;

Capitale_olympique
année pays capitale
1896 Grèce Athènes
1900 France Paris
1904 USA Washington
1908 RU Londres
73

Vous aimerez peut-être aussi