Vous êtes sur la page 1sur 10

Requêtes avancées en algèbre

relationnelle (1/3)
• Q1 : Quelles sont les tailles de disques durs qui
sont utilisées par au moins 2 PCs ?
Algèbre : suite et fin • Q2 : Quels sont les constructeurs vendant
l'ordinateur le plus rapide ?
suivi du Chapitre 6
Ces requêtes sont difficiles à exprimer en
http://www.lri.fr/~cohen/BD/BD.html algèbre car il faut compter (Q1) ou calculer un
maximum (Q2)
On a besoin de comparer des lignes, on ne sait
que comparer des colonnes !

1 2
Département Informatique Sarah Cohen-Boulakia, Bases de données Département Informatique Sarah Cohen-Boulakia, Bases de données

Requêtes avancées (2/3) Requêtes avancées (3/3)


Comparer des colonnes Produit cartésien Solution : Comparer des colonnes Produit cartésien
Q1 : Quelles sont les tailles de disques durs qui sont utilisées par Q1 : Quelles sont les tailles de disques durs qui sont utilisées par
au moins 2 PCs ? au moins 2 PCs ?
PC PC
PC 1 x PC 2
Modèle HD
(renomage)
Modèle HD PC1.HD π σ
PC1.modele ≠ PC2.modele (PC 1 x PC 2)
∧ PC1.HD = PC2.HD
1001 1.6 1001 1.6
PC1.Modèle PC1.HD PC2.Modèle PC2.HD PC1.Modèle PC1.HD PC2.Modèle PC2.HD
1002 1.6 1001 1.6 1001 1.6 1002 1.6 1001 1.6 1001 1.6
1001 1.6 1002 1.6 1001 1.6 1002 1.6
1003 2.5 1003 2.5
1001 1.6 1003 2.5 1001 1.6 1003 2.5
1002 1.6 1001 1.6 1002 1.6 1001 1.6
On peut maintenant 1002 1.6 1002 1.6 On peut maintenant 1002 1.6 1002 1.6
comparer les colonnes ! 1002 1.6 1003 2.5 comparer les colonnes ! 1002 1.6 1003 2.5
1003 2.5 1001 1.6 1003 2.5 1001 1.6
1003 2.5 1002 1.6 1003 2.5 1002 1.6
1003 2.5 1003 2.5 1003 2.5 1003 2.5
3 4
Département Informatique Sarah Cohen-Boulakia, Bases de données Département Informatique Sarah Cohen-Boulakia, Bases de données
Pouvoir expressif de l’algèbre relationnelle Pouvoir expressif de l’algèbre relationnelle
(1/2) (2/2)
• Ce que l’algèbre sait exprimer • Ce que l’algèbre ne sait pas exprimer (SQL !)
– Au moins 1, au moins 2, … au moins 125 (classique, – Combien … ?
projection-selection-jointure) – au moins n (avec n dépendant d’un calcul)
– Tous, aucun (division, différence) – Groupes de valeurs …
– Exactement 1, exactement 2, .., : difficile ! Mais possible
– le plus rapide… : difficile (différence + produit cartésien)
NB : Certaines requêtes ne peuvent pas être
– …
exprimées en SQL non plus (données graphes)
NB : Pensez à exprimer la négation de la requête et utilisez
la différence
La BD est alors interfacée avec un autre
langage (C, JAVA) ou bien on fait du
Spectateurs n’aimant aucun des films qu’ils ont vus PL/SQL
l’ens. des spectateurs – ceux qui ont aimé au moins un
film
5 6
Département Informatique Sarah Cohen-Boulakia, Bases de données Département Informatique Sarah Cohen-Boulakia, Bases de données

Requêtes simples
• SELECT * * : liste de tous les attributs
FROM FILM σActeur=′Adjani′ FILM
WHERE Acteur=’Adjani’

Chapitre 6 • SELECT Titre πTitre[σ Acteur=′Adjani′ FILM]


FROM FILM
SQL avancé WHERE Acteur=’Adjani’

• Sémantique formelle – cas mono-relation :


SELECT distinct B1 ... Bk
FROM R
WHERE C
πB1…Bk[σC R]
7 8
Département Informatique Sarah Cohen-Boulakia, Bases de données Département Informatique Sarah Cohen-Boulakia, Bases de données
Requêtes classiques Conditions de la clause WHERE
• Renomage des attributs du schéma cible • Comparateurs habituels, arithmétique,
concaténation (||), ...
SELECT Titre AS Adjani’s movies • Connecteurs : OR, AND et NOT
FROM FILM SELECT Titre
FROM FILM
WHERE Acteur=’Adjani’
WHERE Acteur=’Adjani’ OR réalisateur=’Poirier’
• Motifs pour la recherche de chaînes de
• Valeur des attributs = expression caractères
arithmétique % : une chaîne quelconque
SELECT Titre
SELECT Titre, Durée*60 AS durée-en-minutes
FROM FILM
FROM FILM-durée WHERE Titre LIKE ’%retour%’
Le retour du roi, Aliens le retour, …
9 10
Département Informatique Sarah Cohen-Boulakia, Bases de données Département Informatique Sarah Cohen-Boulakia, Bases de données

Chaînes de caractères (suite) Exercice 1


• Soit le schéma suivant
• Majuscules / Minuscules – CLIENT (N°C, NomC, AdrC, CP, Ville, Tél, CondPart)
– Pas de distinction pour les mots clés – PRODUIT (N°P, Description, Prix, QtéP, Ville)
– Distinction pour les valeurs des conditions – COMMANDE (N°Comm, N°C, N°P, QtéC, DateC)

• Divers • Répondez aux requêtes suivantes


– les motifs comme les valeurs sont écrits entre ’ ’ – (Q1) Lister la description et le prix des
– négation possible : NOT LIKE produits dont le prix est compris entre 500 et
– condition d’intervalle : 1000 euros
att. BETWEEN val1 AND val2 – (Q2) Lister les noms et adresses des clients
dont le nom commence par un D
11 12
Département Informatique Sarah Cohen-Boulakia, Bases de données Département Informatique Sarah Cohen-Boulakia, Bases de données
Exercice 1 (Correction)
Manipulation de dates
• (Q1) SELECT Description, Prix
• format : aaaa-mm-jj
FROM Produit
WHERE Prix BETWEEN 500 AND 1000
• DATE ’2003-11-06’
Ou bien Prix >=500 AND Prix<=1000

• BETWEEN DATE ’2003-09-25’ AND


• (Q2) SELECT NomC, AdrC DATE ’2004-02-15’
FROM Client
WHERE NomC LIKE 'D%'
13 14
Département Informatique Sarah Cohen-Boulakia, Bases de données Département Informatique Sarah Cohen-Boulakia, Bases de données

Sémantique formelle – cas multi-relation Introduction de variables


SELECT B1, ..., Bk • Les films et tous les acteurs dans lesquels joue M-F Pisier
FROM R1 ... Bp πB1…Bk[σC R1 x … x Bp] [π F2.Titre, F2.Acteur[σActeur=‘M-F.Pisier’ ∧ F1.Titre = F2.Titre
WHERE C
[FILM 1] X [FILM 2]]]
Les cinémas qui projettent un film dans lequel M.F.
Pisier est actrice (pour chaque cinéma donner le titre • SELECT F2.Titre, F2.Acteur
du film et l’horaire)
FROM FILM AS F1, FILM AS F2 -- équiv. à FILM F1, FILM F2
WHERE F1.Titre = F2.Titre
SELECT Nom-Cine, FILM.Titre, Horaire AND F1.Acteur=‘M-F. Pisier’
FROM FILM , PROG
• F1 et F2 sont des copies virtuelles de FILM
WHERE FILM.titre=PROG.titre AND Acteur=‘M-F. Pisier’
• F1 et F2 sont des variables utilisées pour désigner n’importe
quel couple de n-uplets de FILM
π[Nom-Cine,Titre,Horaire [σActeur=‘M-F.Pisier’ [FILM |X| PROG]] • Si la table FILM n’est pas dédoublée, la seule actrice retournée
=π[Nom-Cine,Titre,Horaire [σActeur=‘M-F.Pisier’ [FILM X PROG]] est MF Pisier (les autres acteurs sont « perdus » car non
sélectionnés dans F1, F2 les retrouve)
^ FILM.titre=PROG.titre 15 16
Département Informatique Sarah Cohen-Boulakia, Bases de données Département Informatique Sarah Cohen-Boulakia, Bases de données
SQL : Union, Intersection, Différence
SQL : ensembles et multi-ensembles
• Les titres des films dans lesquels joue M-F. Pisier et qui sont à
l’affiche
SELECT Titre FROM FILM WHERE Acteur=‘M-F. Pisier’ • {1, 2, 1, 3} est un multi-ensemble
INTERSECT
SELECT Titre FROM PROG
• select-from-where (par défaut ALL, multi-ens)
• Les titres des films qui ne sont pas à l’affiche
SELECT Titre FROM FILM • Union, Except,Intersect (DISTINCT par
EXCEPT
SELECT Titre FROM PROG défaut, ensemble simple)
• Toutes les personnes ayant participées au tournage du film
“Marion” • Élimination des dupliqués
SELECT Acteur AS Personne FROM FILM SELECT DISTINCT Titre
WHERE Titre = ’Marion’
FROM FILM
UNION
SELECT réalisateur AS Personne FROM FILM
WHERE Titre = ’Marion’
17 18
Département Informatique Sarah Cohen-Boulakia, Bases de données Département Informatique Sarah Cohen-Boulakia, Bases de données

SQL : Agrégats Groupement


• Nombre d’acteurs par film
• SUM() : somme, AVG() : moyenne, MIN() : minimum, SELECT Titre, COUNT (distinct Acteur)
MAX() : maximum, COUNT() : cardinalité d’un multi- FROM FILM
ensemble GROUP BY Titre
• Le nombre de films dirigés par Bergman • (1) Projection, (2) regroupement, (3) calcul de
SELECT COUNT(Titre) l’agrégat (multi-ensemble)
FROM PROG
T A
WHERE réalisateur = ‘Bergman’ T R A
t1 a1 T
PB : si un même film de Bergman est plusieurs fois à l’affiche, t1 r1 a1
Film, t1 a2
il est compté plusieurs fois ! t1 r1 a2
t1 3
réalisateur, t1 a3 t2 1
• Éliminer les dupliqués acteur t1 r1 a3
t1 a1
SELECT COUNT (DISTINCT Titre) t2 r4 a2
t1 a2
FROM PROG t1 r2 a1
t1 a3
WHERE réalisateur = ‘Bergman’ t1 r2 a2
t2 a2
t1 r2 a3
19 20
Département Informatique Sarah Cohen-Boulakia, Bases de données Département Informatique Sarah Cohen-Boulakia, Bases de données
Groupement - Importance du Distinct SQL : Groupement et agrégat
SELECT Titre, COUNT (Acteur) -- pas de distinct • Ajout d’un schéma Cinephile(NomPers, Nom-Cine)
FROM FILM SELECT NomPers, COUNT (DISTINCT Titre)
GROUP BY Titre FROM Cinephile, PROG
• Projection, regroupement, calcul de l’agrégat WHERE Cinephile.Nom-Cine = PROG.Nom-Cine
GROUP BY NomPers
(multi-ensemble) Distinct : Cas où plusieurs salles projettent le même film !
T A
T R A
t1 a1 T • (1) jointure naturelle de Cinephile et PROG, (2)
Film, t1 r1 a1
t1 a2 t1 6 projection, (3) regroupement, et (4) calcul de l’agrégat
réalisateur, t1 r1 a2
t1 a3 t2 1 Les personnes et le nombre de films qu’ils peuvent voir
acteur t1 r1 a3
t1 a1
t1 r2 a1 • Clause SELECT en présence d’agrégat
t1 a2
t1 r2 a2 SELECT liste1, agg(liste2)
t1 a3
t1 r2 a3 FROM liste-relations WHERE condition
t2 a2
t2 r4 a2 GROUP BY liste1
21 22
Département Informatique Sarah Cohen-Boulakia, Bases de données Département Informatique Sarah Cohen-Boulakia, Bases de données

SQL : la clause HAVING Exercice 2


• Les titre de films et le nombre d’acteurs des films de plus
de 3 acteurs
• Soit le schéma suivant
SELECT Titre, COUNT (DISTINCT Acteur) – CLIENT (N°C, NomC, AdrC, CP, Ville, Tél,
CondPart)
FROM FILM
GROUP BY Titre – PRODUIT (N°P, Description, Prix, QtéP, Ville)
HAVING COUNT(distinct acteur) >= 3 – COMMANDE (N°Comm, N°C, N°P, QtéC, DateC)

• Élimination des groupes ne satisfaisant pas la condition


• Répondez aux requêtes suivantes
• Les films dirigés par plus de deux metteurs en scène – Combien de clients habitent Paris ?
SELECT Titre – Quel est le prix moyen des produits ?
FROM FILM – Lister toutes les paires de numéros de Clients, tels
GROUP BY Titre que ces 2 Clients habitent dans la même ville
HAVING COUNT(distinct realisateur) > 2
23 24
Département Informatique Sarah Cohen-Boulakia, Bases de données Département Informatique Sarah Cohen-Boulakia, Bases de données
Correction (Exercice 2) Correction (Exercice 2)
(Q1) Combien de clients habitent Paris ? (Q2) Quel est le prix moyen des produits ?
SELECT COUNT (N°C) SELECT AVG (Prix)
FROM Produit
FROM Client
WHERE Ville = 'Paris‘ (Q3) Lister toutes les paires de numéros de Clients,
Ou bien tels que ces 2 Clients habitent dans la même ville
SELECT COUNT (*) … SELECT c1.N°C, c2.N°C
FROM Client c1, Client c2
La table Client a une clé simple : N°C
WHERE c1.Ville = c2.Ville
Les lignes de la table Client ont toutes des AND c1.N°C ≠ c2.N°C
N°C différents
NB : si on veut éviter les doublons (c1, c2) et (c2, c1), on
Compter les N°C est équivalent à compter les peut choisir de dire c1.N°C > c2.N°C ou
lignes (*) c1.N°C < c2.N°C
25 26
Département Informatique Sarah Cohen-Boulakia, Bases de données Département Informatique Sarah Cohen-Boulakia, Bases de données

SQL : Sous-Requêtes et Imbrication SQL : Sous-requête avec l’opérateur IN


• Utilisation du résultat d’un Select-From-Where
– FILM-DEB(Titre, Acteur) stocke le titre du premier film • Les titres des films dont les réalisateurs sont acteurs
de chaque acteur. (pas forcément dans le même film)
Les acteurs du premier film joué par M-F. Pisier ? SELECT Titre
FROM FILM
• SELECT Acteur
WHERE réalisateur IN (SELECT Acteur FROM FILM )
FROM FILM
WHERE Titre = (SELECT Titre • Le résultat de la sous-requête est un ensemble de n-
uplets
FROM FILM-DEB
WHERE Acteur=‘M-F. Pisier’) SELECT F1.Titre
• SELECT FILM.Acteur FROM FILM AS F1, FILM AS F2
FROM FILM, FILM-DEB WHERE F1.réalisateur = F2.acteur
WHERE FILM.Titre=FILM-DEB.Titre
AND FILM-DEB.Acteur=‘M-F. Pisier’
27 28
Département Informatique Sarah Cohen-Boulakia, Bases de données Département Informatique Sarah Cohen-Boulakia, Bases de données
Sous-requêtes coûteuses ! Exercice 5
• Soient 2 schémas de relation R(ABC) et S(BCD) • Soit le schéma suivant
• Deux façons d’exprimer une jointure entre R et S (et proj. s/A) – CLIENT (N°C, NomC, AdrC, CP, Ville, Tél,
(1) SELECT A CondPart)
FROM R
– PRODUIT (N°P, Description, Prix, QtéP, Ville)
WHERE (R.B, R.C) IN (SELECT B, C
FROM S) – COMMANDE (N°Comm, N°C, N°P, QtéC, DateC)
(2) SELECT A
FROM R AS R1 • Répondez aux requêtes suivantes
WHERE EXISTS (SELECT S2.B, S2.C – Quels sont les produits plus chers que le prix
FROM S moyen ?
WHERE R1.B = S.B – Quels sont les clients (numéro de client) ayant
AND R1.C = S2.C ) commandé au moins 1 produit dont le prix vaut
• Attention : Les sous requêtes sont coûteuses, à éviter lorsque 1000 euros
cela est possible
– Quel est le produit le moins cher ?
29 30
Département Informatique Sarah Cohen-Boulakia, Bases de données Département Informatique Sarah Cohen-Boulakia, Bases de données

Exercice 5 (correction 1/3) Exercice 5 (correction 2/3)


Produits plus chers que le prix moyen ? Les clients (num) ayant commandé 1 produit dont le prix =
SELECT N°P 1000 €
FROM Produit SELECT N°C
WHERE Prix > (SELECT AVG (Prix) FROM Commande, Produit
FROM Produit) WHERE Prix = 1000
Attention : impossible de faire sans requête imbriquée ! AND Commande.N°P = Produit. N°P

Q2 : SELECT N°P Ou bien … (inutilement complexe)


FROM Produit SELECT N°C
WHERE Prix > AVG(Prix) ?????? FROM Commande
NON : Q2 est fausse : AVG(Prix) ne peut pas être dans WHERE N°P IN (SELECT N°P
la clause WHERE FROM Produit
WHERE Prix = 1000)

31 32
Département Informatique Sarah Cohen-Boulakia, Bases de données Département Informatique Sarah Cohen-Boulakia, Bases de données
Exercice 5 (correction 3/3)
Produit le moins cher En plus… ORDER BY, LIMIT
SELECT P1.N°P
• On utilise la clause ORDER BY pour trier les résultats
FROM Produit P1
d’une requête
WHERE Prix = (SELECT min(P2.prix)
• Ordre croissant par défaut (ASC)
FROM Produit P2)
Trouver des objets atteignant des valeurs min et max sont des cas • On utilise DESC pour trier par ordre décroissant
où ils faut utiliser des requêtes imbriquées • On peut alors utiliser LIMIT n (n un entier fixé) pour
Autre version correcte : extraire les n premiers résultats
SELECT P1.N°P • Attention : coût important du tri !
FROM Produit P1 SELECT *
WHERE NOT EXISTS (SELECT * FROM FILM
FROM Produit P2 WHERE acteur=’Adjani’
WHERE P2.Prix < P1.Prix) ORDER BY titre DESC
On cherche les numéros de produits de P1 tel qu’il n’existe pas de LIMIT 20; // 20 films seront renvoyés au plus
produit p2 moins cher que p1.
33 34
Département Informatique Sarah Cohen-Boulakia, Bases de données Département Informatique Sarah Cohen-Boulakia, Bases de données

En plus… SQL : Valeurs nulles En plus… Jointure externe


• Une valeur nulle remplace une valeur d’un • Elle est obtenue en calculant la jointure de R et S
attribut puis en y ajoutant
– valeur inconnue, attribut inapproprié, valeur incertaine, – # les n-uplets de R non joingnables avec un n-uplet de
valeur cachée... S et complétés avec des valeurs nulles
• Comparaison avec une valeur nulle – $ les n-uplets de S non joingnables avec un n-uplet de
– vrai=1, faux=0, inconnu=1/2 : logique tri booléene ! R et complétés avec des valeurs nulles
– x AND y =min(x,y) , x OR y =max(x,y), Not x =1-x R S Jointure externe de R et S
A B B C A B C
• Attention : loi du tiers exclu n’est plus valide 1 2 2 5 1 2 5
– p OR (NOT p) pour p=1/2 3 4 2 6 1 2 6
7 8 3 4 Null
Null 7 8
35 36
Département Informatique Sarah Cohen-Boulakia, Bases de données Département Informatique Sarah Cohen-Boulakia, Bases de données
Quelques syntaxes raccourcis pour les
jointures
• SQL2 propose une variété de formes de jointures :
externe, naturelle…
• R NATURAL JOIN S correspond exactement à la
jointure algébrique (deux colonnes de même nom)

• R CROSS JOIN S équivaut à SELECT * FROM R, S


• R JOIN S ON R.B = S.B équivaut à
SELECT * FROM R, S
WHERE R.B = S.B
• R OUTER JOIN S (jointure + $ et #)
• R RIGHT OUTER JOIN S (seul $ est effectué)
• R LEFT OUTER JOIN S (seul # est effectué)
37
Département Informatique Sarah Cohen-Boulakia, Bases de données

Vous aimerez peut-être aussi