Vous êtes sur la page 1sur 14

SQLSQL

Transparents (Stanford de Jeffrey University) ULLMAN Traduits/adaptés (Université Bordeaux par C. Retoré 1) 1
Transparents (Stanford de Jeffrey University) ULLMAN
Traduits/adaptés (Université Bordeaux par C. Retoré 1)
1
Select-From-Where Structure générale d’une requête: SELECT attributs recherchés WHERE FROM une condition ou
Select-From-Where
Structure générale d’une requête:
SELECT attributs recherchés
WHERE FROM une condition ou plusieurs sur les tables n-uplets des tables
4
Resultat d’une requête name ‘Bud’ ‘Michelob’ ‘Bud Lite’ Et Relation Anheuser-Busch, les 1-uplest à un
Resultat d’une requête
name
‘Bud’
‘Michelob’ ‘Bud Lite’
Et Relation Anheuser-Busch, les 1-uplest à un attribut: des comme beers name fabriquées Bud. par
7
Pourquoi SQL? ! évite SQL données langage de spécifier comme de haut il la faudrait
Pourquoi SQL?
! évite SQL données langage de spécifier comme de haut il la faudrait manipulation niveau, le faire des
! par SQL très exemple efficacement fonctionne en car C++ optimisées les requêtes sont
pour des réponses rapides.
2
Exemple pour tout ce cours ! Requêtes SQL sur le schéma suivant Beers(name, manf) Likes(drinker,
Exemple pour tout ce cours
! Requêtes SQL sur le schéma suivant
Beers(name, manf)
Likes(drinker, Drinkers(name, Bars(name, addr, beer) addr, license) phone)
Frequents(drinker, Sells(bar, beer, price) bar)
Les attributs d’une clef sont soulignés
5
Sens d’une requête sur une relation ! ! Considérer Appliquer la la selection relation dans
Sens d’une requête sur une relation
! ! Considérer Appliquer la la selection relation dans du WHERE le FROM
! Appliquer
la projection du SELECT
8

RequêtesRequêtes àà uneune tabletable

SELECT FROM WHERE 3
SELECT FROM
WHERE
3
Exemple ! En beers SELECT utilisant sont fabriquées Beers(name, name par manf), Anheuser-Busch? quelles FROM
Exemple
! En beers SELECT utilisant sont fabriquées Beers(name, name par manf), Anheuser-Busch? quelles
FROM WHERE Beers manf = ‘Anheuser-Busch’;
6
Sémantique Opérationelle ! Pour implanter l’algorithme ! Une variable de n-uplet parcourt la ! Tester
Sémantique Opérationelle
! Pour implanter l’algorithme
! Une variable de n-uplet parcourt la
! Tester table du si FROM. le n-uplet “courrant” satisfait
! SI expressions la valeurs condition c’est du le cas, n-uplet du du calculer WHERE. SELECT courant. les avec attributs les ou
9

ContenuContenu dudu champchamp SELECTSELECT

* Renommage Constantes 10
*
Renommage Constantes
10
Renommage des Attributs ! On “AS peut <nouveau changer nom>” le nom des attributs avec
Renommage des Attributs
! On “AS peut <nouveau changer nom>” le nom des attributs avec
! Exemple SELECT avec name Beers(name, AS beer, manf): manf
FROM WHERE Beers manf = ‘Anheuser-Busch’
13
Résultat de la Requête bar beer priceInYen Joe’s Bud 300 Sue’s Miller 360 … …
Résultat de la Requête
bar
beer
priceInYen
Joe’s
Bud
300
Sue’s
Miller
360
… …
16
* Dans le SELECT ! Avec une relation dans le FROM clause, ! signifie *
* Dans le SELECT
! Avec une relation dans le FROM clause,
! signifie * Exemple dans le tous avec SELECT les Beers(name, attributs de manf): la relation
SELECT FROM WHERE Beers manf * = ‘Anheuser-Busch’;
11
Résultat de la Requête beer manf ‘Bud’ ‘Bud ‘Michelob’ Lite’ ‘Anheuser-Busch’ ‘Anheuser-Busch’
Résultat de la Requête
beer
manf
‘Bud’
‘Bud ‘Michelob’ Lite’
‘Anheuser-Busch’ ‘Anheuser-Busch’ ‘Anheuser-Busch’
14
Autre Exemple: Constantes ! Exemple avec Likes(drinker, beer): SELECT FROM Likes ‘likes drinker, Bud’ AS
Autre Exemple: Constantes
! Exemple avec Likes(drinker, beer):
SELECT FROM Likes ‘likes drinker, Bud’ AS whoLikesBud
WHERE beer = ‘Bud’;
17
Résultat de la requête: name manf ‘Bud’ ‘Michelob’ ‘Bud Lite’ ‘Anheuser-Busch’ ‘Anheuser-Busch’
Résultat de la requête:
name
manf
‘Bud’
‘Michelob’ ‘Bud Lite’
‘Anheuser-Busch’ ‘Anheuser-Busch’ ‘Anheuser-Busch’
Ici le résultat a tous les attribut de Beers.
12
Expressions dans le SELECT ! ! Toute attributs Exemple expression peut avec apparaître Sells(bar, calculée
Expressions dans le SELECT
! ! Toute attributs Exemple expression peut avec apparaître Sells(bar, calculée beer, après à partir price): SELECT. des
SELECT FROM Sells; price bar, beer, * 120 AS priceInYen
15
Résultat de la Requête drinker whoLikesBud ‘Sally’ ‘Fred’ ‘likes ‘likes Bud’ Bud’ … … 18
Résultat de la Requête
drinker
whoLikesBud
‘Sally’ ‘Fred’
‘likes ‘likes Bud’ Bud’
18

LeLe contenucontenu dudu champchamp WHEREWHERE

Conditions Expressions composées régulières 19
Conditions Expressions composées régulières
19
Expressions régulières ! Le comparant WHERE peut une chaîne contenir à une des expression conditions
Expressions régulières
! Le comparant WHERE peut une chaîne contenir à une des expression conditions
! ! régulière Forme <Attribut> <Attribut> Expr. _ = caractère Rég. générale: LIKE NOT % quelconque = LIKE <expr. chaîne <expr. rég.> quelconque; rég.>
22
La (non) valeur NULL ! avoir les n-uplets des composantes des relations indéfinies: de SQL
La (non) valeur NULL
! avoir les n-uplets des composantes des relations indéfinies: de SQL peuvent
! c’est Le Deux sens le cas rôle dépend courants: de NULL du contexte.
" Valeur inconnue Missing value : personne dont on
" Inapplicable n’a pas l’adresse : emploi pour un enfant
25
Conditions composées WHERE dans le ! Avec du Joe’s Sells(bar, Bar pour beer, Bud: price),
Conditions composées WHERE dans le
! Avec du Joe’s Sells(bar, Bar pour beer, Bud: price), trouver le prix
SELECT FROM SELLS price
WHERE beer bar = = ‘Bud’; ‘Joe’’s Bar’ AND
20
Exemple ceux Drinkers(name, dont le tél commence addr, phone) par 0556: trouver SELECT FROM WHERE
Exemple
ceux Drinkers(name, dont le tél commence addr, phone) par 0556: trouver
SELECT FROM WHERE Drinkers phone name LIKE ‘0556
! avec
’;
23
Comparaison avec NULL ! Logique trivaluée: ! Comparaison TRUE, FALSE, entre UNKNOWN. une valeur et
Comparaison avec NULL
! Logique trivaluée:
! Comparaison TRUE, FALSE, entre UNKNOWN. une valeur et NULL,
! Un donne donne n-uplet TRUE UNKNOWN. est (et sélectionné pas FALSE si ni le UNKNOWN). WHERE
26
Quelques Remarques ! Deux apostrophe apostrophes dans une pour chaîne représenter entre une ! apostrophes
Quelques Remarques
! Deux apostrophe apostrophes dans une pour chaîne représenter entre une
! apostrophes Dans OR, NOT, le WHERE et des on parenthèses. peut utiliser AND,
! SQL minuscules ne distingue --- sauf pas entre majuscules apostrophes et
21

NULLNULL etet UNKNOWNUNKNOWN

La Logique (non) valeur trivaluée NULL 24
La Logique (non) valeur trivaluée NULL
24
Logique trivaluée AND TRUE UNKNOWN FALSE TRUE TRUE UNKNOWN FALSE UNKNOWN UNKNOWN UNKNOWN FALSE FALSE
Logique trivaluée
AND
TRUE
UNKNOWN
FALSE
TRUE
TRUE
UNKNOWN
FALSE
UNKNOWN
UNKNOWN
UNKNOWN
FALSE
FALSE
FALSE
FALSE
FALSE
OR
TRUE
UNKNOWN
FALSE
TRUE
TRUE
TRUE
TRUE
UNKNOWN
TRUE
UNKNOWN
UNKNOWN
FALSE
TRUE
UNKNOWN
FALSE
27
Exemple Surprenant ! En utilisant la relation Sells: bar beer price Joe’s Bar Bud NULL
Exemple Surprenant
! En utilisant la relation Sells:
bar
beer
price
Joe’s Bar
Bud
NULL
SELECT bar
WHERE FROM Sells price < 2.00 OR price >= 2.00;
UNKNOWN
UNKNOWN
UNKNOWN
28
Exemple ! bar), Avec Likes(drinker, trouver les beers beer) que et Likes Frequents(drinker, au moins
Exemple
! bar), Avec Likes(drinker, trouver les beers beer) que et Likes Frequents(drinker, au moins un des
clients du Joe’s Bar.
SELECT FROM WHERE Frequents.drinker Likes, bar beer = Frequents ‘Joe’’s Bar’ = Likes.drinker; AND
31
Example drinker bar drinker beer tv1 tv2 Sally Bud Sally Joe’s =Joe Terster Likes Frequents
Example
drinker
bar
drinker
beer
tv1
tv2
Sally
Bud
Sally
Joe’s
=Joe Terster
Likes
Frequents
tester l’égalité
sortie
34

Requêtes Requêtes relations relations à à plusieurs plusieurs

Méthode Sens d’évaluation 29
Méthode Sens d’évaluation
29
Sens des requêtes ! Ressemble au cas unaire: 2. 1. Sélectionner WHERE Faire le produit
Sens des requêtes
! Ressemble au cas unaire:
2. 1. Sélectionner WHERE Faire le produit les des n-uplets relations qui satisfont du FROM le
3. Projeter sur les attributs du SELECT.
32
Variables explicites ! relation. Parfois, plusieurs copies de la même ! la correspondant On relation
Variables explicites
! relation. Parfois, plusieurs copies de la même
! la correspondant On relation distingue en les leur aux variables donnant différentes des copies noms de
! On n’est différents peut pas toujours nécessaire. dans le le FROM faire même si cela
35
Requêtes à plusieurs relations ! Certaines requêtes utilisent plusieurs ! On relations peut mettre (jointure)
Requêtes à plusieurs relations
! Certaines requêtes utilisent plusieurs
! On relations peut mettre (jointure) plusieurs relations dans
! Il nom le faut SELECT. appartenant distinguer les à des attributs relations de même
différentes: “<relation>.<attribute>”
30
Sémantique Opérationnnelle ! Une relation variable du FROM de n-uplet-variable par " Chacune de la
Sémantique Opérationnnelle
! Une relation variable du FROM de n-uplet-variable par
" Chacune de la relation de ces qui variables lui correspond. parcourt la table
! Si satisfont les valeurs la condition des variables du WHERE de n-uplets On
garde SELECT les attributs demandés par le
33
Exemple ! Avec Beers Beers(name, dont le manf manf), est le même. on peut trouver
Exemple
! Avec Beers Beers(name, dont le manf manf), est le même. on peut trouver les
" " Pas (Bud, Pas de deux Miller) couples fois alors les comme mêmes pas (Miller, (Bud, avec Bud). Bud). un ordre différent si
SELECT b1.name, b2.name
WHERE FROM b1.name Beers b1.manf < b1, b2.name; = Beers b2.manf b2 AND
36

Sous-requSous-requêtesêtes

Sous-requêtes IN à une solution ANY ALL 37
Sous-requêtes IN à une solution
ANY ALL
37
Exemple ! bars Avec qui Sells(bar, Sells Miller beer, au price), pris où trouver Joe’s
Exemple
! bars Avec qui Sells(bar, Sells Miller beer, au price), pris où trouver Joe’s les Bar
! Sells Deux Bud. requêtes:
2. 1. Trouver même Trouver prix. le les prix bars de qui Bud vendent chez Joe’s Miller bar à ce
40
Example ! Avec trouver Beers(name, le nom et le manf) fabriquant et Likes(drinker, de toute
Example
! Avec trouver Beers(name, le nom et le manf) fabriquant et Likes(drinker, de toute Beers beer),
que SELECT Fred. *
FROM Beers
WHERE name IN
que beers Fred Likes
(SELECT beer
FROM WHERE Likes drinker = ‘Fred’);
43
Sous-requêtes ! dans Elle SELECT-FROM-WHERE Une peut expression le FROM être utilisée et parenthésée le
Sous-requêtes
! dans Elle SELECT-FROM-WHERE Une peut expression le FROM être utilisée et parenthésée le WHERE est une sous requête
! comme la Exemple: plaçant si on elle dans peut était le FROM interroger une relation une prédéfinie requête en
" Il précédemment. vaut mieux lui donner un nom comme on l’a fait
38
Requête + Sous-requête SELECT bar WHERE FROM Sells beer = ‘Miller’ AND price = Le
Requête + Sous-requête
SELECT bar
WHERE FROM Sells beer = ‘Miller’ AND
price =
Le chez prix Joe’s de Bud bar
(SELECT price
WHERE FROM AND Sells beer bar = = ‘Bud’); ‘Joe’’s Bar’
41
L’opérateur EXISTS ! EXISTS( <relation> ) vaut TRUE ssi ! ! NOT EXISTS ssi <relation>
L’opérateur EXISTS
! EXISTS( <relation> ) vaut TRUE ssi
! ! NOT EXISTS ssi <relation> EXITS apparaît (<relation> is dans n’est le pas ) WHERE : vide le contraire
! Example: trouver produites les avec par bières leur Beers(name, qui manf sont les manf), seules
44
Sous requêtes UN n-uplet produisant ! On comme peut valeur utiliser cette sous requête "
Sous requêtes UN n-uplet produisant
! On comme peut valeur utiliser cette sous requête
" La clef peut garantir qu’il n’y a qu’une
" On uplet valeur. obtient dans la une requête erreur ou s’il s’il n’y y a en pas a de n-
plusieurs.
39
L’opérateur IN ! ! le <n-uplet> ssi<n-uplet>appartient <n-uplet> contraire IN NOT
L’opérateur IN
! ! le <n-uplet> ssi<n-uplet>appartient <n-uplet> contraire IN NOT <relation> IN <relation> à vaut <relation> TRUE
! ! <relation> requête IN: dans le est WHERE en général une sous-
42
Exemple de requête avec EXISTS SELECT name WHERE FROM Beers NOT b1 EXISTS( renvoie Règle
Exemple de requête avec EXISTS
SELECT name
WHERE FROM Beers NOT b1 EXISTS(
renvoie Règle de à portée: la relation manf
dans la plus l’imprication proche
(ici, ayant Beers cet attribut juste au dessus)
Ens.
différentes avec des Beers
le manf b1 même que
SELECT *
WHERE FROM name Beers manf <> = b1.name); b1.manf AND
Différent Symbole en SQL
45
L’opérateur ANY ! ! au x Même = moins ANY( chose un <relation> n-uplet avec
L’opérateur ANY
! ! au x Même = moins ANY( chose un <relation> n-uplet avec autres de ) vaut <relation> comparaisons: TRUE ssi est x
" signifie éléments Exemple: que de x >= x <relation> est ANY( plus <relation> grand que ) l’un des
Présuppose composant/attribut que le n-uplet x n’a qu’un
46

Opérations Opérations Ensembles Ensembles ensemblistes ensemblistes et et multi-ensembles multi-ensembles en en SQL SQL

49
49
Solution bar drinker qui Frequents Sells beer (SELECT INTERSECT * FROM Likes) (SELECT drinker, beer
Solution
bar drinker qui Frequents Sells beer
(SELECT INTERSECT * FROM Likes)
(SELECT drinker, beer
); FROM WHERE Sells, Frequents.bar Frequents = Sells.bar
52
L’opérateur ALL ! vaut De même TRUE x si <> x diffère ALL( <relation> de
L’opérateur ALL
! vaut De même TRUE x si <> x diffère ALL( <relation> de tout n-uplet )
! opérateur de <> <relation> peut être de. remlacer par tout
! x de n’a Example: est relation qu’un plus attribut. x grand Présuppose >= ALL( que <relation> tous que les <relation> éléments )
47
Union, Intersection, et Différence ! Union, intersection, et différence: " " " ( ( (
Union, Intersection, et Différence
! Union, intersection, et différence:
" " " ( ( ( sous-requête sous-requête sous-requête ) ) ) UNION EXCEPT INTERSECT ( ( sous-requête sous-requête ( sous-requête ) ) )
50
ou SQL: multi-ensembles ensembles ! SELECT-FROM-WHERE ! UNION par par défaut: défaut: INTERSECTION ensembles
ou SQL: multi-ensembles ensembles
! SELECT-FROM-WHERE
! UNION par par défaut: défaut: INTERSECTION ensembles multi-ensembles EXCEPT:
" Les doublons sont éliminés
53
Exemple ! Avec beer(s) Sells(bar, qui est vendue beer, price), le plus trouver cher. la
Exemple
! Avec beer(s) Sells(bar, qui est vendue beer, price), le plus trouver cher. la
SELECT FROM Sells beer
WHERE SELECT price price >= ALL(
FROM Sells);
Le 1er price
est plus grand
que tous les
price de Sells
48
Exemple ! Avec Sells(bar, les relations beer, price) Likes(drinker, et beer), Frequents(drinker, trouver les drinkers
Exemple
! Avec Sells(bar, les relations beer, price) Likes(drinker, et beer),
Frequents(drinker, trouver les drinkers bar), et beers tels que:
1. 2. drinker beer drinker Frequents Likes beer, au et moins un bar qui Sells
51
Raisons: Efficacité ! sélection projection Multi-ensembles (condition (attributs mieux du du WHERE) pour SELECT) et
Raisons: Efficacité
! sélection projection Multi-ensembles (condition (attributs mieux du du WHERE) pour SELECT) et
! Pour car on intersection procède n-uplet et différence, par n-uplet
et il (coût est ensuite plus ridicule eficace autant après éliminer de le trier tri) d’abord les doublons
54
Elimination Contrôlée des Doublons ! SELECT Pour imposer DISTINCT d’avoir un ensemble ! multi-ensemblistes
Elimination Contrôlée des Doublons
! SELECT Pour imposer DISTINCT d’avoir un ensemble
! multi-ensemblistes l’opération: Pour avoir les opérations ajouter ALL après
UNION ALL
55

JointuresJointures

Conditionnelle Naturelle Externe … 58
Conditionnelle Naturelle Externe
58
Jointure Conditionnelle ! R JOIN S ON <condition> est une jointure ! Exemple conditionnnelle avec
Jointure Conditionnelle
! R JOIN S ON <condition> est une jointure
! Exemple conditionnnelle avec Drinkers(name, addr) et
Frequents(drinker, Drinkers JOIN bar): Frequents ON
donne habite à tous l’adresse name les (n, = a a, drinker; et d, frequents b) tels drinker le bar de b. nom n
61
Exemple: DISTINCT ! Sells(bar, Liste FROM SELECT des prix Sells; beer, DISTINCT à partir price):
Exemple: DISTINCT
! Sells(bar, Liste FROM SELECT des prix Sells; beer, DISTINCT à partir price): de price
! fois Sans de vente qu’il DISTINCT y p a de couples un prix p bar, figurerait beer avec autant le prix de
56
Jointures ! En SQL beaucoup d’opérateurs de Ils jointures fonctionnent avec des multi- ! Ces
Jointures
! En SQL beaucoup d’opérateurs de
Ils jointures fonctionnent avec des multi-
! Ces comme ensembles. expressions requêtes peuvent ou dans s’utiliser une requête
(dans le FROM ou le WHERE)
59
Jointures externes ! R externe, OUTER qui JOIN peut S est être le modifié noyau
Jointures externes
! R externe, OUTER qui JOIN peut S est être le modifié noyau d’une par: jointure
1. Option: NATURAL devant OUTER.
3. 2. Option: Option: LEFT, ON <condition> RIGHT, ou après FULL JOIN. après OUTER.
! LEFT = accepte les n-uplets de R sans n-uplet de S
! RIGHT qui qui leur corresponde = corresponde accepte (en les utilisant (en n-uplets utilisant NULL) de S NULL) sans n-uplets de R
! FULL même = sans défaut n-uplet accepte correspondant les n-uplets dans de R l’autre et S relation.
62
Exemple: ALL ! Avec Likes(drinker, les relations beer): Frequents(drinker, bar) et (SELECT EXCEPT drinker ALL
Exemple: ALL
! Avec Likes(drinker, les relations beer): Frequents(drinker, bar) et
(SELECT EXCEPT drinker ALL FROM Frequents)
! Drinkers ne (SELECT Likes qui de fréquentent beers drinker -- parraissent plus FROM de Likes); bars autant qu’ils de
fois nombres. qu’il y a de différences entre ces deux
57
Produits et Jointures Naturelles ! Jointure naturelle: ! Produit: NATURAL JOIN S; R R CROSS
Produits et Jointures Naturelles
! Jointure naturelle:
! Produit: NATURAL JOIN S;
R
R CROSS JOIN S;
! Exemple: Likes NATURAL JOIN Sells;
! des Les relations requêtes entre peuvent parenthèses être
60

OpOpérateursérateurs dd’agrégation’agrégation

Effet Opérations de NULL Regroupement Conditionnelles GROUP HAVING BY 63
Effet Opérations de NULL
Regroupement Conditionnelles GROUP HAVING BY
63
Aggrégations ! ! s’utilisent SUM, COUNT(*) AVG, sur compte COUNT, une colonne les MIN, n-uplets
Aggrégations
! ! s’utilisent SUM, COUNT(*) AVG, sur compte COUNT, une colonne les MIN, n-uplets et du MAX SELECT de la
relation
64
NULL: aggrégation ignoré dans les ! minimum une NULL moyenne, n’intervient ou un etc. maximum.
NULL: aggrégation ignoré dans les
! minimum une NULL moyenne, n’intervient ou un etc. maximum. pas et dans n’est une jamais somme un
! Mais colonne, s’il n’y son a aggrégation que des NULL fait dans NULL une
67
Exemple: Group by ! trouver Avec beer : Sells(bar, le prix moyen beer, price), par
Exemple: Group by
! trouver Avec beer : Sells(bar, le prix moyen beer, price), par de chaque
SELECT FROM Sells beer, AVG(price)
GROUP BY beer;
70
Exemple: Aggrégation ! trouver Avec Sells(bar, la moyenne beer, du price), prix de ‘Bud’ SELECT
Exemple: Aggrégation
! trouver Avec Sells(bar, la moyenne beer, du price), prix de ‘Bud’
SELECT FROM Sells AVG(price)
WHERE beer = ‘Bud’;
65
Exemple: l’effet de NULL SELECT count(*) WHERE FROM Sells beer = ‘Bud’; Le qui nombre
Exemple: l’effet de NULL
SELECT count(*)
WHERE FROM Sells beer = ‘Bud’;
Le qui nombre Sells Bud. de bars
SELECT FROM Sells count(price)
WHERE beer = ‘Bud’;
qui Le prix nombre Sells connu. Bud de à bars un
68
Exemple: Group By ! Avec Sells(bar, beer, price) et le trouver fréquente Frequents(drinker, prix moyen
Exemple: Group By
! Avec Sells(bar, beer, price) et
le trouver fréquente Frequents(drinker, prix moyen pour : chaque de Bud bar), drinker dans les bar qu’il
SELECT FROM Frequents, drinker, AVG(price) Sells
WHERE Frequents.bar beer = ‘Bud’ = AND Sells.bar
Compute
drinker-bar-
tuples price then group of first, Bud
by drinker.
GROUP BY drinker;
71
Elimination dans les Aggrégations des Doublons ! DISTINCT dans l’aggrégation supprime ! Exemple: de les
Elimination dans les Aggrégations des Doublons
! DISTINCT dans l’aggrégation supprime
! Exemple: de les Bud: doublons trouver avant les l’aggrégation. différents prices
price) SELECT COUNT(DISTINCT
FROM WHERE Sells beer = ‘Bud’;
66
Regroupement ! SELECT-FROM-WHERE et peut d’une être liste suivi d’attributs de GROUP BY ! est
Regroupement
! SELECT-FROM-WHERE
et peut d’une être liste suivi d’attributs de GROUP BY
! est Le du resultat GROUPING regroupé du par SELECT-FROM-WHERE L’aggrégation valeur des attributs est
appliquée à chaque groupe.
69
Restriction SELECT avec sur l’Aggrégation le contenu de ! d’aggrégation, Si SELECT on utilise est
Restriction SELECT avec sur l’Aggrégation le contenu de
! d’aggrégation, Si SELECT on utilise est soit: un tout opérateur élement du
1. 2. Aggrégé Un attribut par du un GROUP opérateur BY d’aggrégation,
72
Exemple de requête illicite ! Les SELECT bars vendant bar, MIN(price) Bud le moins cher:
Exemple de requête illicite
! Les SELECT bars vendant bar, MIN(price) Bud le moins cher:
! Requête Bar FROM WHERE pas aggrégé, illicite! Sells beer = ‘Bud’;
et pas dans le GROUP BY non plus
73
Exemple: HAVING ! Avec Beers(name, Sells(bar, manf), beer, price) et trouver vendues ou dont le
Exemple: HAVING
! Avec Beers(name, Sells(bar, manf), beer, price) et
trouver vendues ou dont le le dans prix manf au moyen est moins Pete des trois beers bars
76
Modifications de BD ! result modification as a query command does, does but it not
Modifications de BD
! result modification as a query command does, does but it not changes return
A
a
! the Trois database types de in modifications: some way.
1. 2.
3. Insert Delete Update insertion destruction modification de de n-uplets. des n-uplets valeurs des n-uplets
79
HAVING ! HAVING <condition> peut suivre un ! Effet: satisfont GROUP il supprime BY. pas
HAVING
! HAVING <condition> peut suivre
un
! Effet: satisfont GROUP il supprime BY. pas la condition. les groupes qui ne
74
Solution SELECT FROM Sells beer, AVG(price) GROUP BY beer Groupes de beers trois avec bars
Solution
SELECT FROM Sells beer, AVG(price)
GROUP BY beer
Groupes de beers
trois avec bars au moins non NULL
ou qui leur la vende manf est Pete
HAVING beer IN COUNT(bar) >= 3 OR
WHERE FROM Beers manf = ‘Pete’’s’);
(SELECT name
manf: Pete
77
Insertion ! Insertion INSERT d’un INTO n-uplet: <relation> ! Exemple: que VALUES Sally likes ajouter
Insertion
! Insertion INSERT d’un INTO n-uplet: <relation>
! Exemple: que VALUES Sally likes ajouter ( <list Bud. à of Likes(drinker, values> ); beer)
INSERT VALUES(‘Sally’, INTO Likes ‘Bud’);
80
Conditions sur HAVING ! ! Renvoie qui Porte ont sur un aux les sens attributs
Conditions sur HAVING
! ! Renvoie qui Porte ont sur un aux les sens attributs relations pour un de du Groupe: ces FROM. relations,
1. 2. Attribut Attribut aggrégé du GROUP BY
75

ModificationModification desdes tablestables

Suppression Mise Insertion à jour 78
Suppression Mise Insertion à jour
78
Attributs précisés par INSERT ! ! On Pourquoi: ajoute à la relation les attributs. 2.
Attributs précisés par INSERT
! ! On Pourquoi: ajoute à la relation les attributs.
2. 1. On On On n’a veut a oublié pas que toutes l’ordre le système les des valeurs attributs. mette du NULL n-uplets ou la
valeur par défaut.
81
Exemple avec attributs spécifiés ! Autre Likes(drinker, manière beer): d’ajouter Sally likes Bud à INSERT
Exemple avec attributs spécifiés
! Autre Likes(drinker, manière beer): d’ajouter Sally likes Bud à
INSERT VALUES(‘Bud’, INTO Likes(beer, ‘Sally’); drinker)
82
Solution L’autre drinker INSERT INTO PotBuddies (SELECT d2.drinker dont fréquentent Paires les de 2 n-uplets
Solution
L’autre drinker
INSERT INTO PotBuddies
(SELECT d2.drinker
dont fréquentent Paires les de 2 n-uplets drinkers
un L’un et l’autre même est Sally non. bar
WHERE FROM Frequents d1.drinker d1, = Frequents ‘Sally’ AND d2
d2.drinker d1.bar = d2.bar <> ‘Sally’ AND
);
85
Exemple: les suppresion n-uplets de tous ! Vider Likes: DELETE FROM Likes; ! WHERE pas
Exemple: les suppresion n-uplets de tous
! Vider Likes:
DELETE FROM Likes;
! WHERE pas nécessaire.
88
Insertion de plusieurs n-uplets ! On dans peut une insérer relation: le résulat d’une requête
Insertion de plusieurs n-uplets
! On dans peut une insérer relation: le résulat d’une requête
INSERT ( <sous-requête> INTO <relation> );
83
DELETE ! Destruction une condition: des n-uplets satisfaisant DELETE WHERE <condition>; FROM <relation>
DELETE
! Destruction une condition: des n-uplets satisfaisant
DELETE WHERE <condition>; FROM <relation>
86
Exemple: plusieurs Destruction n-uplets de ! Suppresions les autre beers beer. don’t dans le manf
Exemple: plusieurs Destruction n-uplets de
! Suppresions les autre beers beer. don’t dans le manf Beers(name, fabrique manf) une
DELETE WHERE EXISTS FROM Beers ( b
Beers with the same
manufacturer and
a different name
the by from tuple beer the b. represented name of
WHERE SELECT name manf name <> b.name); = FROM b.manf Beers AND
89
d’une Exemple: sous-requête insertion ! avec une nouvelle Frequents(drinker, relation PotBuddies(name) bar), ajouter
d’une Exemple: sous-requête insertion
! avec une nouvelle Frequents(drinker, relation PotBuddies(name) bar), ajouter à
tous qui fréquente les amis potentiels un bar que de fréquente Sally, ceux
aussi Sally
84
Exemple: DELETE ! Suppressin Likes(drinker, de beer) (Sally,Bud) : de DELETE WHERE beer drinker FROM
Exemple: DELETE
! Suppressin Likes(drinker, de beer) (Sally,Bud) : de
DELETE WHERE beer drinker FROM = ‘Bud’; Likes = ‘Sally’ AND
87
Fonctionnement suppression 1 de la ! seulement Supposition: Bud Anheuser-Busch et Bud Lite. fabrique !
Fonctionnement suppression 1 de la
! seulement Supposition: Bud Anheuser-Busch et Bud Lite. fabrique
! ! La de On sous-requête Bud trouve Lite b on = détruit Bud n’est en pas Bud. premier. vide, à cause
! Quand le détruit-on b est aussi? le n-uplet pour Bud Lite,
90
Fonctionnement suppression 2 de la ! ! Pourquoi? On détruit Suppression Bud Lite aussi en
Fonctionnement suppression 2 de la
! ! Pourquoi? On détruit Suppression Bud Lite aussi en 2 étapes:
1. les On On n-uplets marque supprime dans qui les satisfont n-uplets la relation la marqués. condition originale tous du
2.
91
Exemple: Update global ! Ramener plus élevé: à 4 ! le prix de beer s’il
Exemple: Update global
! Ramener plus élevé: à 4 ! le prix de beer s’il est
UPDATE SET WHERE price price Sells = > 4.00 4.00;
94
Déclarer une Relation ! Le plus simple: CREATE <liste TABLE d’éléments> <nom> ( ! On
Déclarer une Relation
! Le plus simple:
CREATE <liste TABLE d’éléments> <nom> (
! On ); DROP peut supprimer TABLE <nom>; une table:
97
UPDATE mise à jour ! certains Pour changer n-uplets: certains attributs de SET WHERE UPDATE
UPDATE mise à jour
! certains Pour changer n-uplets: certains attributs de
SET WHERE UPDATE <listes <condition <relation> d’instanciations sur le n-uplet>; d’ attributs>
92

Définition Définition Relationnel Relationnel d’un d’un Schéma Schéma

Types Création en SQL Modification Déclaration des du schéma clefs 95
Types Création en SQL
Modification Déclaration des du schéma clefs
95
Elts d’une Déclaration d’une Table ! ! Types Paire attribut:Types les plus courants: " INT
Elts d’une Déclaration d’une Table
! ! Types Paire attribut:Types les plus courants:
" INT ou INTEGER (synonymes).
" " " CHAR(n VARCHAR(n REAL ou ) FLOAT = chaîne ) =chaîne (synonymes). de n de caractères. moins de n
caractères.
98
Exemple: UPDATE ! Changement qui devient 555-1212: du téléphone de Fred UPDATE SET WHERE phone
Exemple: UPDATE
! Changement qui devient 555-1212: du téléphone de Fred
UPDATE SET WHERE phone name Drinkers = = ‘555-1212’ ‘Fred’;
93
Définition d’un Schéma de BD ! Déclaration la BD des relations (“tables”) de ! On
Définition d’un Schéma de BD
! Déclaration la BD des relations (“tables”) de
! On choses tard. peut dans déclarer le schéma beaucoup --- on d’autres verra plus
96
Exemple: CREATE TABLE CREATE bar TABLE CHAR(20), Sells ( beer price VARCHAR(20), REAL ); 99
Exemple: CREATE TABLE
CREATE bar TABLE CHAR(20), Sells (
beer price
VARCHAR(20),
REAL
);
99
Dates et Heures ! ! DATE La forme et TIME d’une sont date des est:
Dates et Heures
! ! DATE La forme et TIME d’une sont date des est: types SQL.
DATE ‘aaaa-mm-jj’
" Exemple: Septembre DATE 2002. ‘2002-09-30’ pour 30
100
Déclaration des clefs à un attribut ! ! type Ecrire Exemple: dans PRIMARY la déclaration
Déclaration des clefs à un attribut
! ! type Ecrire Exemple: dans PRIMARY la déclaration KEY ou UNIQUE de l’attribut après le
CREATE name manf TABLE CHAR(20) CHAR(20) Beers ( UNIQUE,
);
103
PRIMARY KEY ou UNIQUE ? ! pas Le UNIQUE. standard la distinction SQL standard entre
PRIMARY KEY ou UNIQUE ?
! pas Le UNIQUE. standard la distinction SQL standard entre PRIMARY ne précise KEY et
" pour Par exemple PRIMARY le KEY SGBD et peut pas pour créer UNIQUE. un index
106
Heures ! Forme générale: Éventuellement, la seconde. TIME ‘hh:mm:ss’ décimales en dessous de " Example:
Heures
! Forme générale:
Éventuellement, la seconde. TIME ‘hh:mm:ss’ décimales en dessous de
" Example: seconde et TIME demi ’15:30:02.5’ après 15 heures =deux trente
101
Clefs Multi-Attributs ! Déclaration dans CREATE qui TABLE suit celle des attributs ! Peut aussi.
Clefs Multi-Attributs
! Déclaration dans CREATE qui TABLE suit celle des attributs
! Peut aussi. s’utiliser pour un seul attribut
! Cette comporte forme plusieurs est nécessaire attributs si la clef
104
Distinctions Obligatoires ! SQL demande que 1. 2. Une relation, Un attribut seule mais PRIMARY
Distinctions Obligatoires
! SQL demande que
1. 2. Une relation, Un attribut seule mais PRIMARY d’une plusieurs PRIMARY KEY attributs pour KEY une ne UNIQUE. peut
jamais attribut même pour valoir UNIQUE plusieurs NULL. peut Par n-uplets. valoir contre NULL un et
107
Déclaration des Clefs ! Un attribut ou une liste d’attributs peut ! Cela être déclaré
Déclaration des Clefs
! Un attribut ou une liste d’attributs peut
! Cela être déclaré signifie PRIMARY que ce(s) KEY attribut(s) ou UNIQUE.
! On détermine verra d’autres les autres. distinctions plus loin.
102
Exemple: Clef Multi-Attributs ! bar CREATE et beer est TABLE la clef Sells de Sells:
Exemple: Clef Multi-Attributs
! bar CREATE et beer est TABLE la clef Sells de Sells: (
beer bar
PRIMARY price KEY REAL, (bar, beer)
CHAR(20),
VARCHAR(20),
);
105
Autres déclaration Attributs pour les 1. 2. attribut NOT DEFAULT défaut NULL qui <value>précise ne
Autres déclaration Attributs pour les
1.
2. attribut NOT DEFAULT défaut NULL qui <value>précise ne vaut jamais la NULL. valeur par
108
Exemple: Valeurs par Défaut CREATE name addr TABLE CHAR(50) CHAR(30) Drinkers PRIMARY ( KEY, phone
Exemple: Valeurs par Défaut
CREATE name addr TABLE CHAR(50) CHAR(30) Drinkers PRIMARY ( KEY,
phone DEFAULT CHAR(16) ‘123 Sesame St.’,
);
109
Ajout d’Attributs ! Ajouter ALTER un TABLE attribut <name> (une “colonne”): ADD ! Exemple: <attribute
Ajout d’Attributs
! Ajouter ALTER un TABLE attribut <name> (une “colonne”): ADD
! Exemple: <attribute declaration>;
ALTER phone TABLE CHAR(16)DEFAULT Bars ADD ‘unlisted’;
112

VUESVUES

(tables aux possibilités restreintes) 115
(tables aux possibilités restreintes)
115
Valeurs par défaut -- 1 ! Sally ignore fait son partie adresse de drinker, et
Valeurs par défaut -- 1
! Sally ignore fait son partie adresse de drinker, et téléphone. mais on
! INSERT incomplète INSERT avec INTO fonctionne: une Drinkers(name) liste d’attributs
VALUES(‘Sally’);
110
Suppressions d’Attributs ! Suppression ALTER TABLE d’un <name> attribut dans une table: ! Exemple: ALTER
Suppressions d’Attributs
! Suppression ALTER TABLE d’un <name> attribut dans une table:
! Exemple: ALTER TABLE DROP suppression <attribute>; Bars de DROP la license: license;
113
Vues ! autres Vue: table tables virtuelle et vues définie à partir des ! !
Vues
! autres Vue: table tables virtuelle et vues définie à partir des
! ! Déclaration: CREATE Les autres VIEW tables <name> sont dites AS <query>; tables de
base.
116
Valeurs par défaut -- 2 ! Quel n-uplet dans Drinkers? name addr phone ‘Sally’ ‘123
Valeurs par défaut -- 2
! Quel n-uplet dans Drinkers?
name
addr
phone
‘Sally’
‘123 Sesame St’
NULL
! l’insertion SI téléphone aurait NOT été NULL, refusée
111
Suppressions d’Attributs ! Suppression ALTER TABLE d’un <name> attribut dans une table: ! Exemple: ALTER
Suppressions d’Attributs
! Suppression ALTER TABLE d’un <name> attribut dans une table:
! Exemple: ALTER TABLE DROP suppression <attribute>; Bars de DROP la license: license;
114
Exemple: Définition d’une vue ! couples CanDrink(drinker, au moins drinker-beer un bar qui beer) vend
Exemple: Définition d’une vue
! couples CanDrink(drinker, au moins drinker-beer un bar qui beer) vend tel est que beer: une drinker vue avec fréquente les
CREATE SELECT VIEW drinker, CanDrink beer AS
FROM WHERE Frequents, Frequents.bar Sells = Sells.bar;
117
Exemple: accès à une vue ! Une vue s’interroge comme une table. ! Exemple: SELECT
Exemple: accès à une vue
! Une vue s’interroge comme une table.
! Exemple: SELECT WHERE drinker beer FROM = ‘Sally’; CanDrink
" On peut modifier une vue si cela a un sens
pour les tables sous-jacentes.
118
Optimisation du SGBD ! de La requête la vue par obtenue sa définition par remplacement
Optimisation du SGBD
! de La requête la vue par obtenue sa définition par remplacement n’est pas
! optimale. Optimisations:
1. Faire tables descendre de base les sélections près des
2. Eliminer les projections inutiles.
121
Comment utilisée? la vue est-elle ! la Le une dans vue SGBD formule laquelle était
Comment utilisée? la vue est-elle
! la Le une dans vue SGBD formule laquelle était interprète une de intervient l’algèbre table la de requête la base. relationnelle vue V. comme Il en fait si
! Cette définition table en V algèbre est remplacée relationnelle. par sa
119
Exemple: Optimisation Elimine la des avant coûteuse. plupart n-uplets la jointure PROJ JOIN beer Sells
Exemple: Optimisation
Elimine
la des avant coûteuse. plupart n-uplets la jointure
PROJ JOIN beer
Sells
SELECT drinker=‘Sally’
Frequents
122
Exemple: Expansion d’une Vue PROJ beer SELECT drinker=‘Sally’ CanDrink PROJ drinker, beer JOIN Frequents
Exemple: Expansion d’une Vue
PROJ beer
SELECT drinker=‘Sally’
CanDrink
PROJ drinker, beer
JOIN
Frequents
Sells
120