Aller au contenu

👶 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 ou Garç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 :

🗂️ Requête SQL
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 de SELECT attributs FROM table ;
  • il est possible de rajouter d'autres arguments qui seront présentés au fil de ce document.
  1. 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 SQL
    SELECT *
    FROM naissances
    LIMIT 10;
    
  2. 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 SQL
    SELECT * 
    FROM naissances
    WHERE annee_naissance = 1923;
    

    Ou, en limitant le nombre de réponses :

    🗂️ Requête SQL
    SELECT * 
    FROM naissances
    WHERE annee_naissance = 1923
    LIMIT 10;
    
  3. Afficher les prénoms des filles nées en 1978.

    Votre réponse


    
    
    Réponse
    🗂️ Requête SQL
    SELECT prenom
    FROM naissances
    WHERE sexe = 'Fille' AND annee_naissance = 1978;
    
  4. 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 SQL
    SELECT 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 SQL
    SELECT sum(nombre)
    FROM naissances
    WHERE prenom = 'NICOLAS' AND annee_naissance = 1907;
    

  5. 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 signifie ASCENDING et donc l'ordre croissant. On utilise DESC pour l'ordre décroissant.

    Votre réponse


    
    
    Réponse
    🗂️ Requête SQL
    SELECT prenom
    FROM naissances
    WHERE sexe = 'Fille' AND annee_naissance = 1978
    ORDER BY nombre DESC
    LIMIT 10;
    
  6. 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 SQL
    SELECT *
    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.

  7. 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 SQL
    SELECT 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).

  8. 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 SQL
    SELECT SUM(nombre)
    FROM naissances
    WHERE sexe = 'Garçon' AND annee_naissance = 1938;
    
  9. 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 SQL
    SELECT sexe, SUM(nombre)
    FROM naissances
    GROUP BY sexe;
    
  10. 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 SQL
    SELECT ..., ..., ..., nombre
    FROM naissances
    ORDER BY ... DESC
    LIMIT ...;
    

    Votre réponse


    
    
    Réponse

    On peut saisir :

    🗂️ Requête SQL
    SELECT 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 SQL
    SELECT sexe, prenom, annee_naissance, nombre
    FROM naissances
    WHERE nombre = (SELECT MAX(nombre) FROM naissances);
    

    Notons enfin que sqlite autorise cette approche :

    🗂️ Requête SQL
    SELECT 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.

  11. 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 SQL
    SELECT annee_naissance, SUM(nombre) as somme
    FROM naissances
    GROUP BY annee_naissance
    ORDER BY somme DESC
    LIMIT 1;
    
  12. 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 SQL
    SELECT prenom, SUM(nombre) as nb
    FROM naissances
    GROUP BY prenom
    ORDER BY nb DESC
    LIMIT 10;