Cour5 BDD
Cour5 BDD
Cour5 BDD
Nadime Francis
1 / 23
Qu’est-ce que SQL ?
2 / 23
Interrogation de la base de données
Requête SELECT :
Produit une table temporaire (la réponse) à partir d’une ou plusieurs
tables de la base de données
Spécifie les lignes (sélection) et colonnes (projection) à extraire
3 / 23
SELECT : choix des colonnes de sortie
Ex :
SELECT nom,prenom FROM realisateur;
realisateur
idDir nom prenom naissance nom prenom
1 Scott Ridley 1943 Scott Ridley
2 Tarantino Quentin 1963 Tarantino Quentin
3 Carpenter John 1948 =⇒ Carpenter John
4 Woo John 1946 Woo John
5 Cameron James 1954 Cameron James
6 Fincher David 1962 Fincher David
7 Winner Michael 1935 Winner Michael
4 / 23
SELECT : choix des colonnes de sortie
Ex :
SELECT ∗ FROM realisateur;
realisateur
idDir nom prenom naissance idDir nom prenom naissance
1 Scott Ridley 1943 1 Scott Ridley 1943
2 Tarantino Quentin 1963 2 Tarantino Quentin 1963
3 Carpenter John 1948 =⇒ 3 Carpenter John 1948
4 Woo John 1946 4 Woo John 1946
5 Cameron James 1954 5 Cameron James 1954
6 Fincher David 1962 6 Fincher David 1962
7 Winner Michael 1935 7 Winner Michael 1935
4 / 23
WHERE : choix des lignes de sortie
Ex :
SELECT ∗ FROM realisateur
WHERE prenom = 'John';
-- réalisateurs dont le prénom est John
realisateur
idDir nom prenom naissance
1 Scott Ridley 1943
2 Tarantino Quentin 1963 idDir nom prenom naissance
3 Carpenter John 1948 =⇒ 3 Carpenter John 1948
4 Woo John 1946 4 Woo John 1946
5 Cameron James 1954
6 Fincher David 1962
7 Winner Michael 1935
5 / 23
WHERE : choix des lignes de sortie
Ex :
SELECT ∗ FROM realisateur
WHERE prenom = 'John' AND nom = 'Carpenter';
-- réalisateurs dont le prénom est John et le nom est Carpenter
realisateur
idDir nom prenom naissance
1 Scott Ridley 1943
2 Tarantino Quentin 1963
idDir nom prenom naissance
3 Carpenter John 1948 =⇒
3 Carpenter John 1948
4 Woo John 1946
5 Cameron James 1954
6 Fincher David 1962
7 Winner Michael 1935
5 / 23
WHERE : choix des lignes de sortie
Ex :
SELECT ∗ FROM realisateur
WHERE prenom = 'John' OR nom = 'Fincher';
-- réalisateurs dont soit le prénom est John, soit le nom est Fincher (soit les deux)
realisateur
idDir nom prenom naissance
1 Scott Ridley 1943
idDir nom prenom naissance
2 Tarantino Quentin 1963
3 Carpenter John 1948
3 Carpenter John 1948 =⇒
4 Woo John 1946
4 Woo John 1946
6 Fincher David 1962
5 Cameron James 1954
6 Fincher David 1962
7 Winner Michael 1935
5 / 23
WHERE : choix des lignes de sortie
Ex :
SELECT ∗ FROM realisateur
WHERE prenom = 'John' AND nom = 'Fincher';
-- réalisateurs dont le prénom est John et le nom est Fincher
-- si aucune ligne ne vérifie la conditon, la réponse est une table vide (0 ligne)
realisateur
idDir nom prenom naissance
1 Scott Ridley 1943
2 Tarantino Quentin 1963
3 Carpenter John 1948 =⇒ idDir nom prenom naissance
4 Woo John 1946
5 Cameron James 1954
6 Fincher David 1962
7 Winner Michael 1935
5 / 23
SELECT FROM WHERE : projection et sélection
Ex :
SELECT nom,naissance FROM realisateur
WHERE naissance >= 1950;
-- nom et date de naissance des réalisateurs nés après 1950
realisateur
idDir nom prenom naissance
1 Scott Ridley 1943
nom naissance
2 Tarantino Quentin 1963
Tarantino 1963
3 Carpenter John 1948 =⇒
Cameron 1954
4 Woo John 1946
Fincher 1962
5 Cameron James 1954
6 Fincher David 1962
7 Winner Michael 1935
6 / 23
SELECT FROM WHERE : projection et sélection
Ex :
SELECT nom FROM realisateur
WHERE prenom = 'John';
-- nom des réalisateurs dont le prénom est John, valide même sans projeter prenom
realisateur
idDir nom prenom naissance
1 Scott Ridley 1943
2 Tarantino Quentin 1963 nom
3 Carpenter John 1948 =⇒ Carpenter
4 Woo John 1946 Woo
5 Cameron James 1954
6 Fincher David 1962
7 Winner Michael 1935
6 / 23
Quelques conditions utiles
SELECT ∗ FROM realisateur
Égalité et différence : =, <> WHERE prenom = 'John';
Sous PostgreSQL, les NULL sont représentés par des cases vides
Attention, NULL n’est ni zéro, ni la chaine vide, ni un espace blanc...
8 / 23
Exemple : NULL et tests
mouton
nom couleurPeau couleurLaine
Dolly blanc blanc
Sheepy
Chris blanc noir
Buttermilk noir
Lambo noir noir
9 / 23
Exemple : NULL et tests
mouton
nom couleurPeau couleurLaine
Dolly blanc blanc
Sheepy
Chris blanc noir
Buttermilk noir
Lambo noir noir
9 / 23
Exemple : NULL et tests
mouton
nom couleurPeau couleurLaine
Dolly blanc blanc
Sheepy
Chris blanc noir
Buttermilk noir
Lambo noir noir
9 / 23
Exemple : NULL et tests
mouton
nom couleurPeau couleurLaine
Dolly blanc blanc
Sheepy
Chris blanc noir
Buttermilk noir
Lambo noir noir
9 / 23
Exemple : NULL et tests
mouton
nom couleurPeau couleurLaine
Dolly blanc blanc
Sheepy
Chris blanc noir
Buttermilk noir
Lambo noir noir
9 / 23
Exemple : NULL et tests
mouton
nom couleurPeau couleurLaine
Dolly blanc blanc
Sheepy
Chris blanc noir
Buttermilk noir
Lambo noir noir
10 / 23
Exemple : NULL et partitions
produit
ref libelle couleur prix
45 bureau noir 110
73 classeur 9.99
13 classeur rouge 12.99
29 étagère merisier 45.99
14 fauteuil rouge 99.95
27 moniteur 139.99
15 clavier noir 29.99
10 / 23
Exemple : NULL et partitions
produit
ref libelle couleur prix
45 bureau noir 110
73 classeur 9.99
13 classeur rouge 12.99
29 étagère merisier 45.99
14 fauteuil rouge 99.95
27 moniteur 139.99
15 clavier noir 29.99
10 / 23
Exemple : NULL et partitions
produit
ref libelle couleur prix
45 bureau noir 110
73 classeur 9.99
13 classeur rouge 12.99
29 étagère merisier 45.99
14 fauteuil rouge 99.95
27 moniteur 139.99
15 clavier noir 29.99
10 / 23
Exemple : NULL et partitions
produit
ref libelle couleur prix
45 bureau noir 110
73 classeur 9.99
13 classeur rouge 12.99
29 étagère merisier 45.99
14 fauteuil rouge 99.95
27 moniteur 139.99
15 clavier noir 29.99
10 / 23
DISTINCT : suppression des doublons
Ex :
SELECT DISTINCT nom,prenom FROM realisateur;
realisateur
idDir nom prenom naissance
nom prenom
1 Scott Ridley 1943
Scott Ridley
2 Tarantino Quentin 1963
Tarantino Quentin
3 Carpenter John 1948
Carpenter John
4 Woo John 1946
=⇒ Woo John
5 Cameron James 1954
Cameron James
6 Fincher David 1962
Fincher David
7 Winner Michael 1935
Winner Michael
8 Lynch David 1946
Lynch David
9 McQueen Steve 1930
McQueen Steve
10 McQueen Steve 1969
11 / 23
DISTINCT : suppression des doublons
Ex :
SELECT DISTINCT prenom FROM realisateur;
realisateur
idDir nom prenom naissance
1 Scott Ridley 1943 prenom
2 Tarantino Quentin 1963 Ridley
3 Carpenter John 1948 Quentin
4 Woo John 1946 John
=⇒
5 Cameron James 1954 James
6 Fincher David 1962 David
7 Winner Michael 1935 Michael
8 Lynch David 1946 Steve
9 McQueen Steve 1930
10 McQueen Steve 1969
11 / 23
SELECT avec opérations sur les valeurs
Ex :
SELECT nom,prenom FROM realisateur
WHERE (2018 - naissance) <= 60;
realisateur
idDir nom prenom naissance
1 Scott Ridley 1943
2 Tarantino Quentin 1963
nom prenom
3 Carpenter John 1948 =⇒
Tarantino Quentin
4 Woo John 1946
Fincher David
5 Cameron James 1954
6 Fincher David 1962
7 Winner Michael 1935
12 / 23
SELECT avec opérations sur les valeurs
Ex :
SELECT prenom||' '||nom AS nomComplet, 2018 - naissance AS age
FROM realisateur;
realisateur
idDir nom prenom naissance nomComplet age
1 Scott Ridley 1943 Ridley Scott 75
2 Tarantino Quentin 1963 Quentin Tarantino 55
3 Carpenter John 1948 =⇒ John Carpenter 70
4 Woo John 1946 John Woo 72
5 Cameron James 1954 James Cameron 64
6 Fincher David 1962 David Fincher 54
7 Winner Michael 1935 Michael Winner 83
12 / 23
SELECT sur plusieurs tables
Il est possible d’indiquer plusieurs tables dans la clause FROM
La requête est effectuée sur le produit cartésien des tables en entrée
Attention, ce n’est pas, en général, le résultat désiré (voir exemple)
Ex :
film realisateur
idF titre annee idDir idDir nom prenom naissance
1 Alien 1979 1 1 Scott Ridley 1943
2 Reservoir Dogs 1992 2 2 Tarantino Quentin 1963
4 Volte-face 1997 4 3 Carpenter John 1948
5 Pulp Fiction 1995 2 4 Woo John 1946
Ex :
film realisateur
idF titre annee idDir idDir nom prenom naissance
1 Alien 1979 1 1 Scott Ridley 1943
2 Reservoir Dogs 1992 2 2 Tarantino Quentin 1963
4 Volte-face 1997 4 3 Carpenter John 1948
5 Pulp Fiction 1995 2 4 Woo John 1946
14 / 23
Jointure : un produit cartésien filtré
Sélection des lignes pertinentes dans une requête sur plusieurs tables
Deux syntaxes équivalentes :
SELECT colonnes FROM tab1, tab2 WHERE condition
SELECT colonnes FROM tab1 JOIN tab2 ON condition
Notation pointée table.colonne si deux colonnes ont le même nom
Ex :
film realisateur
idF titre annee idDir idDir nom prenom naissance
1 Alien 1979 1 1 Scott Ridley 1943
2 Reservoir Dogs 1992 2 2 Tarantino Quentin 1963
4 Volte-face 1997 4 3 Carpenter John 1948
5 Pulp Fiction 1995 2 4 Woo John 1946
14 / 23
Jointure naturelle
Ex :
film realisateur
idF titre annee idDir idDir nom prenom naissance
1 Alien 1979 1 1 Scott Ridley 1943
2 Reservoir Dogs 1992 2 2 Tarantino Quentin 1963
4 Volte-face 1997 4 3 Carpenter John 1948
5 Pulp Fiction 1995 2 4 Woo John 1946
15 / 23
Auto-jointure d’une table
Auto-jointure : jointure d’une table avec elle-même
Attention à donner un nom différent à chaque occurence de la table
Ex : film
idF titre annee idDir
1 Alien 1979 1
2 Reservoir Dogs 1992 2
4 Volte-face 1997 4
5 Pulp Fiction 1995 2
6 Terminator 1984 5
8 The Game 1997 6
9 The Game 1970 7
16 / 23
Auto-jointure d’une table
Auto-jointure : jointure d’une table avec elle-même
Attention à donner un nom différent à chaque occurence de la table
Ex : film
idF titre annee idDir
1 Alien 1979 1
2 Reservoir Dogs 1992 2
4 Volte-face 1997 4
5 Pulp Fiction 1995 2
6 Terminator 1984 5
8 The Game 1997 6
9 The Game 1970 7
titre1 titre2
Volte-face The Game
The Game Volte-face
16 / 23
Auto-jointure d’une table
Auto-jointure : jointure d’une table avec elle-même
Attention à donner un nom différent à chaque occurence de la table
Ex : film
idF titre annee idDir
1 Alien 1979 1
2 Reservoir Dogs 1992 2
4 Volte-face 1997 4
5 Pulp Fiction 1995 2
6 Terminator 1984 5
8 The Game 1997 6
9 The Game 1970 7
titre1 titre2
Volte-face The Game
16 / 23
Exercice : jointures
On considère le schéma relationnel :
17 / 23
Jointure externe
18 / 23
Jointure externe
18 / 23
Jointure externe
18 / 23
Jointure externe
18 / 23
Exemple : jointure externe
etudiant
num nom prenom stage
1 Turing Alan code intitule numEtud
2 Einstein Albert 27 Anneaux exotiques 3
3 Emmy Noether 18 Autour de l’eau 4
4 Lavoisier Antoine 13 Cryptanalyse appliquée 1
5 Clément Ader
Autres exemples :
Relevé de notes incluant les matières qui n’ont pas été évaluées
Planning incluant les créneaux horaires qui ne sont pas occupés
19 / 23
Opérations ensemblistes
Opérations ensemblistes pour combiner deux requêtes Q1 et Q2 :
Q1 UNION Q2 : lignes renvoyées soit par Q1 soit par Q2
Q1 INTERSECT Q2 : lignes renvoyées à la fois par Q1 et par Q2
Q1 EXCEPT Q2 : lignes renvoyées par Q1 mais pas par Q2
Remarques :
Q1 et Q2 doivent être compatibles
Q1 et Q2 doivent renvoyer autant de colonnes
Les types des colonnes correspondantes doivent être compatibles
Les opérations ensemblistes suppriment les doublons
Ex :
SELECT libelle FROM produit
WHERE couleur = 'noir'
INTERSECT
SELECT libelle FROM produit
WHERE couleur = 'rouge';
-- produits existant à la fois en rouge et en noir
20 / 23
Opérations ensemblistes
Opérations ensemblistes pour combiner deux requêtes Q1 et Q2 :
Q1 UNION Q2 : lignes renvoyées soit par Q1 soit par Q2
Q1 INTERSECT Q2 : lignes renvoyées à la fois par Q1 et par Q2
Q1 EXCEPT Q2 : lignes renvoyées par Q1 mais pas par Q2
Remarques :
Q1 et Q2 doivent être compatibles
Q1 et Q2 doivent renvoyer autant de colonnes
Les types des colonnes correspondantes doivent être compatibles
Les opérations ensemblistes suppriment les doublons
Ex :
SELECT num, nom, prenom
FROM etudiant
EXCEPT
SELECT num, nom, prenom
FROM etudiant NATURAL JOIN stage;
-- étudiants qui n'effectuent pas de stage
20 / 23
♣ ALL : opérations ensemblistes avec doublons
Option ALL : variante avec doublons des opérations ensemblistes
La multiplicité (nombre de copies) de chaque ligne du résultat est :
Q1 UNION ALL Q2 : la somme des multiplicitées
Q1 INTERSECT ALL Q2 : le minimum des multiplicités
Q1 EXCEPT ALL Q2 : la différence des multiplicités
produit couleur
chaise bois
SELECT ∗ FROM panier1 chaise bois
UNION ALL table noir
table noir
SELECT ∗ FROM panier2 chaise bois
-- le contenu total des deux paniers chaise rouge
chaise bois
table noir
21 / 23
♣ ALL : opérations ensemblistes avec doublons
Option ALL : variante avec doublons des opérations ensemblistes
La multiplicité (nombre de copies) de chaque ligne du résultat est :
Q1 UNION ALL Q2 : la somme des multiplicitées
Q1 INTERSECT ALL Q2 : le minimum des multiplicités
Q1 EXCEPT ALL Q2 : la différence des multiplicités
21 / 23
♣ ALL : opérations ensemblistes avec doublons
Option ALL : variante avec doublons des opérations ensemblistes
La multiplicité (nombre de copies) de chaque ligne du résultat est :
Q1 UNION ALL Q2 : la somme des multiplicitées
Q1 INTERSECT ALL Q2 : le minimum des multiplicités
Q1 EXCEPT ALL Q2 : la différence des multiplicités
21 / 23
ORDER BY : trier les résultats d’une requête
film
idF titre annee idDir
1 Alien 1979 1
2 Reservoir Dogs 1992 2
4 Volte-face 1997 4
5 Pulp Fiction 1995 2
6 Terminator 1984 5
8 The Game 1997 6
9 The Game 1970 7
22 / 23
ORDER BY : trier les résultats d’une requête
film
idF titre annee idDir
9 The Game 1970 7
1 Alien 1979 1
6 Terminator 1984 5
2 Reservoir Dogs 1992 2
5 Pulp Fiction 1995 2
4 Volte-face 1997 4
8 The Game 1997 6
22 / 23
ORDER BY : trier les résultats d’une requête
film
idF titre annee idDir
9 The Game 1970 7
1 Alien 1979 1
6 Terminator 1984 5
2 Reservoir Dogs 1992 2
5 Pulp Fiction 1995 2
8 The Game 1997 6
4 Volte-face 1997 4
22 / 23
ORDER BY : trier les résultats d’une requête
film
idF titre annee idDir
8 The Game 1997 6
4 Volte-face 1997 4
5 Pulp Fiction 1995 2
2 Reservoir Dogs 1992 2
6 Terminator 1984 5
1 Alien 1979 1
9 The Game 1970 7
22 / 23
LIMIT et OFFSET : choix du nombre de lignes du résultat
film
idF titre annee idDir
8 The Game 1997 6
4 Volte-face 1997 4
5 Pulp Fiction 1995 2
2 Reservoir Dogs 1992 2
6 Terminator 1984 5
1 Alien 1979 1
9 The Game 1970 7
23 / 23
LIMIT et OFFSET : choix du nombre de lignes du résultat
film
idF titre annee idDir
8 The Game 1997 6
4 Volte-face 1997 4
5 Pulp Fiction 1995 2
23 / 23
LIMIT et OFFSET : choix du nombre de lignes du résultat
film
idF titre annee idDir
5 Pulp Fiction 1995 2
2 Reservoir Dogs 1992 2
6 Terminator 1984 5
23 / 23