Vidéo : Interrogation d’une base de données relationnelle

icu.next-video

Contenu proposé par

France Télévisions
Emissions Lumni27:42Publié le 26/11/2020

Interrogation d’une base de données relationnelle

Les cours Lumni - Lycée

Dans 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 26/11/20

Ce contenu est proposé par