Professional Documents
Culture Documents
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
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
13 14 15
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
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
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
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
67 68 69
76 77 78
82 83 84
85 86 87
91 92 93
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
" 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
121 122