Académique Documents
Professionnel Documents
Culture Documents
Poly BDD
Poly BDD
PISSARRO PONTOISE
2022-2023
Bases De Données
2 Le langage SQL 2
2.1 Exemples de requêtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.2 En pratique : SQLite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
4 Requêtes SQL 3
4.1 Requête simples : une seule table . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
4.1.1 Sélection d’un ou plusieurs attributs (colonne) d’une table (projection) . . 3
4.1.2 Sélection des enregistrements d’une table qui vérifient certaines conditions
(sélection) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
4.1.3 Combinaison des deux précédents . . . . . . . . . . . . . . . . . . . . . . . 4
4.1.4 Filtrage, tri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
4.1.5 Renommage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
4.2 Opérateurs ensemblistes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
4.3 Requête portant sur plusieurs tables . . . . . . . . . . . . . . . . . . . . . . . . . 5
4.3.1 Produit cartésien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
4.3.2 Jointure sur deux tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
4.3.3 Jointure sur trois tables ou plus . . . . . . . . . . . . . . . . . . . . . . . . 6
4.3.4 Autojointure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4.4 Fonctions d’agrégation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4.4.1 MIN, MAX, AVG, SUM, COUNT . . . . . . . . . . . . . . . . . . . . . . 6
4.4.2 Agrégation : GROUP BY . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
4.4.3 HAVING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
4.5 Requêtes imbriquées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
6 En résumé 9
6.1 Requête simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
6.2 Jointure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
6.3 Liste des mots clés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1 Un exemple de base de données : Pissarro boutique
Trois tables :
clients
numclient nom adresse
1 Camille Cergy
2 Daniel Pontoise
... ... ...
articles
reference designation prix
r1 cahier 4.5
r2 colle 3
... ... ...
ventes
reference numclient date
r1 1 20220901
r5 2 20220902
... ... ...
2 Le langage SQL
Structured Query Language
en français : langage de requête structurée
2
https://sqliteonline.com/
• En local :
SQLite Manager
Module de Firefox, gratuit, installation en 30s
4 Requêtes SQL
4.1 Requête simples : une seule table
SELECT (DISTINCT)... FROM ... WHERE ... ORDER BY ... LIMIT ... OFFSET ...
l’ordre est important.
Insensible à la casse (par convention, on écrit les mots clés plutôt en majuscule)
4.1.2 Sélection des enregistrements d’une table qui vérifient certaines conditions (sélection)
- SELECT * FROM table WHERE condition
- SELECT * FROM table WHERE condition1 AND condition2
- SELECT * FROM table WHERE condition1 OR condition2
condition est un booléen obtenu par exemple avec les opérateurs de comparaison :
= (égalité), <> (différent, <,<=,>,>=.
On peut composer les booléens avec les opérateurs AND, OR et NOT
Exemples :
- SELECT * FROM clients WHERE adresse = "Cergy"
- SELECT * FROM clients WHERE adresse = "Cergy" OR adresse = "Paris"
- SELECT * FROM ventes WHERE date >= 20220101 AND date <= 20221231
3
4.1.3 Combinaison des deux précédents
Sélection d’une ou plusieurs colonnes des enregistrements d’une table qui vérifient certaines
conditions :
- SELECT a1 , a2 , . . . , an FROM table WHERE condition
- SELECT DISTINCT a1 , a2 , . . . , an FROM table WHERE condition
Exemples :
- SELECT numclient, nom FROM clients WHERE adresse = "Paris"
- SELECT DISTINCT date FROM ventes WHERE numclient = 5
Exemples :
- SELECT numclient, nom FROM clients WHERE adresse = "Paris" ORDER BY nom
- SELECT * FROM articles ORDER BY prix ASC LIMIT = 5
- SELECT * FROM articles ORDER BY prix ASC LIMIT = 5 OFFSET = 5
4.1.5 Renommage
Opérations sur deux tables A et B de même structures (en général, résultats de requête) requêtes
Exemples :
- SELECT nom FROM clients WHERE adresse = "Paris"
UNION
SELECT nom FROM clients WHERE adresse = "Cergy"
- SELECT numclient FROM ventes
EXCEPT
SELECT numclient FROM clients
Exercice :
Écrire une requête SQL retournant la liste des désignations des articles dont le prix est stricte-
ment supérieur à 10 euros.
4
4.3 Requête portant sur plusieurs tables
4.3.1 Produit cartésien
Création d’une table formée par toutes les combinaisons possibles (l1 , l2 ) de lignes l1 dela pre-
mière table et de lignes l2 de la seconde table.
- SELECT * FROM table1, table2
Exemple :
- SELECT * FROM clients, ventes
Deux tables :
clients ventes
numclient nom adresse reference numclient date
1 Camille Cergy r1 1 20220901
2 Daniel Pontoise r5 2 20220902
Leur produit cartésien :
clients × ventes
numclient nom adresse reference numclient date
1 Camille Cergy r1 1 20220901
1 Camille Cergy r5 2 20220902
2 Daniel Pontoise r1 1 20220901
2 Daniel Pontoise r5 2 20220902
Deux tables :
clients ventes
numclient nom adresse reference numclient date
1 Camille Cergy r1 1 20220901
2 Daniel Pontoise r5 2 20220902
Leur jointure sur numclient :
clients ./clients.numclient=ventes.numclient ventes
numclient nom adresse reference numclient date
1 Camille Cergy r1 1 20220901
2 Daniel Pontoise r5 2 20220902
Exemples :
- Liste des clients ayant fait une commande après le 20 septembre 2022 :
◦ SELECT DISTINCT clients.nom FROM clients JOIN ventes
ON clients.numclient = ventes.numclient
WHERE ventes.date > 20220920
◦ SELECT DISTINCT c.nom FROM clients c JOIN ventes v
ON c.numclient = v.numclient
WHERE v.date > 20220920
◦ SELECT DISTINCT nom FROM clients JOIN ventes
ON clients.numclient = ventes.numclient
WHERE date > 20220920
5
◦ SELECT DISTINCT clients.nom FROM clients, ventes
WHERE clients.numclient = ventes.numclient AND ventes.date > 20220920
Exercice :
Écrire une requête SQL retournant la liste des désignations des articles achetés le 15/09/2022.
4.3.4 Autojointure
Jointure d’une table avec elle même.
Exemples :
- SELECT * FROM clients c JOIN clients d ON c.adresse=d.adresse
- Liste des couples de noms de clients habitant la même ville :
SELECT c.nom, d.nom, FROM clients c JOIN clients d
ON a.adresse = b.adresse WHERE a.nom <> b.nom
6
Exercice :
Écrire une requête SQL retournant le prix maximum d’un article.
4.4.3 HAVING
7
Association de type 1 − 1 : chaque élément de la première entité est associé à un unique
élément de la seconde entité et chaque élément de la seconde entité est associé à un
unique élément de la première entité.
Exemple : département ←→ préfecture
departement prefecture
numero codePrefecture
nomDepartement ville
Pour réaliser l’association, on rajoute une clé étrangère à l’une des deux tables :
departement
prefecture
numero
codePrefecture
nomDepartement
ville
codePrefecture
ou
prefecture
departement
codePrefecture
numero
ville
nomDepartement
numeroDepartement
Association de type 1 − ∗ : chaque élément de la première entité est associé à un unique
élément de la seconde entité et chaque élément de la seconde entité est associé à un
certain nombre d’éléments de la première entité.
Exemple : élève ←→ classe
eleve classe
INE identifiant
nom nom
Pour réaliser l’association, on rajoute une clé étrangère à la première table :
eleve
classe
INE
identifiant
nom
nom
identifiantClasse
Association de type ∗ − ∗ : chaque élément de la première entité est associé à un certain
nombre d’éléments de la seconde entité et chaque élément de la seconde entité est associé
à un certain nombre d’éléments de la première entité.
Exemple : chanteur ←→ chanson
chanteur chanson
identifiant identifiant
nom nom
On décompose l’association ∗ − ∗ en deux associations ∗ − 1 et 1 − ∗ en rajoutant une
table.
chanteur interpretation chanson
identifiant idChanteur identifiant
nom idChanson nom
Clé étrangère : un ou plusieurs attributs correspondant à la clé primaire d’une autre table
permettant l’association des deux tables.
Exercice :
quels sont les types d’associations de Pissarro Boutique ?
8
6 En résumé
6.1 Requête simple
SELECT (DISTINCT) liste d’attributs, fonctions d’attributs
FROM liste de tables, résultat d’un select
WHERE liste de conditions séparées par AND, OR, NOT
GROUP BY attribut
HAVING condition pouvant porter sur des fonction d’attribut
ORDER BY attribut
LIMIT entier
OFFSET entier
6.2 Jointure
SELECT (DISTINCT) liste d’attributs, fonctions d’attributs
FROM table1
JOIN table2
JOIN table3
ON conditions de jointure
WHERE liste de conditions séparées par AND, OR, NOT
GROUP BY attribut
HAVING condition pouvant porter sur des fonction d’attribut
ORDER BY attribut
LIMIT entier
OFFSET entier
• SELECT • HAVING • OR
• DISTINCT • ORDER BY • NOT
• * • LIMIT • AVG
• FROM • OFFSET • MIN
• WHERE • JOIN • MAX
• AS • ON • SUM
• GROUP BY • AND • COUNT