Regarde cette vidéo et gagne facilement jusqu'à 15 Lumniz en te connectant !
Il n’y a pas de Lumniz à gagner car tu as déjà vu ce contenu. Ne t’inquiète pas, il y a plein d’autres vidéos, jeux, quiz ou articles intéressants à explorer et toujours plus de Lumniz à remporter.
Interrogation d’une base de données relationnelle
Les cours Lumni - LycéeDans ce cours, Jean-Loup, professeur de numérique et sciences informatiques, se demande comment extraire des informations d’une base de données. Avec des « requêtes » écrites en SQL ! Une requête est une interrogation sur des bases de données.
Tout d'abord, il revient sur la notion de schéma relationnel et les notions de clef primaires et secondaires. Puis, il explique comment faire des requêtes sur une seule table ou sur deux tables en SQL. Après avoir vu les mots clefs SELECT, WHERE, JOIN, ORDER BY, il termine en évoquant les agrégations d’attribut avec le mot clef COUNT. Deux QCM permettent de vérifier que les notions abordées ont été comprises.
Retrouvez le support de cours en PDF et la première partie du cours sur la définition d'une base de données relationelle.
Requête sur une seule table
On interroge une seule table de la base de données, celles des communes.
Colonnes
La requête la plus simple est SELECT * FROM communes.
Elle permet d'interroger toutes la table sur une requête « communes ».
Mais si je ne veux pas toutes les colonnes, au lieu de mettre * (qui veut dire tout), je mets la liste de tous les attributs qui m’intéressent.
SELECT INSEE, NOM, population FROM communes
Cette opération de suppression des colonnes s’appelle une projection.
On peut aussi ajouter une colonne en la calculant à partir des données présentes dans la table. Par exemple, pour avoir le taux de boulangeries par habitant, on ajoute la formule boulangeries/population et le nom de la colonne avec le mot-clé AS. Ce mot-clé permet aussi de renommer les colonnes.
→ SELECT INSEE, NOM, population, boulangeries/population AS Taux FROM communes
Mais il ne faut pas oublier de faire attention au type des données et aux domaines des différentes colonnes. Dans notre exemple, on divise des entiers par des entiers. Il faut donc modifier l’un des domaines en le diviser par 1,0, car cela ne change pas la valeur.
→ SELECT INSEE, NOM, population, boulangeries*1.0/population AS Taux FROM communes
On peut aussi multiplier le nombre de boulangerie par 10 000 afin d’obtenir le nombre de boulangerie pour 10 000 habitants.
→ SELECT INSEE, NOM, population AS habitants, boulangeries*10000/population AS B10000 FROM communes
Listes
Pour faire le tri dans les lignes de ma table, le mot-clé WHERE me permet de préciser une condition.
Par exemple, je ne veux que les communes qui ont moins de 5 boulangeries :
→ SELECT * FROM communes WHERE boulangeries <=5
On peut aussi additionner les conditions. Comme pour avoir, les communes qui ont moins de 5 boulangeries et plus de 4 000 habitants.
→ SELECT * FROM communes WHERE boulangeries <=5 AND population > 4000
Requête sur deux tables
On a trois tables dans notre base de données, et le but est d'extraire de l'information de 2 tables : départements et régions.
Le produit cartésien
La requête la plus simple sur 2 tables est le produit cartésien CROSS JOIN.
→ SELECT * FROM departements CROSS JOIN regions
Dans notre exemple, les colonnes de la table départements sont complétées par les colonnes de la table régions. On a donc une ligne avec un département et une région, mais ils n’ont pas forcément de liens entre eux.
Jointure
Comment faire pour n’avoir que les lignes dont les régions correspondent aux départements ? En ne gardant les mêmes valeurs des colonnes identiques !
On parle alors de jointure interne, qui s’écrit avec les mots-clés JOIN et ON. Ce dernier permet de préciser une condition. Dans notre exemple, il faut que les colonnes REG des départements et des régions soient identiques. Ce qui donne :
→ SELECT * FROM departements JOIN regions ON departements.REG = regions.REG
Grâce au mot-clé AS, on peut renommer une table et simplifier notre requête.
→ SELECT * FROM departements AS d JOIN regions AS r ON d.REG = r.REG
Jointure avec projection
On a encore des colonnes identiques dans ma requête. On peut indiquer la colonne choisie, comme d.REG, pour ne garder que la colonne de la table des départements. Mais on a également 2 colonnes avec le même attribut NOM, l’une avec les départements et l’autre avec les régions. On utilise encore AS pour les renommer en NOM_DEP et NOM_REG.
→ SELECT DEP, d.REG, d.NOM AS NOM_DEP, r.NOM AS NOM_REG
FROM departements AS d JOIN regions AS r ON d.REG = r.REG
On peut aussi ajouter une condition pour ne garder que certaines lignes. Par exemple, on peut demander à n’avoir que les départements de la région Normandie avec WHERE r.NOM = 'Normandie'.
SELECT DEP, d.REG, d.NOM AS NOM_DEP, r.NOM AS NOM_REG
FROM departements AS d JOIN regions AS r ON d.REG = r.REG
WHERE r.NOM = 'Normandie'
Pour classer les numéros de département, on peut ajouter ORDER BY DEP.
SELECT DEP, d.NOM AS NOM_DEP
FROM departements AS d JOIN regions AS r ON d.REG = r.REG
WHERE r.NOM = 'Normandie'
ORDER BY DEP
Agrégation
L’agrégation est une requête que l’on reconnaît à la fonction d’agrégation COUNT.
On peut l’utiliser pour avoir le nombre de lignes dans une table, comme par exemple dans celle des communes.
SELECT COUNT(*) FROM communes
On peut faire plusieurs agrégations. Comme pour avoir la population totale de toutes les communes avec SUM(population) ou le nombre mayen de boulangerie avec AVG(boulangeries), ou encore la valeur maximale d’une colonne en utilisant MAX.
SELECT COUNT(*), SUM(population), AVG(boulangeries), MAX(boulangeries)
FROM communes
On peut aussi faire une agrégation sur une partie de la table, grâce au mot-clé WHERE. On aura alors l’agrégation seulement sur les lignes qui vérifient la condition. Dans notre exemple, on peut avoir le nombre de communes qui s’appelle Saint-Loup en France.
SELECT COUNT(*) FROM communes WHERE NOM = 'Saint-Loup'
Réalisateur : Didier Fraisse
Producteur : France tv studio
Année de copyright : 2020
Année de production : 2020
Année de diffusion : 2020
Publié le 26/11/20
Modifié le 23/06/23
Ce contenu est proposé par