Vous êtes sur la page 1sur 9

MATH SPE MP

PISSARRO PONTOISE
2022-2023
Bases De Données

Table des matières


1 Un exemple de base de données : Pissarro boutique 2

2 Le langage SQL 2
2.1 Exemples de requêtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.2 En pratique : SQLite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

3 Vocabulaire des bases de données 3

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

5 Entités et associations, clé étrangère 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.1 Exemples de requêtes


SELECT ... FROM ... WHERE ...
• On veut la liste des noms des clients :
SELECT nom FROM clients
• On veut la liste des noms des clients qui habitent Cergy :
SELECT nom FROM clients WHERE adresse = "Cergy"
• On veut la liste des articles à vendre :
SELECT designation FROM articles
• On veut la liste des articles dont le prix est inférieur à 10 euro :
SELECT designation FROM articles WHERE prix < 10
• On veut la liste des références des articles vendu entre le 03/09/2022 et le 12/09/2022.
SELECT reference FROM ventes WHERE date <= 20220912 AND date >= 20220903
• On veut la liste des noms et adresses des 6 clients ayant dépensé le plus, avec pour chaque
client le montant de ses dépenses, classé par ordre décroissant de dépense :
SELECT c.nom, c.adresse, SUM(a.prix) FROM articles a
JOIN ventes v ON v.reference = a.reference
JOIN clients c ON c.numclient = v.numclient
GROUP BY c.numclient
ORDER BY SUM(a.prix) DESC
LIMIT 6

2.2 En pratique : SQLite


• En ligne :

2
https://sqliteonline.com/
• En local :
SQLite Manager
Module de Firefox, gratuit, installation en 30s

3 Vocabulaire des bases de données


Table ou Relation : tableau à 2 dimension, ex : articles.
Attribut : colonne d’une table, ex : designation.
Enregistrement : ligne d’une table.
Domaine : type d’un attribut, ex : le domaine de l’attribut designation est chaı̂ne de carac-
tère, celui de prix est flottant.
Shéma de table ou schéma de relation : structure de la table,
ex : le schéma de la table articles est :
(reference : clé primaire, chaı̂ne de caractère ; designation : chaı̂ne de caractère ; prix : flottant)
Clé primaire : attribut ou ensemble d’attribut qui permet de caractériser un enregistrement
de la table. Deux enregistrements différents ont des clés différentes.
Ex : reference est choisi comme clé primaire de la table articles. (souligné)

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.1 Sélection d’un ou plusieurs attributs (colonne) d’une table (projection)


- SELECT a1 , a2 , . . . , an FROM table
- SELECT DISTINCT a1 , a2 , . . . , an FROM table
Exemples :
- SELECT nom, adresse FROM clients
- SELECT DISTINCT adresse FROM clients
- SELECT * FROM articles

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

4.1.4 Filtrage, tri

ORDER BY a ASC : classement par ordre croissant de l’attribut a


ORDER BY a DESC : classement par ordre décroissant de l’attribut a
LIMIT n : limite la sortie à n enregistrements
OFFSET n : débute à partir du nième enregistrement

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

Modifie le nom d’un attribut d’une relation.


- SELECT nom AS n FROM clients
- SELECT nom n FROM clients
- SELECT nom FROM clients AS c
- SELECT nom FROM clients c

4.2 Opérateurs ensemblistes

Opérations sur deux tables A et B de même structures (en général, résultats de requête) requêtes

A UNION B : réunion des deux tables A et B


A INTERSECT B : intersection des deux tables A et B
A EXCEPT B : différence A \ B

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

4.3.2 Jointure sur deux tables


Création d’une table formée par toutes les combinaisons possibles (l1 , l2 ) de lignes l1 de la
première table et de lignes l2 de la seconde table pour lesquelles une condition est vérifiée.
C’est la base des requêtes portant sur deux tables
- SELECT * FROM table1 JOIN table2 ON condition
Exemples :
- SELECT * FROM clients JOIN ventes ON clients.numclient = ventes.numclient

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.3 Jointure sur trois tables ou plus


Opération qui porte sur plusieurs tables et retourne une table qui comporte les lignes des diffé-
rentes tables qui satisfont une condition.
C’est la base des requêtes portant sur plusieurs tables
- SELECT * FROM table1 JOIN table2 JOIN table3 ON condition
Exemple :
- SELECT * FROM clients JOIN articles JOIN ventes
ON clients.numclient=ventes.numclient AND articles.reference=ventes.reference
- SELECT * FROM clients c JOIN articles a JOIN ventes v
ON c.numclient=v.numclient AND a.reference=v.reference
- On veut la liste des noms et adresses des clients ayant acheté de la colle : SELECT DISTINCT
nom, adresse FROM clients c JOIN articles a JOIN ventes v
ON c.numclient=v.numclient AND a.reference=v.reference
WHERE designation="colle"
Exercice :
Écrire une requête SQL retournant la liste des désignations des articles achetés par le client
numéro 5.

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

4.4 Fonctions d’agrégation


4.4.1 MIN, MAX, AVG, SUM, COUNT
MIN : minimum des valeurs d’un attribu
MAX : maximum des valeurs d’un attribu
AVG : moyenne des valeurs d’un attribu
SUM : somme des valeurs d’un attribu
COUNT : nombre d’enregistrement
- SELECT f(a1) FROM table WHERE condition où f est l’une des fonctions précédentes
Exemples :
- Prix moyen des articles à vendre :
SELECT AVG(prix) FROM articles
- Nombre de clients habitant Cergy :
SELECT COUNT(nom) FROM clients WHERE adresse = "Cergy"

6
Exercice :
Écrire une requête SQL retournant le prix maximum d’un article.

4.4.2 Agrégation : GROUP BY

Regroupement des enregistrements d’une table.


- SELECT f(a1) FROM table WHERE condition GROUP BY a2
Exemples :
- Déterminer le nombre de client dans chaque ville :
SELECT adresse, count(nom) FROM clients GROUP BY adresse
Exercice :
Écrire une requête SQL retournant la liste noms des clients et le nombre d’achats effectués par
chaque client.

4.4.3 HAVING

HAVING permet de filtrer en utilisant les fonctions d’agrégation


- SELECT f(a1) FROM table WHERE condition2 GROUP BY a2 HAVING condition2
Exemple :
- Liste des clients ayant dépensé plus de 20 euros
SELECT nom, SUM(prix) FROM clients c JOIN ventes v JOIN articles a
ON c.numclient=v.numclient AND a.reference=v.reference
GROUP BY c.numclient HAVING SUM(prix)>20

4.5 Requêtes imbriquées


On fait une requête dans le résultat d’une requête ou bien on utilise le résultat d’une requête
(comme constante) dans un WHERE ou HAVING.
La sous-requête est écrite entre parenthèses
Exemples :
- SELECT nom FROM (SELECT * FROM clients)
- Désignation de l’article le plus cher :
SELECT designation FROM articles
WHERE prix = (SELECT MAX(prix) FROM articles)
Exercice : Écrire une requête SQL retournant la liste des désignations des articles dont le prix
est supérieur à la moyenne.

5 Entités et associations, clé étrangère


Entité : un ”objet” décrit par certaines propriétés (modélisation).
Par exemple, un client décrit par son identifiant, son nom et son adresse.
Association : une base de donnée consiste en l’association de plusieurs entités.

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

6.3 Liste des mots clés

• SELECT • HAVING • OR
• DISTINCT • ORDER BY • NOT
• * • LIMIT • AVG
• FROM • OFFSET • MIN
• WHERE • JOIN • MAX
• AS • ON • SUM
• GROUP BY • AND • COUNT

Vous aimerez peut-être aussi