|
|
-- 1. Discipline proposant plus d’épreuves en juillet qu’en août.
|
|
|
SELECT d.*
|
|
|
FROM Discipline d, Epreuve e
|
|
|
WHERE d.code=e.discipl AND e.dateE < '2021-08-01' AND e.dateE > '2021-06-30'
|
|
|
GROUP BY d.code
|
|
|
HAVING count(*) >=ALL (SELECT count(*)
|
|
|
FROM Epreuve
|
|
|
WHERE dateE >= '2021-08-01' AND dateE <= '2021-08-31' AND d.code=discipl);
|
|
|
|
|
|
-- code | nom
|
|
|
-- ------+-----------------------
|
|
|
-- FEN | Fencing
|
|
|
-- JUD | Judo
|
|
|
-- TKW | Taekwondo
|
|
|
-- GTR | Trampoline Gymnastics
|
|
|
-- TRI | Triathlon
|
|
|
-- TTE | Table Tennis
|
|
|
-- CRD | Cycling Road
|
|
|
-- SKB | Skateboarding
|
|
|
-- SWM | Swimming
|
|
|
-- BK3 | 3x3 Basketball
|
|
|
-- SRF | Surfing
|
|
|
-- ROW | Rowing
|
|
|
-- RUG | Rugby Sevens
|
|
|
-- BSB | Baseball/Softball
|
|
|
-- DIV | Diving
|
|
|
-- SHO | Shooting
|
|
|
-- BMX | Cycling BMX Racing
|
|
|
-- CSL | Canoe Slalom
|
|
|
-- ARC | Archery
|
|
|
-- TEN | Tennis
|
|
|
-- WLF | Weightlifting
|
|
|
-- MTB | Cycling Mountain Bike
|
|
|
-- (22 lignes)
|
|
|
|
|
|
|
|
|
-- 2. Pays dont au moins la moitié des athlètes ont obtenu une médaille.
|
|
|
SELECT p.nom FROM Pays p WHERE (SELECT COUNT(*) FROM Athlete a WHERE a.pays = p.code) * 0.5 <= (SELECT COUNT(DISTINCT r.athlete) FROM Resultat r
|
|
|
WHERE r.medaille IS NOT NULL AND r.athlete IN (SELECT a.code FROM Athlete a WHERE a.pays = p.code));
|
|
|
/* nom
|
|
|
--------------------
|
|
|
Bermuda
|
|
|
San Marino
|
|
|
Fiji
|
|
|
Russian Federation
|
|
|
URSS
|
|
|
(5 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 (code, discipl, nom, dateE)
|
|
|
VALUES ('E356', 'GLF', '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
|