Les prénoms en France au XX-ème siècle⚓︎
On considère dans ce sujet la base de données prenoms
. Cette base ne comporte qu'une table, naissances
, qui contient des informations décrivant des prénoms des enfants nés en France au XX-ième siècle.
Cette base est téléchargeable au format sqlite ici.
Les attributs de cette table sont :
-
id
: l'identifiant de l'entrée (clé primaire); -
sexe
: le sexe de l'enfant au format texte :Fille
ouGarçon
; -
prenom
: le prénom de l'enfant en lettres majuscules ; -
annee_naissance
: l'année de naissance (nombre entier) ; -
nombre
: le nombre d'enfants nés durant l'année en question et portant ce prénom.
On rappelle que la structure générale d'une requête SQL
est :
SELECT attribut_1, attribut_2, ...
FROM table
WHERE condition;
Toutefois :
- il est possible d'obtenir tous les attributs en faisant
SELECT *
; - la condition
WHERE condition
n'est pas indispensable si l'on souhaite obtenir toutes les entrées de la table. On peut alors se contenter deSELECT attributs FROM table
; - il est possible de rajouter d'autres arguments qui seront présentés au fil de ce document.
-
Afficher les dix premières lignes de la table.
Astuce
Utiliser
LIMIT 10
à la fin de la requête afin de n'afficher que les 10 premiers résultats. Il y a beaucoup de lignes dans cette table !Votre réponse
Réponse
🗂️ Requête SQLSELECT * FROM naissances LIMIT 10;
-
Afficher les lignes correspondant à l'année 1923. Là encore, mieux vaut ne demander que les 10 premières lignes...
Votre réponse
Réponse
On peut faire :
🗂️ Requête SQLSELECT * FROM naissances WHERE annee_naissance = 1923;
Ou, en limitant le nombre de réponses :
🗂️ Requête SQLSELECT * FROM naissances WHERE annee_naissance = 1923 LIMIT 10;
-
Afficher les prénoms des filles nées en 1978.
Votre réponse
Réponse
🗂️ Requête SQLSELECT prenom FROM naissances WHERE sexe = 'Fille' AND annee_naissance = 1978;
-
Combien de fois le prénom Nicolas a-t-il été donné en 1907 ?
Astuce
On fera attention aux majuscules !
Votre réponse
Réponse
🗂️ Requête SQLSELECT sexe, nombre FROM naissances WHERE prenom = 'NICOLAS' AND annee_naissance = 1907;
On obtient deux lignes car Nicolas peut aussi être un prénom de fille !
On peut aussi utiliser la fonction d'aggréation
sum()
:🗂️ Requête SQLSELECT sum(nombre) FROM naissances WHERE prenom = 'NICOLAS' AND annee_naissance = 1907;
-
Afficher les 10 prénoms de fille les plus donnés en 1978 rangés dans l'ordre décroissant du nombre de fois où ils ont été donnés.
Astuce
On peut trier les résultats en ajoutant
ORDER BY attribut ASC
en fin de requête.ASC
signifieASCENDING
et donc l'ordre croissant. On utiliseDESC
pour l'ordre décroissant.Votre réponse
Réponse
🗂️ Requête SQLSELECT prenom FROM naissances WHERE sexe = 'Fille' AND annee_naissance = 1978 ORDER BY nombre DESC LIMIT 10;
-
Afficher les lignes des prénoms de garçons donnés entre 1960 et 1969 (inclus l'un et l'autre). Utiliser un
AND
pour tester l'encadrement des années.Votre réponse
Réponse
🗂️ Requête SQLSELECT * FROM naissances WHERE sexe = 'Garçon' AND annee_naissance >= 1960 AND annee_naissance <= 1969;
Il est intéressant de remarquer au passage que la condition
1960 <= annee_naissance <= 1969
ne renvoie pas le même résultat. -
Afficher le nombre de prénoms différents de garçons donnés en 1938.
Coup de pouce
On pourra utiliser la fonction
COUNT
.Votre réponse
Réponse
🗂️ Requête SQLSELECT COUNT(*) as differents FROM naissances WHERE sexe = 'Garçon' AND annee_naissance = 1938;
Le
as differents
est un alias, il permet de renommer un attribut ou un résultat (ici le décompte total). -
Afficher le nombre de naissances de garçons observées en 1938.
Coup de pouce
Utiliser la fonction
SUM
afin d'additionner les nombres d'enfants portant chaque prénom.Votre réponse
Réponse
🗂️ Requête SQLSELECT SUM(nombre) FROM naissances WHERE sexe = 'Garçon' AND annee_naissance = 1938;
-
Afficher le nombre de filles et le nombre de garçons apparaissant dans la table.
Coup de pouce
Il faut sommer des valeurs et les regrouper selon le sexe de l'enfant. On utilise pour cela l'instruction
GROUP BY
.Votre réponse
Réponse
🗂️ Requête SQLSELECT sexe, SUM(nombre) FROM naissances GROUP BY sexe;
-
Quel est le prénom, pour un certain sexe, en distinguant par exemple "Camille (fille)" et "Camille (garçon)", qui a été le plus donné durant une année donnée ? En quelle année ?
Astuce
Utilisez une requête de la forme :
🗂️ Requête SQLSELECT ..., ..., ..., nombre FROM naissances ORDER BY ... DESC LIMIT ...;
Votre réponse
Réponse
On peut saisir :
🗂️ Requête SQLSELECT sexe, prenom, annee_naissance, nombre FROM naissances ORDER BY nombre DESC LIMIT 1;
Une autre approche est d'utiliser deux requêtes imbriquées :
🗂️ Requête SQLSELECT sexe, prenom, annee_naissance, nombre FROM naissances WHERE nombre = (SELECT MAX(nombre) FROM naissances);
Notons enfin que
sqlite
autorise cette approche :🗂️ Requête SQLSELECT sexe, prenom, annee_naissance, MAX(nombre) FROM naissances;
Cette instruction risque néanmoins de ne pas s'exécuter dans d'autres systèmes de gestion de bases de données.
-
En quelle année y-a-t-il eu le plus de naissances ?
Astuce
Regrouper les résultats par année, les trier et n'afficher que le premier !
Votre réponse
Réponse
🗂️ Requête SQLSELECT annee_naissance, SUM(nombre) as somme FROM naissances GROUP BY annee_naissance ORDER BY somme DESC LIMIT 1;
-
Quels sont les 10 prénoms les plus donnés en France au cours du XX-ème siècle ?
Votre réponse
Réponse
🗂️ Requête SQLSELECT prenom, SUM(nombre) as nb FROM naissances GROUP BY prenom ORDER BY nb DESC LIMIT 10;