You are on page 1of 14

SQL

Pourquoi SQL?
Requtes une table
!SQL langage de haut niveau,
vite de spcifier la manipulation des
donnes comme il faudrait le faire
par exemple en C++
Transparents de Jeffrey ULLMAN SELECT
(Stanford University)
!SQL fonctionne car les requtes sont
Traduits/adapts par C. Retor trs efficacement optimises FROM
(Universit Bordeaux 1) pour des rponses rapides. WHERE

1 2 3

Select-From-Where Exemple pour tout ce cours Exemple


! Requtes SQL sur le schma suivant
Structure gnrale dune requte: !En utilisant Beers(name, manf), quelles
Beers(name, manf) beers sont fabriques par Anheuser-Busch?
SELECT attributs recherchs Bars(name, addr, license) SELECT name
Drinkers(name, addr, phone) FROM Beers
FROM une ou plusieurs tables Likes(drinker, beer)
WHERE condition sur les n-uplets des tables WHERE manf = Anheuser-Busch;
Sells(bar, beer, price)
Frequents(drinker, bar)

4
Les attributs dune clef sont souligns 5 6

Resultat dune requte Sens dune requte sur une relation Smantique Oprationelle
name !Considrer la relation dans le FROM !Pour implanter lalgorithme
Bud !Appliquer la selection du WHERE ! Une variable de n-uplet parcourt la
table du FROM.
Bud Lite !Appliquer la projection du SELECT
!Tester si le n-uplet courrant satisfait
Michelob la condition du WHERE.
!SI cest le cas, calculer les attributs ou
Relation un attribut: name expressions du SELECT avec les
Et les 1-uplest des beers fabriques par valeurs du n-uplet courant.
Anheuser-Busch, comme Bud.
7 8 9
* Dans le SELECT Rsultat de la requte:
Contenu du champ SELECT
!Avec une relation dans le FROM clause, name manf
* dans le SELECT
Bud Anheuser-Busch
signifie tous les attributs de la relation
Bud Lite Anheuser-Busch
!Exemple avec Beers(name, manf):
* Michelob Anheuser-Busch
SELECT *
Renommage FROM Beers Ici le rsultat a tous les attribut de Beers.
Constantes WHERE manf = Anheuser-Busch;

10 11 12

Renommage des Attributs Rsultat de la Requte Expressions dans le SELECT


!On peut changer le nom des attributs avec beer manf !Toute expression calcule partir des
AS <nouveau nom> Bud Anheuser-Busch attributs peut apparatre aprs SELECT.
!Exemple avec Beers(name, manf): Bud Lite Anheuser-Busch !Exemple avec Sells(bar, beer, price):
SELECT name AS beer, manf Michelob Anheuser-Busch SELECT bar, beer,
FROM Beers price * 120 AS priceInYen
WHERE manf = Anheuser-Busch FROM Sells;

13 14 15

Rsultat de la Requte Autre Exemple: Constantes Rsultat de la Requte


bar beer priceInYen !Exemple avec Likes(drinker, beer): drinker whoLikesBud
Joes Bud 300 Sally likes Bud
Sues Miller 360 SELECT drinker, Fred likes Bud
likes Bud AS whoLikesBud
FROM Likes
WHERE beer = Bud;

16 17 18
Conditions composes dans le
Quelques Remarques
Le contenu du champ WHERE WHERE
!Avec Sells(bar, beer, price), trouver le prix !Deux apostrophes pour reprsenter une
du Joes Bar pour Bud: apostrophe dans une chane entre
apostrophes
SELECT price !Dans le WHERE on peut utiliser AND,
Conditions composes OR, NOT, et des parenthses.
FROM SELLS
Expressions rgulires !SQL ne distingue pas majuscules et
WHERE bar = Joes Bar AND
minuscules --- sauf entre apostrophes
beer = Bud;
19 20 21

Expressions rgulires Exemple


NULL et UNKNOWN
!Le WHERE peut contenir des conditions !avec Drinkers(name, addr, phone) trouver
comparant une chane une expression ceux dont le tl commence par 0556:
rgulire
!Forme gnrale: SELECT name
<Attribut> LIKE <expr. rg.> La (non) valeur NULL
FROM Drinkers
<Attribut> NOT LIKE <expr. rg.> Logique trivalue
WHERE phone LIKE 0556______;
!Expr. Rg. % = chane quelconque;
_ = caractre quelconque
22 23 24

Logique trivalue
La (non) valeur NULL Comparaison avec NULL
AND TRUE UNKNOWN FALSE
! les n-uplets des relations de SQL peuvent TRUE TRUE UNKNOWN FALSE
!Logique trivalue:
avoir des composantes indfinies: TRUE, FALSE, UNKNOWN. UNKNOWN UNKNOWN UNKNOWN FALSE
cest le rle de NULL
!Comparaison entre une valeur et NULL, FALSE FALSE FALSE FALSE
! Le sens dpend du contexte.
Deux cas courants: donne UNKNOWN.
!Un n-uplet est slectionn si le WHERE OR TRUE UNKNOWN FALSE
" Valeur inconnue Missing value : personne dont on
na pas ladresse donne TRUE (et pas FALSE ni UNKNOWN). TRUE TRUE TRUE TRUE
" Inapplicable : emploi pour un enfant UNKNOWN TRUE UNKNOWN UNKNOWN
FALSE TRUE UNKNOWN FALSE
25 26 27
Exemple Surprenant Requtes plusieurs Requtes plusieurs relations
relations
!En utilisant la relation Sells: !Certaines requtes utilisent plusieurs
bar beer price relations (jointure)
Joes Bar Bud NULL !On peut mettre plusieurs relations dans
SELECT bar le SELECT.
Sens
FROM Sells !Il faut distinguer les attributs de mme
Mthode dvaluation nom appartenant des relations
WHERE price < 2.00 OR price >= 2.00; diffrentes: <relation>.<attribute>
UNKNOWN UNKNOWN

UNKNOWN 28 29 30

Exemple Sens des requtes Smantique Oprationnnelle


! Avec Likes(drinker, beer) et Frequents(drinker,
! Ressemble au cas unaire: !Une variable de n-uplet-variable par
bar), trouver les beers que Likes au moins un des
clients du Joes Bar. 1. Faire le produit des relations du FROM relation du FROM
2. Slectionner les n-uplets qui satisfont le " Chacune de ces variables parcourt la table
WHERE de la relation qui lui correspond.
SELECT beer
FROM Likes, Frequents 3. Projeter sur les attributs du SELECT. !Si les valeurs des variables de n-uplets
WHERE bar = Joes Bar AND satisfont la condition du WHERE On
Frequents.drinker = Likes.drinker; garde les attributs demands par le
SELECT
31 32 33

Exemple
Example Variables explicites
! Avec Beers(name, manf), on peut trouver les
drinker bar drinker beer !Parfois, plusieurs copies de la mme Beers dont le manf est le mme.
tv1 tv2 relation. " Pas de couples comme (Bud, Bud).
" Pas deux fois les mmes avec un ordre diffrent si
Sally Bud !On distingue les variables (Bud, Miller) alors pas (Miller, Bud).
Sally Joes
correspondant aux diffrentes copies de SELECT b1.name, b2.name
Terster
la relation en leur donnant des noms FROM Beers b1, Beers b2
=Joe Likes diffrents dans le FROM WHERE b1.manf = b2.manf AND
Frequents
sortie !On peut toujours le faire mme si cela b1.name < b2.name;
tester lgalit
nest pas ncessaire.
34 35 36
Sous requtes produisant
Sous-requtes
Sous-requtes UN n-uplet
! Une expression parenthse !On peut utiliser cette sous requte
SELECT-FROM-WHERE est une sous requte comme valeur
Elle peut tre utilise
" La clef peut garantir quil ny a quune
dans le FROM et le WHERE
valeur.
Sous-requtes une solution ! Exemple: on peut interroger une requte
" On obtient une erreur sil ny a pas de n-
comme si elle tait une relation prdfinie en
IN uplet dans la requte ou sil y en a
la plaant dans le FROM
plusieurs.
ALL " Il vaut mieux lui donner un nom comme on la fait
prcdemment.
ANY
37 38 39

Exemple Requte + Sous-requte Loprateur IN


! Avec Sells(bar, beer, price), trouver les SELECT bar !<n-uplet> IN <relation> vaut TRUE
bars qui Sells Miller au pris o Joes Bar ssi<n-uplet>appartient <relation>
FROM Sells
Sells Bud.
WHERE beer = Miller AND !<n-uplet> NOT IN <relation>
! Deux requtes: le contraire
1. Trouver le prix de Bud chez Joes bar price = (SELECT price
FROM Sells !IN: dans le WHERE
2. Trouver les bars qui vendent Miller ce
mme prix.
Le prix de Bud
chez Joes bar WHERE bar = Joes Bar !<relation> est en gnral une sous-
requte
AND beer = Bud);
40 41 42

Example Loprateur EXISTS Exemple de requte avec EXISTS


Rgle de porte: manf
! Avec Beers(name, manf) et Likes(drinker, beer), !EXISTS( <relation> ) vaut TRUE ssi SELECT name renvoie la relation
la plus proche
trouver le nom et le fabriquant de toute Beers ssi <relation> is nest pas vide FROM Beers b1 dans limprication
que Fred. ayant cet attribut
!NOT EXITS (<relation> ) : le contraire WHERE NOT EXISTS( (ici, Beers juste au dessus)
SELECT *
FROM Beers !EXISTS apparat dans le WHERE Ens. SELECT *
des Beers Symbole
WHERE name IN (SELECT beer !Example: avec Beers(name, manf), diffrentes FROM Beers Diffrent

beers FROM Likes trouver les bires qui sont les seules avec
WHERE manf = b1.manf AND
en SQL
le mme
que Fred Likes
WHERE drinker = Fred); produites par leur manf manf que
b1 name <> b1.name);
43 44 45
Loprateur ANY Loprateur ALL Exemple
! x = ANY( <relation> ) vaut TRUE ssi !De mme x <> ALL( <relation> ) !Avec Sells(bar, beer, price), trouver la
au moins un n-uplet de <relation> est x vaut TRUE si x diffre de tout n-uplet beer(s) qui est vendue le plus cher.
de <relation>
!Mme chose avec autres comparaisons: SELECT beer
! <> peut tre remlacer par tout Le 1er price
" Exemple: x >= ANY( <relation> ) FROM Sells
oprateur de. est plus grand
signifie que x est plus grand que lun des que tous les
!Example: x >= ALL( <relation> ) WHERE price >= ALL( price de Sells
lments de <relation>
Prsuppose que le n-uplet x na quun x est plus grand que tous les lments SELECT price
composant/attribut de relation Prsuppose que <relation> FROM Sells);
na quun attribut.
46 47 48

Oprations ensemblistes
Union, Intersection, et Diffrence Exemple
Ensembles et
multi-ensembles en SQL !Union, intersection, et diffrence: ! Avec les relations Likes(drinker, beer),
Sells(bar, beer, price) et
Frequents(drinker, bar),
" ( sous-requte ) UNION ( sous-requte ) trouver les drinkers et beers tels que:
" ( sous-requte ) INTERSECT ( sous-requte ) 1. drinker Likes beer, et
2. drinker Frequents au moins un bar qui Sells
" ( sous-requte ) EXCEPT ( sous-requte )
beer

49 50 51

SQL: ensembles
Solution Raisons: Efficacit
drinker Frequents ou multi-ensembles
bar qui Sells beer
(SELECT * FROM Likes) !SELECT-FROM-WHERE !Multi-ensembles mieux pour
INTERSECT par dfaut: multi-ensembles projection (attributs du SELECT) et
(SELECT drinker, beer !UNION INTERSECTION EXCEPT: slection (condition du WHERE)
par dfaut: ensembles car on procde n-uplet par n-uplet
FROM Sells, Frequents
" Les doublons sont limins !Pour intersection et diffrence,
WHERE Frequents.bar = Sells.bar il est plus eficace de trier dabord
); et ensuite autant liminer les doublons
(cot ridicule aprs le tri)
52 53 54
Elimination Contrle des Doublons Exemple: DISTINCT Exemple: ALL
!Pour imposer davoir un ensemble !Liste des prix partir de ! Avec les relations Frequents(drinker, bar) et
SELECT DISTINCT . . . Sells(bar, beer, price): Likes(drinker, beer):
(SELECT drinker FROM Frequents)
!Pour avoir les oprations SELECT DISTINCT price
EXCEPT ALL
multi-ensemblistes ajouter ALL aprs FROM Sells;
(SELECT drinker FROM Likes);
lopration: !Sans DISTINCT un prix p figurerait autant de
. . . UNION ALL . . . ! Drinkers qui frquentent plus de bars quils
fois quil y a de couples bar, beer avec le prix ne Likes de beers -- parraissent autant de
de vente p fois quil y a de diffrences entre ces deux
nombres.
55 56 57

Jointures Produits et Jointures Naturelles


Jointures
!En SQL beaucoup doprateurs de ! Jointure naturelle:
jointures R NATURAL JOIN S;
Ils fonctionnent avec des multi- ! Produit:
ensembles. R CROSS JOIN S;
Naturelle !Ces expressions peuvent sutiliser ! Exemple:
Conditionnelle comme requtes ou dans une requte Likes NATURAL JOIN Sells;
Externe (dans le FROM ou le WHERE) ! Les relations peuvent tre
des requtes entre parenthses
58 59 60

Jointure Conditionnelle Jointures externes


Oprateurs dagrgation
! R JOIN S ON <condition> est une jointure ! R OUTER JOIN S est le noyau dune jointure
conditionnnelle externe, qui peut tre modifi par:
1. Option: NATURAL devant OUTER.
! Exemple avec Drinkers(name, addr) et
2. Option: ON <condition> aprs JOIN.
Frequents(drinker, bar):
3. Option: LEFT, RIGHT, ou FULL aprs OUTER.
Drinkers JOIN Frequents ON ! LEFT = accepte les n-uplets de R sans n-uplet de S Oprations
qui corresponde (en utilisant NULL)
name = drinker; ! RIGHT = accepte les n-uplets de S sans n-uplets de R Effet de NULL
donne tous les (n, a, d, b) tels drinker de nom n qui leur corresponde (en utilisant NULL)
Regroupement GROUP BY
! FULL = dfaut accepte les n-uplets de R et S
habite ladresse a et frequents le bar b. mme sans n-uplet correspondant dans lautre relation.
Conditionnelles HAVING
61 62 63
Elimination des Doublons
Aggrgations Exemple: Aggrgation
dans les Aggrgations
!SUM, AVG, COUNT, MIN, et MAX !Avec Sells(bar, beer, price), !DISTINCT dans laggrgation supprime
sutilisent sur une colonne du SELECT trouver la moyenne du prix de Bud les doublons avant laggrgation.
!COUNT(*) compte les n-uplets de la !Exemple: trouver les diffrents prices
relation SELECT AVG(price) de Bud:
FROM Sells SELECT COUNT(DISTINCT
WHERE beer = Bud; price)
FROM Sells
WHERE beer = Bud;
64 65 66

NULL: ignor dans les


Exemple: leffet de NULL Regroupement
aggrgation
!NULL nintervient pas dans une somme SELECT count(*) Le nombre de bars !SELECT-FROM-WHERE
une moyenne, etc. et nest jamais un FROM Sells qui Sells Bud. peut tre suivi de GROUP BY
minimum ou un maximum. WHERE beer = Bud; et dune liste dattributs
!Mais sil ny a que des NULL dans une !Le resultat du SELECT-FROM-WHERE
colonne, son aggrgation fait NULL SELECT count(price) est regroup par valeur des attributs
Le nombre de bars
FROM Sells qui Sells Bud un du GROUPING Laggrgation est
WHERE beer = Bud;
prix connu.
applique chaque groupe.

67 68 69

Restriction sur le contenu de


Exemple: Group by Exemple: Group By
SELECT avec lAggrgation
! Avec Sells(bar, beer, price) et
!Avec Sells(bar, beer, price), Frequents(drinker, bar), ! Si on utilise un oprateur
trouver le prix moyen par de chaque trouver pour chaque drinker daggrgation, tout lement du
beer : le prix moyen de Bud dans les bar quil SELECT est soit:
frquente : Compute
SELECT beer, AVG(price) drinker-bar- 1. Aggrg par un oprateur daggrgation,
SELECT drinker, AVG(price) price of Bud
FROM Sells 2. Un attribut du GROUP BY
FROM Frequents, Sells tuples first,
then group
GROUP BY beer; WHERE beer = Bud AND by drinker.
Frequents.bar = Sells.bar
GROUP BY drinker;
70 71 72
Exemple de requte illicite HAVING Conditions sur HAVING
!Les bars vendant Bud le moins cher: !HAVING <condition> peut suivre un ! Porte sur les relations du FROM.
SELECT bar, MIN(price) GROUP BY. ! Renvoie aux attributs de ces relations,
FROM Sells !Effet: il supprime les groupes qui ne qui ont un sens pour un Groupe:
WHERE beer = Bud; satisfont pas la condition. 1. Attribut du GROUP BY
2. Attribut aggrg
Requte illicite!
!Bar pas aggrg,
et pas dans le GROUP BY non plus
73 74 75

Exemple: HAVING Solution


Groupes de beers
Modification des tables
!Avec Sells(bar, beer, price) et SELECT beer, AVG(price) avec au moins
trois bars non NULL
Beers(name, manf), FROM Sells qui la vende
ou leur manf est Pete
trouver le prix moyen des beers GROUP BY beer
vendues dans au moins trois bars HAVING COUNT(bar) >= 3 OR
ou dont le manf est Pete beer IN (SELECT name
Insertion
manf: Pete
Suppression
FROM Beers
WHERE manf = Petes); Mise jour

76 77 78

Modifications de BD Insertion Attributs prciss par INSERT


! A modification command does not return !Insertion dun n-uplet: ! On ajoute la relation les attributs.
a result as a query does, but it changes INSERT INTO <relation> ! Pourquoi:
the database in some way. VALUES ( <list of values> ); 1. On a oubli lordre des attributs.
! Trois types de modifications: !Exemple: ajouter Likes(drinker, beer) 2. On na pas toutes les valeurs du n-uplets
1. Insert insertion de n-uplets. On veut que le systme mette NULL ou la
que Sally likes Bud.
2. Delete destruction de n-uplets valeur par dfaut.
INSERT INTO Likes
3. Update modification des valeurs des n-uplets
VALUES(Sally, Bud);
79 80 81
Exemple avec attributs spcifis Exemple: insertion
Insertion de plusieurs n-uplets
dune sous-requte
!Autre manire dajouter Sally likes Bud !On peut insrer le rsulat dune requte !avec Frequents(drinker, bar), ajouter
Likes(drinker, beer): dans une relation: une nouvelle relation PotBuddies(name)
INSERT INTO <relation> tous les amis potentiels de Sally, ceux
INSERT INTO Likes(beer, drinker) ( <sous-requte> ); qui frquente un bar que frquente
aussi Sally
VALUES(Bud, Sally);

82 83 84

Lautre Paires de n-uplets


drinker
Solution dont les 2 drinkers
frquentent
DELETE Exemple: DELETE
un mme bar
Lun est Sally
INSERT INTO PotBuddies et lautre non. !Destruction des n-uplets satisfaisant !Suppressin de (Sally,Bud) de
(SELECT d2.drinker une condition: Likes(drinker, beer) :
FROM Frequents d1, Frequents d2 DELETE FROM <relation> DELETE FROM Likes
WHERE d1.drinker = Sally AND WHERE <condition>; WHERE drinker = Sally AND
d2.drinker <> Sally AND beer = Bud;
d1.bar = d2.bar
);

85 86 87

Exemple: suppresion de tous Exemple: Destruction de Fonctionnement de la


les n-uplets plusieurs n-uplets suppression 1
!Vider Likes: !Suppresions dans Beers(name, manf) !Supposition: Anheuser-Busch fabrique
les beers dont le manf fabrique une seulement Bud et Bud Lite.
autre beer.
DELETE FROM Likes; Beers with the same !On trouve b = Bud en premier.
DELETE FROM Beers b manufacturer and
a different name !La sous-requte nest pas vide, cause
WHERE EXISTS ( from the name of
!WHERE pas ncessaire. the beer represented de Bud Lite on dtruit Bud.
SELECT name FROM Beers by tuple b.
!Quand b est le n-uplet pour Bud Lite,
WHERE manf = b.manf AND
le dtruit-on aussi?
name <> b.name);
88 89 90
Fonctionnement de la
UPDATE mise jour Exemple: UPDATE
suppression 2
! On dtruit Bud Lite aussi !Pour changer certains attributs de !Changement du tlphone de Fred
! Pourquoi? Suppression en 2 tapes: certains n-uplets: qui devient 555-1212:
1. On marque dans la relation originale tous UPDATE <relation> UPDATE Drinkers
les n-uplets qui satisfont la condition du SET <listes dinstanciations d attributs> SET phone = 555-1212
2. On supprime les n-uplets marqus.
WHERE <condition sur le n-uplet>; WHERE name = Fred;

91 92 93

Exemple: Update global Dfinition dun Schma Dfinition dun Schma de BD


Relationnel
!Ramener 4! le prix de beer sil est !Dclaration des relations (tables) de
plus lev: la BD
UPDATE Sells !On peut dclarer beaucoup dautres
SET price = 4.00 choses dans le schma --- on verra plus
Cration
WHERE price > 4.00; Types en SQL tard.
Dclaration des clefs
Modification du schma

94 95 96

Dclarer une Relation Elts dune Dclaration dune Table Exemple: CREATE TABLE
!Le plus simple: !Paire attribut:Types CREATE TABLE Sells (
CREATE TABLE <nom> ( !Types les plus courants: bar CHAR(20),
<liste dlments> " INT ou INTEGER (synonymes). beer VARCHAR(20),
); " REAL ou FLOAT (synonymes). price REAL
" CHAR(n ) = chane de n caractres.
!On peut supprimer une table: );
" VARCHAR(n ) =chane de moins de n
DROP TABLE <nom>; caractres.

97 98 99
Dates et Heures Heures Dclaration des Clefs
!Un attribut ou une liste dattributs peut
!DATE et TIME sont des types SQL. !Forme gnrale:
tre dclar PRIMARY KEY ou UNIQUE.
!La forme dune date est: TIME hh:mm:ss
!Cela signifie que ce(s) attribut(s)
DATE aaaa-mm-jj ventuellement, dcimales en dessous de dtermine les autres.
" Exemple: DATE 2002-09-30 pour 30 la seconde.
Septembre 2002.
!On verra dautres distinctions plus loin.
" Example: TIME 15:30:02.5 =deux
seconde et demi aprs 15 heures trente

100 101 102

Dclaration des clefs un attribut Clefs Multi-Attributs Exemple: Clef Multi-Attributs


!Ecrire PRIMARY KEY ou UNIQUE aprs le !Dclaration qui suit celle des attributs ! bar et beer est la clef de Sells:
type dans la dclaration de lattribut dans CREATE TABLE CREATE TABLE Sells (
!Exemple: !Peut sutiliser pour un seul attribut bar CHAR(20),
aussi. beer VARCHAR(20),
CREATE TABLE Beers (
price REAL,
name CHAR(20) UNIQUE, !Cette forme est ncessaire si la clef
comporte plusieurs attributs PRIMARY KEY (bar, beer)
manf CHAR(20) );
);
103 104 105

Autres dclaration pour les


PRIMARY KEY ou UNIQUE ? Distinctions Obligatoires
Attributs
!Le standard SQL standard ne prcise ! SQL demande que
pas la distinction entre PRIMARY KEY et 1. Une seule PRIMARY KEY pour une 1. NOT NULL
UNIQUE. relation, mais plusieurs attributs UNIQUE. attribut qui ne vaut jamais NULL.
" Par exemple le SGBD peut crer un index 2. Un attribut dune PRIMARY KEY ne peut 2. DEFAULT <value>prcise la valeur par
pour PRIMARY KEY et pas pour UNIQUE. jamais valoir NULL. Par contre un dfaut
attribut UNIQUE peut valoir NULL et
mme pour plusieurs n-uplets.

106 107 108


Exemple: Valeurs par Dfaut Valeurs par dfaut -- 1 Valeurs par dfaut -- 2
CREATE TABLE Drinkers ( !Sally fait partie de drinker, mais on !Quel n-uplet dans Drinkers?
name CHAR(30) PRIMARY KEY, ignore son adresse et tlphone.
addr CHAR(50) !INSERT avec une liste dattributs name addr phone
DEFAULT 123 Sesame St., incomplte fonctionne: Sally 123 Sesame St NULL
INSERT INTO Drinkers(name)
phone CHAR(16)
VALUES(Sally);
); !SI tlphone NOT NULL,
linsertion aurait t refuse
109 110 111

Ajout dAttributs Suppressions dAttributs Suppressions dAttributs


!Ajouter un attribut (une colonne): !Suppression dun attribut dans une table: !Suppression dun attribut dans une table:
ALTER TABLE <name> ADD ALTER TABLE <name> ALTER TABLE <name>
<attribute declaration>; DROP <attribute>; DROP <attribute>;
!Exemple: !Exemple: suppression de la license: !Exemple: suppression de la license:
ALTER TABLE Bars ADD ALTER TABLE Bars DROP license; ALTER TABLE Bars DROP license;
phone CHAR(16)DEFAULT unlisted;

112 113 114

Vues Exemple: Dfinition dune vue


VUES
! Vue: table virtuelle dfinie partir des ! CanDrink(drinker, beer) est une vue avec les
autres tables et vues couples drinker-beer tel que drinker frquente
au moins un bar qui vend beer:
!Dclaration:
(tables aux possibilits restreintes) CREATE VIEW <name> AS <query>; CREATE VIEW CanDrink AS
!Les autres tables sont dites tables de SELECT drinker, beer
base. FROM Frequents, Sells
WHERE Frequents.bar = Sells.bar;
115 116 117
Comment la vue est-elle
Exemple: accs une vue Exemple: Expansion dune Vue
utilise?
!Une vue sinterroge comme une table. !Le SGBD interprte la requte comme si PROJbeer

" On peut modifier une vue si cela a un sens la vue tait une table de base. Il en fait SELECTdrinker=Sally
pour les tables sous-jacentes. une formule de lalgbre relationnelle
!Exemple: dans laquelle intervient la vue V. CanDrink
PROJdrinker, beer
SELECT beer FROM CanDrink !Cette table V est remplace par sa
WHERE drinker = Sally; dfinition en algbre relationnelle. JOIN

Frequents Sells

118 119 120

Optimisation du SGBD Exemple: Optimisation


! La requte obtenue par remplacement PROJbeer
de la vue par sa dfinition nest pas Elimine
JOIN
optimale. la plupart
des n-uplets
! Optimisations: avant la jointure
coteuse.
SELECTdrinker=Sally Sells
1. Faire descendre les slections prs des
tables de base Frequents
2. Eliminer les projections inutiles.

121 122

You might also like