Vous êtes sur la page 1sur 39

Cours de bases de données

S. Bringay

L2 MIASHS
Chapitre 5

Requêtes avancées
Modifier le SELECT
Modifier le SELECT
➲ AS : Renommage des attributs du schéma cible

Titre
SELECT Titre
La reine margot
FROM FILM Possession
WHERE Acteur=‘Adjani’ Adèle

4
Modifier le SELECT
➲ AS : Renommage des attributs du schéma cible

Titre
SELECT Titre
La reine margot
FROM FILM Possession
WHERE Acteur=‘Adjani’ Adèle

SELECT Titre AS Adjani_movies Adjani_movies


FROM FILM La reine margot
WHERE Acteur=‘Adjani’ Possession
Adèle

5
Modifier le SELECT

➲ Ensembles et multi-ensembles
– {1, 2, 1, 3} est un multi-ensemble
– {1, 2, 3} est un ensemble simple

➲ Élimination des éléments dupliqués

SELECT DISTINCT Nom


FROM Realisateur

Prenom Nom
Ethan Coen
Joel Coen
Quentin Tarentino

6
Modifier le SELECT

➲ Ensembles et multi-ensembles
– {1, 2, 1, 3} est un multi-ensemble
– {1, 2, 3} est un ensemble simple

➲ Élimination des éléments dupliqués

SELECT DISTINCT Nom


FROM Realisateur

Prenom Nom
Nom
Ethan Coen Coen
Joel Coen Tarentino
Quentin Tarentino

7
Modifier le SELECT

➲ Valeur des attributs = expression arithmétique

SELECT Titre, Duree AS duree_en_heures


FROM FILM
Titre duree_en_heures
La reine margot 1,25
Possession 1,5
Adèle 1,3

SELECT Titre, Duree*60 AS duree_en_minutes


FROM FILM

8
Modifier le SELECT

➲ Valeur des attributs = expression arithmétique

SELECT Titre, Duree AS duree_en_heures


FROM FILM
Titre duree_en_heures
La reine margot 1,25
Possession 1,5
Adèle 1,3

SELECT Titre, Duree*60 AS duree_en_minutes


FROM FILM

Titre duree_en_minutes
La reine margot 75
Possession 90
Adèle 78
9
Fonctions

10
Quand utiliser une fonction ?

➲ Dans le SELECT

SELECT CONCAT(nom, ' ' , prenom)


FROM ACTEUR

Afficher le nom, un espace et le prénom de chaque acteur

➲ Dans le WHERE

SELECT nom
FROM ACTEUR
WHERE LEFT(nom, 2)= 'Sp'

Afficher les noms des acteur qui commencent par Sp comme Spilberg

11
Fonctions
➲ Chaine de caractères
– LENGTH()
– REPLACE()
– SUBSTRING()
– LEFT()
– RIGHT()
– REVERSE()
https://sql.sh/fonctions/chaines-de-
– UPPER() caracteres
– LOWER()
– …

12
Fonctions

➲ Math https://sql.sh/fonction
– RAND()
s/mathematiques
– ROUND()
– …

➲ Date
– DATEDIFF() https://sql.sh/fonctions/date-
– MONTH() heure
– YEAR()
– NOM()
– …

13
Conditions de la clause WHERE
Conditions de la clause WHERE
➲ Comparateurs habituels : =, <, >, <=, >= , <> ou !=
– WHERE prix_TVA = prix * 20 / 100

➲ Valeur dans une liste de plusieurs valeurs


– WHERE prenom IN ( 'Maurice', 'Marie', 'Thimoté' )
https://sql.sh/cours/where/in

➲ Valeur comprise dans un intervalle donné


– WHERE date BETWEEN '2012-04-01' AND '2012-04-20'
https://sql.sh/cours/where/between

➲ Chaine avec le début, milieu ou fin connue


– WHERE nom LIKE "a%" https://sql.sh/cours/where/like

➲ Valeur nulle
– WHERE adresse IS NULL https://sql.sh/cours/where/is
15
Conditions de la clause WHERE

➲?

SELECT Titre
FROM Film
WHERE Acteur IN (Adjani, Marielle, Dujardin)

11/09/18 sandra.bringay@univ-montp3.fr 16
Conditions de la clause WHERE

➲ Titres des films dans lesquels Adjani, Marielle et


Dujardin ont joué

SELECT Titre
FROM Film
WHERE Acteur IN (Adjani, Marielle, Dujardin)

11/09/18 sandra.bringay@univ-montp3.fr 17
Conditions de la clause WHERE
➲?

SELECT Titre
FROM Film
WHERE budget BETWEEN 190 AND 300

11/09/18 sandra.bringay@univ-montp3.fr 18
Conditions de la clause WHERE
➲ Titre des films ayant coutés entre 190 et 300M
euros

SELECT Titre
FROM Film
WHERE budget BETWEEN 190 AND 300

11/09/18 sandra.bringay@univ-montp3.fr 19
Conditions de la clause WHERE
➲?

SELECT *
FROM FILM
WHERE langue IS NULL

11/09/18 sandra.bringay@univ-montp3.fr 20
Conditions de la clause WHERE
➲ Toutes les informations sur les films pour
lesquels l’information sur la langue n’a pas été
saisie

SELECT *
FROM FILM
WHERE langue IS NULL

11/09/18 sandra.bringay@univ-montp3.fr 21
Conditions de la clause WHERE
➲ Connecteurs de conditions : OR, AND
https://sql.sh/cours/where/and-or
SELECT Titre
FROM FILM
WHERE Acteur=’Adjani’ OR realisateur=’Poirier’

SELECT Titre
FROM FILM
WHERE Acteur=’Adjani’ AND realisateur=’Poirier’

22
Conditions de la clause WHERE
➲ Connecteurs de conditions : OR, AND
https://sql.sh/cours/where/and-or
SELECT Titre
FROM FILM
WHERE Acteur=’Adjani’ OR realisateur=’Poirier’

Sélection des titres des films dans lesquels Adjani a joué ou qui ont été
réalisés par Poirier

SELECT Titre
FROM FILM
WHERE Acteur=’Adjani’ AND realisateur=’Poirier’

Sélection des titres des films dans lesquels Adjani a joué ET qui ont été
réalisés par Poirier

23
Conditions de la clause WHERE
➲ Contraire d’une condition : NOT

SELECT Acteur
FROM FILM
WHERE Acteur NOT LIKE 'T%’

24
Conditions de la clause WHERE
➲ Contraire d’une condition : NOT

SELECT Acteur
FROM FILM
WHERE Acteur NOT LIKE 'T%’

Nom des acteurs qui ne commencent pas par T

25
Exercice 1
➲ Soit le schéma suivant
– CLIENT (N°C, NomC, AdrC, CP, Ville, Tél, CondPart)
– PRODUIT (N°P, Description, Prix, QtéP, Ville)
– COMMANDE (N°Comm, N°C, N°P, QtéC, DateC)

➲ Répondez aux requêtes suivantes


– (Q1) Lister la description et le prix des produits dont le prix est compris
entre 500 et 1000 euros
– (Q2) Lister les noms et adresses des clients dont le nom commence
par un D
– (Q3) Afficher les noms des clients en majuscules qui habitent à
montpellier et dont le numéro de téléphone est un portable
– (Q4) Afficher les descriptions et le prix arrondi à 2 décimale des
produits achetés à plus de 3 exemplaires ou dont le prix unitaire est
supérieur à 30.
26
Exercice 1 (Correction)
➲ (Q1) SELECT Description, Prix
FROM Produit
WHERE Prix BETWEEN 500 AND 1000

Ou bien Prix >=500 AND Prix<=1000

➲ (Q2) SELECT NomC, AdrC


FROM Client
WHERE NomC LIKE 'D%'

27
Exercice 1 (Correction)

➲ (Q3) SELECT UCASE(NomC)


FROM Client
WHERE VILLE=’Montpellier’ AND (tel like ’06%’ OR tel like ’07%’ )

➲ (Q4) SELECT Description, Round(Prix,2)


FROM Produit
WHERE QtéP > 3 OR Prix > 30

28
Agrégats
Agrégats

➲ SUM() : somme, AVG() : moyenne, MIN() : minimum, MAX() : maximum,


COUNT() : cardinalité d’un multi-ensemble
➲ Le nombre de films dirigés par Bergman
SELECT COUNT(Titre)
FROM PROGRAMME
WHERE réalisateur = ‘Bergman’

PB : si un même film de Bergman est plusieurs fois à l’affiche, il est compté plusieurs
fois !

30
Agrégats

➲ SUM() : somme, AVG() : moyenne, MIN() : minimum, MAX() : maximum,


COUNT() : cardinalité d’un multi-ensemble
➲ Le nombre de films dirigés par Bergman
SELECT COUNT(Titre)
FROM PROGRAMME
WHERE réalisateur = ‘Bergman’

PB : si un même film de Bergman est plusieurs fois à l’affiche, il est compté plusieurs
fois !

➲ Éliminer les éléments dupliqués


SELECT COUNT (DISTINCT Titre)
FROM PROGRAMME
WHERE réalisateur = ‘Bergman’

31
Agrégats par groupement
➲ Nombre d’acteurs par film
SELECT Titre, COUNT (distinct Acteur)
FROM FILM
GROUP BY Titre
➲ (1) Projection, (2) regroupement, (3) calcul de l’agrégat (multi-
ensemble)

T R A
t1 r1 a1
Titre,
réalisateur, t1 r1 a2
acteur t1 r1 a3
t2 r4 a2
t1 r2 a1
t1 r2 a2
t1 r2 a3
32
Agrégats par groupement
➲ Nombre d’acteurs par film
SELECT Titre, COUNT (distinct Acteur)
FROM FILM
GROUP BY Titre
➲ (1) Projection, (2) regroupement, (3) calcul de l’agrégat (multi-
ensemble)

T A
T R A
t1 a1
t1 r1 a1
Titre, t1 a2
réalisateur, t1 r1 a2
t1 a3
acteur t1 r1 a3
t1 a1
t2 r4 a2
t1 a2
t1 r2 a1
t1 a3
t1 r2 a2
t2 a2
t1 r2 a3
33
Agrégats par groupement
➲ Nombre d’acteurs par film
SELECT Titre, COUNT (distinct Acteur)
FROM FILM
GROUP BY Titre
➲ (1) Projection, (2) regroupement, (3) calcul de l’agrégat (multi-
ensemble)

T A
T R A
t1 a1
t1 r1 a1
Titre, t1 a2
réalisateur, t1 r1 a2
t1 a3
acteur t1 r1 a3
t1 a1
t2 r4 a2
t1 a2
t1 r2 a1
t1 a3
t1 r2 a2
t2 a2
t1 r2 a3
34
Agrégats par groupement
➲ Nombre d’acteurs par film
SELECT Titre, COUNT (distinct Acteur)
FROM FILM
GROUP BY Titre
➲ (1) Projection, (2) regroupement, (3) calcul de l’agrégat (multi-
ensemble)

T A
T R A
t1 a1 T
t1 r1 a1
Titre, t1 a2 t1 3
réalisateur, t1 r1 a2
t1 a3 t2 1
acteur t1 r1 a3
t1 a1
t2 r4 a2
t1 a2
t1 r2 a1
t1 a3
t1 r2 a2
t2 a2
t1 r2 a3
35
Agrégats par groupement
➲ Nombre d’acteurs par film
SELECT Titre, COUNT (Acteur) -- pas de distinct
FROM FILM
GROUP BY Titre
➲ (1) Projection, (2) regroupement, (3) calcul de l’agrégat (multi-ensemble)

T A
T R A
t1 a1 T
Film, t1 r1 a1
t1 a2 t1 6
réalisateur, t1 r1 a2
t1 a3 t2 1
acteur t1 r1 a3
t1 a1
t2 r4 a2
t1 a2
t1 r2 a1
t1 a3
t1 r2 a2
t2 a2
t1 r2 a3
36
Agrégats – sélection des groupes
➲ Elimination des groupes ne satisfaisant pas la condition

➲ Les titres de films et le nombre d’acteurs des films de plus de


3 acteurs
SELECT Titre, COUNT (DISTINCT Acteur)
FROM FILM
GROUP BY Titre
HAVING COUNT(distinct acteur) >= 3

➲ Les films dirigés par plus de 2 metteurs en scène


SELECT Titre
FROM FILM
GROUP BY Titre
HAVING COUNT(distinct realisateur) > 2
37
Exercice 2

➲ Soit le schéma suivant


– CLIENT (N°C, NomC, AdrC, CP, Ville, Tél, CondPart)
– PRODUIT (N°P, Description, Prix, QtéP, Ville)
– COMMANDE (N°Comm, N°C, N°P, QtéC, DateC)

➲ Répondez aux requêtes suivantes


– (Q1) Le nombre de clients par ville
– (Q2) Le nombre de clients par ville de plus de 10 clients

38
Exercice 2 (Correction)
➲ Soit le schéma suivant
– CLIENT (N°C, NomC, AdrC, CP, Ville, Tél, CondPart)
– PRODUIT (N°P, Description, Prix, QtéP, Ville)
– COMMANDE (N°Comm, N°C, N°P, QtéC, DateC)

➲ Répondez aux requêtes suivantes


– (Q1) Le nombre de clients par ville
– (Q2) Le nombre de clients par ville de plus de 10 clients
SELECT ville, COUNT (DISTINCT N°C)
FROM CLIENT
GROUP BY ville
SELECT ville, COUNT (DISTINCT N°C)
FROM CLIENT
GROUP BY ville
HAVING COUNT(DISTINCT N°C)>10
39

Vous aimerez peut-être aussi