|
|
/*
|
|
|
=> TP 3-4, Fréville Clément G8
|
|
|
*/
|
|
|
|
|
|
-- 1. Discipline proposant plus d’épreuves en juillet qu’en août.
|
|
|
SELECT d.nom discipline FROM epreuve e
|
|
|
INNER JOIN discipline d ON d.code = e.discipl
|
|
|
WHERE EXTRACT(MONTH FROM e.dateE) = 7
|
|
|
GROUP BY d.code
|
|
|
HAVING COUNT(*) >= (
|
|
|
SELECT COUNT(*) FROM epreuve
|
|
|
WHERE discipl = d.code AND EXTRACT(MONTH FROM dateE) = 8
|
|
|
);
|
|
|
/*
|
|
|
discipline
|
|
|
-----------------------
|
|
|
Archery
|
|
|
3x3 Basketball
|
|
|
Cycling BMX Racing
|
|
|
Baseball/Softball
|
|
|
Cycling Road
|
|
|
Canoe Slalom
|
|
|
Diving
|
|
|
Fencing
|
|
|
Trampoline Gymnastics
|
|
|
Judo
|
|
|
Cycling Mountain Bike
|
|
|
Rowing
|
|
|
Rugby Sevens
|
|
|
Shooting
|
|
|
Skateboarding
|
|
|
Surfing
|
|
|
Swimming
|
|
|
Tennis
|
|
|
Taekwondo
|
|
|
Triathlon
|
|
|
Table Tennis
|
|
|
Weightlifting
|
|
|
(22 lignes)
|
|
|
*/
|
|
|
|
|
|
-- 2. Pays dont au moins la moitié des athlètes ont obtenu une médaille.
|
|
|
SELECT p.nom nom_pays,
|
|
|
COUNT(*) athletes,
|
|
|
COUNT(DISTINCT r.athlete) athletes_medailles
|
|
|
FROM athlete
|
|
|
INNER JOIN pays p ON athlete.pays = p.code
|
|
|
LEFT JOIN resultat r on athlete.code = r.athlete
|
|
|
GROUP BY p.code
|
|
|
HAVING COUNT(DISTINCT r.athlete) >= COUNT(*) FILTER (WHERE r.athlete IS NULL);
|
|
|
/*
|
|
|
nom_pays | athletes | athletes_medailles
|
|
|
------------+----------+--------------------
|
|
|
Bermuda | 2 | 1
|
|
|
Fiji | 32 | 26
|
|
|
San Marino | 6 | 3
|
|
|
(3 lignes)
|
|
|
*/
|
|
|
|
|
|
-- 3. Pays ayant remporté plus de médailles d’or que de médailles d’argent et de bronze cumulées.
|
|
|
SELECT pays,
|
|
|
COUNT(r.medaille) FILTER (WHERE r.medaille = 1) medailles_or,
|
|
|
COUNT(r.medaille) FILTER (WHERE r.medaille != 1) autres_medailles
|
|
|
FROM resultat r
|
|
|
INNER JOIN athlete a on a.code = r.athlete
|
|
|
GROUP BY pays
|
|
|
HAVING COUNT(r.medaille) FILTER (WHERE r.medaille = 1) >=
|
|
|
COUNT(r.medaille) FILTER (WHERE r.medaille != 1);
|
|
|
/*
|
|
|
pays | medailles_or | autres_medailles
|
|
|
------+--------------+------------------
|
|
|
CUB | 8 | 8
|
|
|
KOS | 2 | 0
|
|
|
EST | 4 | 1
|
|
|
BEL | 20 | 6
|
|
|
SLO | 3 | 2
|
|
|
TUN | 1 | 1
|
|
|
BER | 1 | 0
|
|
|
LAT | 4 | 1
|
|
|
THA | 1 | 1
|
|
|
FIJ | 13 | 13
|
|
|
BUL | 7 | 3
|
|
|
PUR | 1 | 0
|
|
|
MAR | 1 | 0
|
|
|
UGA | 2 | 2
|
|
|
BRA | 29 | 26
|
|
|
ECU | 2 | 1
|
|
|
BAH | 2 | 0
|
|
|
JPN | 68 | 63
|
|
|
QAT | 2 | 2
|
|
|
UZB | 3 | 2
|
|
|
(20 lignes)
|
|
|
*/
|
|
|
|
|
|
-- 4. Nom et prénom des athlètes féminines plus grandes que tous leurs compatriotes masculins.
|
|
|
SELECT nom, prenom FROM athlete a
|
|
|
WHERE sexe = 'F'
|
|
|
AND taille IS NOT NULL
|
|
|
AND taille >= ALL (
|
|
|
SELECT taille FROM athlete
|
|
|
WHERE pays = a.pays AND sexe = 'M' AND taille IS NOT NULL
|
|
|
);
|
|
|
|
|
|
/*
|
|
|
nom | prenom
|
|
|
-----------------------+----------------------
|
|
|
ABDUL HADI | Farah Ann
|
|
|
AL-KAABI | Fatimah Abbas Waheeb
|
|
|
ALVARADO | Luciana
|
|
|
ALVES LOPES | Marcia
|
|
|
AYIVON | Claire
|
|
|
BABOVIC | Anastasija
|
|
|
BALADIN | Hande
|
|
|
BANDA | Babra
|
|
|
BAYASGALAN | Solongo
|
|
|
BELEMU | Margaret
|
|
|
BENITEZ | Jackie
|
|
|
BOZ | Meryem
|
|
|
BRNOVIC | Tatjana
|
|
|
BYLON | Atheyna
|
|
|
[...]
|
|
|
(86 lignes)
|
|
|
*/
|
|
|
|
|
|
-- 5. Lister chaque athlète masculin français (nom, prénom, taille) et comparer leur taille avec celle du plus grand d’entre eux.
|
|
|
SELECT nom, prenom, taille, taille - (
|
|
|
SELECT MAX(taille) FROM athlete
|
|
|
WHERE sexe = 'M' AND pays = 'FRA'
|
|
|
) diff FROM athlete
|
|
|
WHERE sexe = 'M' AND pays = 'FRA';
|
|
|
/*
|
|
|
nom | prenom | taille | diff
|
|
|
------------------+-----------------+--------+-------
|
|
|
ABALO | Luc | 1.83 | -0.35
|
|
|
AIT SAID | Samir | 1.68 | -0.50
|
|
|
ALBICY | Andrew | 1.78 | -0.40
|
|
|
ALIEV | Mourad | |
|
|
|
AMDOUNI | Morhad | |
|
|
|
AMOROS | Emile | 1.78 | -0.40
|
|
|
ANDRE | Sylvain | |
|
|
|
ANDRODIAS | Matthieu | 1.94 | -0.24
|
|
|
[...]
|
|
|
(220 lignes)
|
|
|
*/
|
|
|
|
|
|
-- 6. Pour chaque épreuve, indiquer sa date et les dates des premières et dernières épreuves de la discipline.
|
|
|
SELECT *,
|
|
|
(SELECT MIN(dateE) FROM epreuve WHERE discipl = e.discipl) datemin,
|
|
|
(SELECT MAX(dateE) FROM epreuve WHERE discipl = e.discipl) datemax
|
|
|
FROM epreuve e;
|
|
|
/*
|
|
|
code | discipl | nom | datee | datemin | datemax
|
|
|
------+---------+----------------------------------------------+------------+------------+------------
|
|
|
E001 | ARC | Mixed Team | 2021-07-24 | 2021-07-24 | 2021-07-31
|
|
|
E002 | CRD | Men's Road Race | 2021-07-24 | 2021-07-24 | 2021-07-28
|
|
|
E003 | FEN | Men's Sabre Individual | 2021-07-24 | 2021-07-24 | 2021-08-01
|
|
|
E004 | FEN | Women's Epée Individual | 2021-07-24 | 2021-07-24 | 2021-08-01
|
|
|
E005 | JUD | Men -60 kg | 2021-07-24 | 2021-07-24 | 2021-07-31
|
|
|
E006 | JUD | Women -48 kg | 2021-07-24 | 2021-07-24 | 2021-07-31
|
|
|
E007 | SHO | 10m Air Pistol Men | 2021-07-24 | 2021-07-24 | 2021-08-02
|
|
|
[...]
|
|
|
(355 lignes)
|
|
|
*/
|
|
|
|
|
|
-- 7. Un typhon est annoncé. Les épreuves de la dernière journée doivent être reportée d’une semaine. Quelle commande permet de faire cette modification sans connaître la date de la dernière journée ?
|
|
|
UPDATE epreuve
|
|
|
SET dateE = dateE + 7
|
|
|
WHERE dateE = (
|
|
|
SELECT MAX(dateE) FROM epreuve
|
|
|
);
|
|
|
/*
|
|
|
UPDATE 13
|
|
|
*/
|
|
|
|
|
|
-- 8. Suspicion de dopage dans les épreuves d’haltérophilie (Weightlifting). Supprimer tous les résultats aux épreuves d’haltérophilie pour le pays ayant remporté le plus de médailles dans cette discipline.
|
|
|
DELETE FROM resultat r
|
|
|
USING epreuve e
|
|
|
WHERE e.code = r.epreuve AND e.discipl = (
|
|
|
SELECT code FROM discipline WHERE nom = 'Weightlifting'
|
|
|
) AND r.athlete IN (
|
|
|
SELECT code FROM athlete WHERE pays IN (
|
|
|
SELECT a.pays FROM resultat r
|
|
|
INNER JOIN epreuve e ON e.code = r.epreuve
|
|
|
INNER JOIN athlete a ON a.code = r.athlete
|
|
|
WHERE e.discipl = (
|
|
|
SELECT code FROM discipline WHERE nom = 'Weightlifting'
|
|
|
)
|
|
|
GROUP BY a.pays
|
|
|
ORDER BY COUNT(*) DESC
|
|
|
LIMIT 1
|
|
|
)
|
|
|
);
|
|
|
/*
|
|
|
DELETE 8
|
|
|
*/
|
|
|
|
|
|
-- 9. Ajouter une nouvelle épreuve :’Women’’s team’ pour le golf ayant lieu le 09/08/2021 (code de l’épreuve :’E356’).
|
|
|
INSERT INTO epreuve VALUES(
|
|
|
'E356',
|
|
|
(SELECT code FROM discipline WHERE nom = 'Golf'),
|
|
|
'Women''s team',
|
|
|
'2021-08-09'
|
|
|
);
|
|
|
/*
|
|
|
INSERT 0 1
|
|
|
*/
|
|
|
|
|
|
-- 10. Écrire une requête permettant de donner une médaille d’or lors de l’épreuve crée à la question précédente à toutes les golfeuses des Etats-unis.
|
|
|
INSERT INTO resultat
|
|
|
SELECT 'E356', a.code, (SELECT place FROM medaille WHERE couleur = 'Or')
|
|
|
FROM athlete a
|
|
|
INNER JOIN pratiquer p ON p.athlete = a.code
|
|
|
WHERE a.pays = (SELECT code FROM pays WHERE nom = 'United States of America')
|
|
|
AND p.discipl = (SELECT code FROM discipline WHERE nom = 'Golf')
|
|
|
AND a.sexe = 'F';
|
|
|
/*
|
|
|
INSERT 0 4
|
|
|
*/
|
|
|
|
|
|
-- 11. Même question mais pour donner une médaille d’argent à toutes les golfeuses sud-coréennes.
|
|
|
INSERT INTO resultat
|
|
|
SELECT 'E356', a.code, (SELECT place FROM medaille WHERE couleur = 'Argent')
|
|
|
FROM athlete a
|
|
|
INNER JOIN pratiquer p ON p.athlete = a.code
|
|
|
WHERE a.pays = (SELECT code FROM pays WHERE nom = 'Republic of Korea')
|
|
|
AND p.discipl = (SELECT code FROM discipline WHERE nom = 'Golf')
|
|
|
AND a.sexe = 'F';
|
|
|
/*
|
|
|
INSERT 0 4
|
|
|
*/
|
|
|
|
|
|
-- 12. Vérifier que vos deux requêtes précédentes ont bien fonctionnées en affichant les résultats de l’épreuve 'E356' (y compris nom, prénom et pays des médaillées).
|
|
|
SELECT p.nom pays, a.sexe, a.nom, a.prenom, m.couleur FROM resultat r
|
|
|
INNER JOIN medaille m ON m.place = r.medaille
|
|
|
INNER JOIN athlete a ON a.code = r.athlete
|
|
|
INNER JOIN pays p ON p.code = a.pays
|
|
|
WHERE r.epreuve = 'E356'
|
|
|
ORDER BY r.medaille;
|
|
|
/*
|
|
|
pays | sexe | nom | prenom | couleur
|
|
|
--------------------------+------+----------+-----------+---------
|
|
|
United States of America | F | THOMPSON | Lexi | Or
|
|
|
United States of America | F | KORDA | Jessica | Or
|
|
|
United States of America | F | KORDA | Nelly | Or
|
|
|
United States of America | F | KANG | Danielle | Or
|
|
|
Republic of Korea | F | PARK | Inbee | Argent
|
|
|
Republic of Korea | F | KIM | Hyojoo | Argent
|
|
|
Republic of Korea | F | KIM | Sei Young | Argent
|
|
|
Republic of Korea | F | KO | Jin Young | Argent
|
|
|
(8 lignes)
|
|
|
*/
|
|
|
|
|
|
-- 13. Réinitialiser votre base de données avec le script jo.sql pour annuler les modifications faites sur ces deux dernières questions.
|
|
|
\i jo.sql
|