Vous êtes sur la page 1sur 15

ITC − BDD − Corrigé PC/PSI

Page 1 / 15 Année 2023-2024

Informatique du Tronc commun


TD n°1 Les bases de données −
Corrigé
Exercice n°1 Base de données world
Nous utilisons une base de données nommée world qui comporte trois tables et dont le schéma relationnel
est le suivant :
city (Id, Name, CountryCode, Population)
country (Code, Name, Continent, SurfaceArea,IndepYear, Population, LifeExpectancy, GNP, Capital
countrylanguage (Id, CountryCode, Language, IsOfficial, Percentage)

Les attributs CountryCode sont des clés étrangères en références à la clé primaire Code de la table country.
Le champ Capital est une clé étrangère en référence à la clé primaire Id de la table city.

Une ligne de la table city est par exemple : (1, Kabul,AFG, 1780000) avec les types (entier, chaîne, chaîne,
entier).
Une ligne de la table country est par exemple : (AFG, Afghanistan, Asia, 652090.00,1919,22720000,45.9,5976.00,1)
avec les types (chaîne, chaîne, flottant, entier, flottant, flottant, entier). IndepYear donne la date d’indépendance
du pays, LifeExpectancy est l’espérance de vie, et GNP le produit national brut (growth national product).
Une ligne de la table countrylanguage est par exemple : (117,AFG,Pashto,T,52.4) avec les types (entier, chaîne,
chaîne, chaîne, flottant). IsOfficial informe de si la langue est officielle (T pour True), ou non officielle (F
pour False).

Écrire les requêtes en langage SQL permettant d’obtenir les données demandées dans chaque question :
R1. La superficie et la population de la France.

Solution:
1 SELECT SurfaceAera , Population
2 FROM country
3 WHERE Name = ’ France ’
SurfaceArea Population 551500.00 59225700

R2. La liste des continents.

Solution:
1 SELECT DISTINCT continent
2 FROM country
Continent North America Asia Africa Europe South America Oceania Antarctica

R3. Les villes dont la population est supérieure à six millions d’habitants, rangées de la plus peuplée à la moins
peuplée.

Solution:
1 SELECT Name
2 FROM city
3 WHERE Population >6000000
4 ORDER BY Population DESC
ITC − BDD − Corrigé PC/PSI
Page 2 / 15 Année 2023-2024

Name China India United States Indonesia Brazil Pakistan Russian Federation Bangladesh Japan Ni-
geria Mexico Germany Vietnam Philippines Egypt Iran Turkey Ethiopia Thailand United Kingdom
France Italy Congo, The Democratic Republic of the Ukraine South Korea Myanmar Colombia South
Africa Spain Poland Argentina Tanzania Algeria Canada Kenya Sudan Morocco Peru Uzbekistan Ve-
nezuela North Korea Nepal Iraq Afghanistan Romania Taiwan Malaysia Uganda Saudi Arabia Ghana
Mozambique Australia Sri Lanka Yemen Kazakstan Syria Madagascar Netherlands Chile Cameroon
Côte d’Ivoire Angola Ecuador Burkina Faso Zimbabwe Guatemala Mali Cuba Cambodia Malawi Niger
Yugoslavia Greece Czech Republic Belgium Belarus Somalia Hungary Portugal Tunisia Senegal Zambia
Sweden Dominican Republic Bolivia Haiti Bulgaria Austria Azerbaijan Rwanda Chad Guinea Switzer-
land Hong Kong Burundi Honduras El Salvador Israel Tajikistan Benin

R4. Les pays avec le continent et le PNB par habitant où l’espérance de vie est supérieure ou égale à 80 ans.

Solution:
1 SELECT Name , Continent , GNP / Ppopulation AS ’ PNB par habitant ’
2 FROM country
3 WHERE LifeExpectancy >80
Name Continent GNP/Population
Andorra Europe 0.020897
Japan Asia 0.029887
Macao Asia 0.012154
Singapore Asia 0.024251
San Marino Europe 0.018889

R5. Le nombre de pays dans le continent Asie.

Solution:
1 SELECT COUNT (*)
2 FROM country
3 WHERE Continent = ’ Asia ’
51

R6. Le nombre de pays européens dont la population est supérieure à trente millions d’habitants.

Solution:
1 SELECT COUNT (*)
2 FROM country
3 WHERE Continent = ’ Europe ’ AND Population >30 000 000
8

R7. La capitale du Portugal.

Solution: Une jointure est nécessaire ! Capital de la table country est une clé étrangère en référence à
la clé primaire Id.
1 SELECT city . Name
2 FROM country
3 JOIN city
4 ON Id = Capital
5 WHERE country . Name = ’ Portugal ’
ITC − BDD − Corrigé PC/PSI
Page 3 / 15 Année 2023-2024

Lisboa

R8. Les langues parlées au Vietnam.

Solution: Une jointure est nécessaire


1 SELECT Language
2 FROM countrylanguage
3 JOIN country
4 ON CountryCode = Code
5 WHERE Name = ’ Vietnam ’
Chinese, Khmer, Man, Miao, Muong, Nung, Thai, Tho, Vietnamese

R9. La langue officielle parlée au Vietnam.

Solution:
1 SELECT Language
2 FROM countrylanguage
3 JOIN country
4 ON CountryCode = Code
5 WHERE Name = ’ Vietnam ’ AND IsOfficial = ’T ’
Vietnamese

R10. Les noms des villes d’Océanie (Océania) avec le pays correspondant.

Solution:
1 SELECT city . Name , country . Name
2 FROM country JOIN city ON Code = CountryCode
3 WHERE Continent = ’ Oceania ’
Name Name Tafuna American Samoa Fagatogo American Samoa Sydney Australia Melbourne Aus-
tralia Brisbane Australia Perth Australia Adelaide Australia Canberra Australia Gold Coast Australia
Newcastle Australia Central Coast Australia Wollongong Australia Hobart Australia Geelong Australia
Townsville Australia Cairns Australia Bantam Cocos (Keeling) Islands West Island Cocos (Keeling)
Islands Avarua Cook Islands Flying Fish Cove Christmas Island Suva Fiji Islands Weno Micronesia,
Federated States of Palikir Micronesia, Federated States of Tamuning Guam Agaña Guam Bikenibeu
Kiribati Bairiki Kiribati Dalap-Uliga-Darrit Marshall Islands Garapan Northern Mariana Islands Nou-
méa New Caledonia Kingston Norfolk Island Alofi Niue Yangor Nauru Yaren Nauru Auckland New
Zealand Christchurch New Zealand Manukau New Zealand North Shore New Zealand Waitakere New
Zealand Wellington New Zealand Dunedin New Zealand Hamilton New Zealand Lower Hutt New Zea-
land Adamstown Pitcairn Koror Palau Port Moresby Papua New Guinea Faaa French Polynesia Papeete
French Polynesia Honiara Solomon Islands Fakaofo Tokelau Nuku´alofa Tonga Funafuti Tuvalu Port-
Vila Vanuatu Mata-Utu Wallis and Futuna Apia Samoa

R11. Les noms des villes qui sont aussi des noms de pays.

Solution:
1 #1
2 SELECT Name
3 FROM country
4 INTERSECT
ITC − BDD − Corrigé PC/PSI
Page 4 / 15 Année 2023-2024

5 SELECT Name
6 FROM city
7 #2
8 SELECT Name
9 FROM city
10 WHERE Name IN ( SELECT Name FROM country )
Name Djibouti Mexico Gibraltar Armenia Kuwait Macao San Marino Singapore

R12. Le nombre de pays dont la langue officielle est le français.

Solution:
1 SELECT COUNT (*)
2 FROM country
3 JOIN countrylanguage
4 ON CountryCode = Code
5 WHERE Language = ’ French ’ AND IsOfficial = ’T ’
18 pays

R13. Les pays indépendants depuis 1970 triés suivant l’année d’indépendance par ordre décroissant.

Solution:
1 SELECT Name , IndepYear
2 FROM country
3 WHERE IndepYear >1970
4 ORDER BY IndepYear DESC

R14. Les pays européens où une partie de la population parle anglais avec le pourcentage de la population
parlant anglais.

Solution:
1 SELECT Name , Percentage
2 FROM country JOIN countrylanguage ON Code = CountryCode
3 WHERE Continent = ’ Europe ’ AND Language = ’ English ’
Name Percentage
Denmark 0.3
United Kingdom 97.3
Gibraltar 88.9
Ireland 98.4
Iceland 0.0
Monaco 6.5
Malta 2.1
Norway 0.5

R15. La liste des pays européens avec leur densité de population rangés dans l’ordre décroissant des densités.

Solution:
1 SELECT Name , Population / SurfaceArea AS densite
2 FROM country
ITC − BDD − Corrigé PC/PSI
Page 5 / 15 Année 2023-2024

3 WHERE Continent = ’ Europe ’


4 ORDER BY densite DESC
Name densite Décroissant 1 Monaco 22666.6667 Gibraltar 4166.6667 Holy See (Vatican City State)
2500.0000 Malta 1203.1646 San Marino 442.6230 Netherlands 382.0257 Belgium 335.5069 United King-
dom 245.4648 Germany 230.1390 Liechtenstein 201.8750 Italy 191.4269 Switzerland 173.4425 Luxem-
bourg 168.4841 Andorra 166.6667 Czech Republic 130.3236 Moldova 129.3906 Denmark 123.6831 Poland
119.5780 Albania 118.3108 Slovakia 110.1506 Portugal 108.6908 Hungary 107.9566 France 107.3902 Yu-
goslavia 104.1371 Slovenia 98.1339

R16. Les villes d’Afrique qui ne sont pas des capitales avec le pays.

Solution:
1 SELECT city . Name , country . Name
2 FROM country JOIN city ON Code = CountryCode
3 WHERE Continent = ’ Africa ’
4 EXCEPT
5 SELECT city . Name , country . Name
6 FROM country JOIN city ON Code = CountryCode
7 WHERE Continent = ’ Africa ’ AND Id = Capital
8

9 SELECT city . Name , country . Name


10 FROM country JOIN city ON Code = CountryCode
11 WHERE Continent = ’ Africa ’
12 AND Id < > Capital

R17. Le nombre de personnes dont la langue est le français sur le continent africain.

Solution:
1 SELECT SUM ( Percentage * Population ) AS ’ Population Francophone ’
2 FROM country
3 JOIN countrylanguage ON CountryCode = Code
4 WHERE Continent = ’ Africa ’ AND Language = ’ French ’
Population Francophone 7164900.0

R18. La superficie des continents et leurs noms, classés par superficie décroissante.

Solution:
1 SELECT Continent , SUM ( SurfaceArea ) AS Superficie
2 FROM country
3 GROUP BY Continent
4 ORDER BY Superficie DESC
Continent Superficie Asia 31881005.00 Africa 30250377.00 North America 24214470.00 Europe 23049133.90
South America 17864926.00 Antarctica 13132101.00 Oceania 8564294.00

R19. La population totale des continents et leurs noms, classés par population croissante, et ayant plus de 500
millions d’habitants.

Solution:
ITC − BDD − Corrigé PC/PSI
Page 6 / 15 Année 2023-2024

1 SELECT Continent , SUM ( Population ) AS Population_totale


2 FROM country
3 GROUP BY Continent
4 HAVING Population_totale >500000000
5 ORDER BY Population_totale
Continent Population_totale Europe 730074600 Africa 784475000 Asia 3705025700

R20. Le pays qui a la plus petite superficie.

Solution:
1 SELECT Name , SurfaceArea
2 FROM country
3 ORDER BY SurfaceArea
4 LIMIT 1
5 # ou : sans LIMIT , avec requête imbriquée
6 SELECT Name , SurfaceArea
7 FROM country
8 WHERE SurfaceArea = ( SELECT MIN ( SurfaceArea ) FROM country )
Name SurfaceArea
Holy See (Vatican City State) 0.40

R21. Le pays d’Afrique qui a le plus grande superficie et celui d’Asie qui a la plus petite.

Solution:
1 ( SELECT Name , SurfaceArea
2 FROM country
3 WHERE Continent = ’ Asia ’
4 ORDER BY SurfaceArea
5 LIMIT 1 )
6 UNION
7 ( SELECT Name , SurfaceArea
8 FROM country
9 WHERE Continent = ’ Africa ’
10 ORDER BY SurfaceArea DESC
11 LIMIT 1 )
Name SurfaceArea
Sudan 2505813.00
Macao 18.00

R22. Les deux premiers pays qui ont les plus grandes populations.

Solution:
1 SELECT Name
2 FROM country
3 ORDER BY population DESC
4 LIMIT 2
Name China India

R23. La liste des pays européens ayant au moins deux langues officielles.
ITC − BDD − Corrigé PC/PSI
Page 7 / 15 Année 2023-2024

Solution:
1 SELECT Name , COUNT ( Language )
2 FROM country JOIN countrylanguage ON Countrycode = Code
3 WHERE Continent = ’ Europe ’ AND Isofficial = ’T ’
4 GROUP BY countrycode
5 HAVING COUNT ( Language ) >=2
Name COUNT(Language) Belgium 3 Belarus 2 Switzerland 4 Finland 2 Faroe Islands 2 Ireland 2
Luxembourg 3 Malta 2 Romania 2

R24. La liste des langues officielles parlées dans la capitale Suisse (Berne, notée Bern dans la base de données).

Solution:
1 SELECT Language
2 FROM countrylanguage
3 JOIN country
4 JOIN city
5 ON city . CountryCode = Code AND countrylanguage . CountryCode = CODE
6 WHERE city . Name = ’ Bern ’
Language French German Italian Romansh

Exercice n°2 Publications scientifiques


Une base de données concernant des publications scientifiques doit être constituée. Pour modéliser la situa-
tion, trois types d’entité sont considérés : Scientifique, Article et Revue.
Un scientifique peut écrire un ou plusieurs articles. Un article peut être écrit par un ou plusieurs scientifiques
et paraître dans une ou plusieurs revues.
Les données enregistrées sont le nom, le prénom et la date de naissance du scientifique, le titre et la date de
fin d’écriture de l’article (ou date d’envoi aux différentes revues pour demander une publication), la date de
parution dans une revue, le nom de la revue.
R1. Décrire les types d’associations entre les types d’entités en donnant les cardinalités.

Solution: Entre Scientifique et Article il y a un type d’association Écrit (ou A écrit). Un scien-
tifique peut écrire un ou plusieurs articles, donc la cardinalité entre Scientifique et Écrit est 1-n .
Un article peut être écrit par un ou plusieurs scientifiques, donc la cardinalité entre Article et Écrit
par est 1-n. Il s’agit d’une association *-*
Entre Article et Revue il y a un type d’association Paraître (ou Publié par). Un article peut paraître
dans une ou plusieurs revues, donc la cardinalité entre Article et Publié par est 1-n. Une revue peut
plusieurs un ou plusieurs articles, donc la cardinalité entre Paraître et Revue est 1-n. L’association
entre Article et Revue est également de type *-*

R2. En déduire les tables utilisées dans le modèle relationnel. Préciser les schémas de relation avec les attributs,
les clés primaires et étrangères.

Solution:
ITC − BDD − Corrigé PC/PSI
Page 8 / 15 Année 2023-2024

L’association entre Scientifique et Article doit être décomposée en deux associations 1-* ce qui
produit trois tables : Scientifique, Article et Écrit
L’association entre Article et Revue doit être décomposée en deux associations 1-* ce qui produit trois
tables : Article, Revue et Parution
Schémas de relations :
Scientifique (ids,nom,prénom,naissance)
Article (ida,titre,date_ecrit)
Écrit (ide,idarticle,idscientifique)
Revue (idr,nom)
Parution (idp,idrevue,idarticle,date)
idarticle et idscientifique de la table Écrit sont les clés étrangères en référence avec les clés
primaires ida et ids des tables Article et Scientifique.
idrevue et idarticle sont les clés étrangères de la table Parution sont les clés étrangères en référence
avec les clés primaires idr et ida des tables Revue et Article.

Exercice n°3 Bibliothèque


Une bibliothèque d’un établissement scolaire doit être gérée à l’aide d’une base de données. Pour concevoir
un modèle, on considère deux types d’entité : Livre et Élève.
Le type d’entité Livre a pour attributs Id, Titre, Auteur.
Le type d’entité Élève a pour attributs Id, Nom, Prénom, Classe.
On considère un type d’association nommé Emprunte entre Livre et Élève. Un élève peut emprunter aucun,
un ou plusieurs livres. Un livre est emprunté par un unique élève.
R1. Préciser le type d’association 1-1, 1-* ou *-*.

Solution: Le type d’association est 1-*, qui donne donc deux tables dans le schéma relationnel, en
ajoutant une clé étrangère dans la table Livre en relation avec la clé primaire Id de la table Élève.

R2. Définir le schéma relationnel en précisant pour chaque table la clé primaire et d’éventuelles clés étrangères.

Solution:
Élève (Id, Nom, Prénom, Classe
Livre (Id, Titre, Auteur, idélève), avec idélève une clé étrangère en référence avec la clé pri-
maire Id de la table Élève, qui fait la relation entre les deux tables.

R3. Peut-on enregistrer deux élèves qui ont le même nom et le même prénom dans la table Élève ?

Solution: Il est possible d’enregistrer deux élèves qui ont le même nom et le même prénom, ils le seront
avec deux valeurs de Id différentes, qui est la clé primaire qui permet d’identifier deux élèves.
ITC − BDD − Corrigé PC/PSI
Page 9 / 15 Année 2023-2024
On suppose maintenant qu’un livre est disponible en plusieurs exemplaires, donc peut être emprunté par un ou
plusieurs élèves en même temps.
R4. Décrire les modifications concernant le modèle entité-association.

Solution: Le type d’association est maintenant *-*.

R5. Définir le schéma relationnel en précisant pour chaque table la clé primaire et les éventuelles clés étrangères.

Solution: Il faut maintenant trois tables. On peut ajouter une table Emprunt avec des clés étrangères
qui vont faire le lien entre la table Livre et la table Élève
Élève (Id, Nom, Prénom, Classe
Livre (Id, Titre, Auteur)
Emprunt(Id, Idélève, Idlivre, date_emprunt,date_retour)

Un auteur peut avoir écrit plusieurs livres présents dans la base et on souhaite donc éviter la redondance
d’informations en n’enregistrant pas plusieurs fois le même nom dans la table Livre.
R6. Comment peut-on compléter/modifier le schéma relationnel ?

Solution: On peut ajouter une relation Auteur :Auteur (Id,Nom, Prénom)


Élève (Id, Nom, Prénom, Classe
Et on ajoute dans la table Livre, une clé étrangère idauteur, en relation avec la clé primaire Id de la
table Auteur. Livre (Id, Titre, idauteur)
Emprunt(Id, Idélève, Idlivre, date_emprunt,date_retour)

Un livre peut avoir été écrit en commun par plusieurs auteurs.


R7. Comment peut-on compléter/modifier le schéma relationnel ?

Solution: L’association entre Livre et Auteur est maintenant de type *-*, il faut donc ajouter une
table pour gérer cela : Écrit (Id,Idlivre,Idauteur), avec Idlivre et Idauteur des clés étrangères
en référence aux clés primaires Id des tables Livre et Auteur.
ITC − BDD − Corrigé PC/PSI
Page 10 / 15 Année 2023-2024

Exercice n°4 Un peu de musique


On étudie la base de données suivante, constituée de 2 tables :
id nom prenom ddn ddm nationalité
1 Lizt Franz française
2 Mozart Wolfang Amadeus autrichienne
3 van Beethoven Ludwig 17791215 18670326 allemande
... ... ... ... ... ...
6 Vivaldi Antonio italienne
... ... ... ... ... ...
Table des compositeurs (Compositeurs)

id titre annee periode forme duree idcompo


1 La flûte enchantée 1791 classique opéra 165 2
2 Neuvième Symphonie 1824 romantique symphonie 70 3
3 Les quatre saisons 1725 baroque concerto 40 6
... ... ... ... ... ... ...
Table des Œuvres (Oeuvres).

— Compositeurs id : entier, nom : chaîne de caractères, prénom : chaîne de caractère, pays : chaîne de
caractère, ddn : entier (date de naissance de la forme AAAAMMJJ, soit 20211117
 pour le 17 novembre
2021), ddm : entier (date de décès de la même forme que la date de naissance)

— Oeuvres id : entier, titre : chaîne de caractères, annee : entier (année de la composition), periode :
chaîne de caractère (baroque, classique, romantique, . . .), forme : chaîne de caractère (concerto, 
symphonie,
opéra, . . .), duree : flottant (durée en minutes), idcompo : entier (identifiant du compositeur)
R1. Est-ce que nom peut servir de clé pour la table Compositeurs ? Pourquoi ? Proposer une clé de cette table.
Donner les clés primaires et les clés étrangères de chaque table.

Solution:

Écrire les requêtes en langage SQL qui renvoient :


R2. Les titres des œuvres composées durant la période classique.

Solution:
1 SELECT titre FROM Oeuvres
2 WHERE periode = ’ classique ’

R3. La liste des titres des œuvres qui ne sont ni un concerto ni une symphonie.

Solution:
1 SELECT titre FROM Oeuvres
2 WHERE forme < > concerto AND forme < > symphonie
OU
1 SELECT titre FROM Oeuvres
2 WHERE forme
3 NOT IN ( ’ concerto ’ , ’ symphonie ’)
ITC − BDD − Corrigé PC/PSI
Page 11 / 15 Année 2023-2024

R4. La liste des œuvres qui ont été composées après 1650.

Solution:
1 SELECT titre FROM Oeuvres
2 WHERE annee >1650

R5. La durée moyenne d’un concerto.

Solution:
1 SELECT AVG ( duree ) FROM Oeuvres
2 WHERE forme = ’ concerto ’

R6. La liste des œuvres composées par van Beethoven.

Solution:
1 SELECT titre FROM Oeuvres
2 JOIN Compositeurs ON Compositeurs . id = idcompo
3 WHERE nom = ’ van Beethoven ’

R7. Le compositeur ayant composé la Flûte enchantée.

Solution:
1 SELECT prenom , nom FROM Compositeurs
2 JOIN Oeuvres ON Compositeurs . id = idcompo
3 WHERE titre = ’ La flûte enchantée ’

R8. La liste des œuvres (titre de l’œuvre, nom du compositeur, année de composition) en les classant par ordre
alphabétique des compositeurs puis par année.

Solution:
1 SELECT titre , nom , annee
2 FROM Compositeurs AS C
3 JOIN Oeuvres ON C . id = idcompo
4 ORDER BY nom , annee

R9. Le nombre de compositeurs regroupés par pays.

Solution:
1 SELECT pays , COUNT ( Composteurs . id ) FROM Compositeurs
2 JOIN Pays ON idpays = Pays . id
3 GROUP BY pays

R10. L’œuvre la plus ancienne et son année de composition.


ITC − BDD − Corrigé PC/PSI
Page 12 / 15 Année 2023-2024

Solution: Pour avoir l’année de composition de la plus ancienne œuvre, c’est facile : SELECT MIN(annee) FRO
Attention, il n’est pas possible de récupérer le titre de la plus ancienne œuvre avec SELECT titre,MIN(annee)
vous aurez bien l’année de l’œuvre la plus ancienne et le premier titre de la table Oeuvres, sans aucun
lien a priori avec l’année.
Il est nécessaire d’utiliser une requête imbriquées : on commence par récupérer l’année de composition
de la plus ancienne œuvre, puis de chercher les titres des œuvres dont leur année de composition est
égale à cette année de composition de la plus ancienne œuvre.
1 SELECT titre , annee FROM Oeuvres
2 WHERE annee
3 IN ( SELECT MIN ( annee ) FROM Oeuvres )

R11. La liste des compositeurs qui sont nés après Mozart.

Solution: On récupère la date de naissance de Mozart, puis on cherche les compositeurs dont la date
de naissance est supérieure à celle-ci.
1 SELECT prenom , nom FROM Compositeurs
2 WHERE ddn >
3 (
4 SELECT ddn FROM Compositeurs
5 WHERE nom = ’ Mozart ’
6 )

R12. La liste des compositeurs ayant composé au moins une symphonie.

Solution:
1 SELECT DISTINCT prenom , nom FROM Compositeurs
2 JOIN Oeuvres ON Compositeurs . id = idcompo
3 WHERE forme = ’ symphonie ’

R13. La liste des compositeurs n’ayant jamais composé de symphonie.

Solution: Il faut commencer par sélectionner la liste des compositeurs (idcompo) ayant composé au
moins une symphonie, puis on sélectionne la liste des compositeurs qui ne sont pas dans cette liste.
1 SELECT prenom , nom FROM Compositeurs
2 JOIN Oeuvres ON Compositeurs . id = idcompo
3 WHERE idcompo
4 NOT IN (
5 SELECT idcompo FROM Oeuvres
6 WHERE forme = ’ symphonie ’
7 )

R14. La liste des compositeurs n’ayant composé que des symphonies.

Solution: Il faut commencer par sélectionner la liste des compositeurs (idcompo) ayant composé au
moins une œuvre qui n’est pas une symphonie, puis on sélectionne la liste des compositeurs qui ne sont
pas dans cette liste. Ne seront pas sélectionnés les compositeurs ayant composé au moins une œuvre qui
n’était pas une symphonie.
ITC − BDD − Corrigé PC/PSI
Page 13 / 15 Année 2023-2024

1 SELECT prenom , nom FROM Compositeurs


2 JOIN Oeuvres ON Compositeurs . id = idcompo
3 WHERE idcompo
4 NOT IN (
5 SELECT idcompo FROM Oeuvres
6 WHERE forme < > ’ symphonie ’
7 )

R15. La liste du nombre d’œuvres composées par chaque compositeur classé par nombre d’œuvres composées.

Solution:
1 SELECT nom , prenom , COUNT ( titre )
2 FROM Compositeurs
3 JOIN Oeuvres ON Compositeurs . id = idcompo
4 GROUP BY nom
5 ORDER BY COUNT ( titre )

R16. La liste du nombre de symphonies composées par chaque compositeur, classé par nombre croissant de
symphonies composées.

Solution:
1 SELECT nom , prenom , COUNT ( titre )
2 FROM Compositeurs
3 JOIN Oeuvres ON Compositeurs . id = idcompo
4 WHERE forme = ’ symphonie ’
5 GROUP BY nom
6 ORDER BY COUNT ( titre )

1 SELECT nom , prenom , COUNT ( titre )


2 FROM Compositeurs , Oeuvres
3 WHERE Compositeurs . id = idcompo
4 AND forme = ’ symphonie ’
5 ORDER BY COUNT ( titre )

R17. La liste des compositeurs ayant composé au moins 9 symphonies.

Solution:
1 SELECT nom , prenom FROM Compositeurs
2 JOIN Oeuvres ON Compositeurs . id = idcompo
3 WHERE forme = ’ symphonie ’
4 GROUP BY idcompo
5 HAVING COUNT ( titre ) >=9

R18. La liste des couples d’œuvres composées la même année.

Solution: Il est nécessaire ici de faire une jointure sur la même table, avec comme condition de jointure,
l’égalité de l’année de composition. Pour éviter d’avoir les couples constitués de deux fois la même œuvre,
on ajoute comme contrainte : O1.titre<>O2.titre.
ITC − BDD − Corrigé PC/PSI
Page 14 / 15 Année 2023-2024

1 SELECT O1 . titre , O2 . titre , annee FROM Oeuvres AS O1 , Oeuvres AS O2


2 WHERE O1 . annee = O2 . annee
3 AND O1 . titre < > O2 . titre
4

5 SELECT O1 . titre , O2 . titre , annee


6 FROM Oeuvres AS O1 JOIN Oeuvres AS O2 ON O1 . annee = O2 . annee
7 WHERE O1 . titre < > O2 . titre

R19. Qui a composé la plus vieille œuvre ?

Solution: Même raisonnement que pour chercher l’œuvre la plus longue.


1 SELECT nom , prenom FROM Compositeurs
2 JOIN Oeuvres ON Compositeurs . id = idcompo
3 WHERE annee
4 IN ( SELECT MIN ( annee ) FROM Oeuvres )
5

6 SELECT nom , prenom FROM Compositeurs


7 JOIN Oeuvres ON Compositeurs . id = idcompo
8 WHERE annee < ALL ( SELECT annee FROM Oeuvres )

R20. La plus vieille œuvre composée par Bach.

Solution: Idée : commencer par sélectionner l’année de la plus vieille œuvre de Bach (c’est-à-dire d’année
de composition minimale), puis sélectionner le titre de l’œuvre de Bach dont l’année est celle-ci.
1 SELECT titre FROM Oeuvres
2 JOIN Compositeurs as C ON C . id = idcompo
3 WHERE nom = ’ Bach ’
4 AND annee =
5 ( SELECT MIN ( annee ) FROM Oeuvres
6 JOIN Compositeurs AS C ON C . id = idcompo
7 WHERE nom = ’ Bach ’)

R21. Le titre et la durée de la symphonie la plus longue composée par Wagner.

Solution:
1 SELECT titre , duree FROM Oeuvres
2 JOIN Compositeurs AS C ON C . id = idcompo
3 WHERE forme = ’ symphonie ’ AND nom = ’ Wagner ’
4 AND duree
5 IN
6 (
7 SELECT MAX ( duree ) FROM Oeuvres
8 JOIN Compositeurs AS C ON C . id = idcompo
9 WHERE forme = ’ symphonie ’ AND nom = ’ Wagner ’
10 )

R22. Donner le titre de la deuxième œuvre la plus longue.


ITC − BDD − Corrigé PC/PSI
Page 15 / 15 Année 2023-2024

Solution:

Exercice n°5 Élevage d’animaux (pour les 5/2)


On étudie une base de données constituées des cinq tables :
• Animal (id : INT , sexe : CHAR, date_naissance : DATE, nom : CHAR, espece_id : INT,
race_id : INT, mere_id : INT, PERE_id : INT, disponible : INT)
• Client (id : INT, nom, prenom, adresse, code_postal : INT, ville, pays, email,
date_naissance : DATE)
• Adoption (client_id, animal_id, date_reservation : DATE, date_adoption : DATE, prix : FLOAT,
paye : INT)) qui fait le lien entre les entités animaux et les entités clients.
• Espèce (id, nom_courant, nom_latin, description, prix : FLOAT)
• Race (id, nom, espece_id, description, prix)
Les types « évidents » ne sont pas indiqués.
CHAR indique qu’il s’agit d’une chaîne de caractères.
DATE : chaîne de caractères au format ’aaaa-mm-jj’
Les deux attributs disponible et paye sont des entiers, qui valent 0 ou 1. Pour disponible : 0 s’il ne l’est pas,
1 s’il l’est. Pour paye : 0 s’il n’a pas été payé, 1 s’il a été payé.
nom_courant : chat, chien, ...

Écrire les requêtes permettant d’obtenir :


R1. les noms des animaux classés par date de naissance,
R2. les trois animaux les plus jeunes,
R3. les trois suivants,
R4. les espèces qui coûtent moins de 150 e,
R5. les noms des animaux nés en 2012,
R6. les espèces qui coûtent moins que le prix moyen toute espèce réunie,
R7. le nom de l’espèce de chaque animal,
R8. le nom, le nom de l’espèce, le nom de la race pour les chiens et les chats,
R9. les couples (nom du client, nom de l’animal) avec un renommage pour les distinguer, des animaux adoptés
en 2023,
R10. les parents d’un animal,
R11. le nombre d’animaux,
R12. le nombre de mâles,
R13. le nombre de chien et de chat,
R14. le total des prix en boutique (le prix étant donné par l’espèce de l’animal),
R15. le nombre d’animaux par sexe,
R16. le nombre d’animaux par espèce avec le nom de l’espèce,
R17. le nombre de mâles et de femelles par espèce,
R18. le nom et prénom des clients ayant fait plus de deux achats et leur nombre d’adoption,
R19. le nombres d’animaux par espèce mais sans prendre en compte les chiens et les chats,
R20. le nom et prénom des clients ayant adopté plus de deux chats.

Vous aimerez peut-être aussi