DROP TABLE IF EXISTS GameDetail, Game, Team, Player CASCADE; CREATE TABLE Player ( id varchar(10) PRIMARY KEY, name varchar(50), country varchar(50) ); CREATE TABLE Team( id varchar(10) PRIMARY KEY, abbreviation char(3), nickname varchar(30), city varchar(30), minYear numeric, yearFounded numeric, arena varchar(30), arenaCapacity numeric, conference char(1) ); CREATE TABLE Game( id char(8) PRIMARY KEY, dateGame date, idHomeTeam varchar(10) REFERENCES Team, idVisitorTeam varchar(10) REFERENCES Team, season numeric, ptsHome numeric, fieldGoalsPrctageHome numeric CHECK(fieldGoalsPrctageHome <=1 AND fieldGoalsPrctageHome >= 0), freeThrowsPrctageHome numeric CHECK(freeThrowsPrctageHome <=1 AND freeThrowsPrctageHome >= 0), threePointsPrctageHome numeric CHECK(threePointsPrctageHome <=1 AND threePointsPrctageHome >= 0), assistsHome numeric, reboundsHome numeric, ptsAway numeric, fieldGoalsPrctageAway numeric CHECK(fieldGoalsPrctageAway <=1 AND fieldGoalsPrctageAway >= 0), freeThrowsPrctageAway numeric CHECK(freeThrowsPrctageAway <=1 AND freeThrowsPrctageAway >= 0), threePointsPrctageAway numeric CHECK(threePointsPrctageAway <=1 AND threePointsPrctageAway >= 0), assistsAway numeric, reboundsAway numeric, homeTeamWins boolean ); CREATE TABLE GameDetail( idGame char(8) REFERENCES Game, idTeam varchar(10) REFERENCES Team, idPlayer varchar(10) REFERENCES Player, startPosition char(1), comment varchar(50), playingTime interval, fieldGoalsMade numeric, fieldGoalsAttempted numeric, fieldGoalsPrctage numeric CHECK(fieldGoalsPrctage <=1 AND fieldGoalsPrctage >= 0), threePointsMade numeric, threePointsAttempted numeric, threePointsPrctage numeric CHECK(threePointsPrctage <=1 AND threePointsPrctage >= 0), freeThrowsMade numeric, freeThrowsAttempted numeric, freeThrowsPrctage numeric CHECK(freeThrowsPrctage <=1 AND freeThrowsPrctage >= 0), offensiveRebounds numeric, defensiveRebounds numeric, rebounds numeric, assists numeric, steals numeric, blockedShots numeric, turnovers numeric, personnalFoul numeric, points numeric, plusMinus numeric, PRIMARY KEY(idGame, idTeam, idPlayer) ); \i players.sql \i teams.sql \i games.sql \i games-details.sql --? 2 - Dans quelle ville est située l’équipe surnommée les Grizzlies? -- SELECT city -- FROM TEAM -- WHERE nickname = 'Grizzlies'; -- city -- --------- -- Memphis -- (1 row) --? 3 - Quel est le plus gros score marqué à domicile par une équipe? -- SELECT max(ptsHome) -- FROM Game; -- max -- ----- -- 168 -- (1 row) --? 4 - Quel est le plus gros score marqué à l’extérieur par une équipe? -- SELECT max(ptsAway) -- FROM Game; -- max -- ----- -- 168 -- (1 row) --? 5 - Le résultat obtenu devrait être surprenant. Justifier que vos réponses aux deux dernières --? questions sont correctes. -- Le resultat est le même entre à domicile et à l'exterieur. Les scores ont du être réalisé sur deux match différents mais ils ont le même max. -- SELECT 'Points max à domicile : ' || max(ptsHome) || 'Avec pour id de game : ' || id -- FROM Game -- GROUP BY ptsHome, id; -- ?column? -- ------------------------------------------------------------ -- Points max à domicile : 93Avec pour id de game : 21200728 -- Points max à domicile : 106Avec pour id de game : 20501075 -- Points max à domicile : 94Avec pour id de game : 22000463 -- Points max à domicile : 94Avec pour id de game : 21600817 -- Points max à domicile : 103Avec pour id de game : 20700669 -- Points max à domicile : 129Avec pour id de game : 20800711 -- Points max à domicile : 106Avec pour id de game : 21000744 -- Points max à domicile : 106Avec pour id de game : 20901056 -- Points max à domicile : 101Avec pour id de game : 20600197 -- SELECT 'Points max à exterieur : ' || max(ptsAway) || 'Avec pour id de game : ' || id -- FROM Game -- GROUP BY ptsAway, id; -- ?column? -- ------------------------------------------------------------- -- Points max à exterieur : 84Avec pour id de game : 21200728 -- Points max à exterieur : 94Avec pour id de game : 20501075 -- Points max à exterieur : 96Avec pour id de game : 22000463 -- Points max à exterieur : 90Avec pour id de game : 21600817 -- Points max à exterieur : 116Avec pour id de game : 20700669 --? 6 - Quelle équipe a marqué le plus de points à domicile, indiquez l’abbréviation, le nickname, la ville, les points marqués et la date du match ? -- SELECT abbreviation, nickname, city, ptsHome, dateGame -- FROM Team t, Game g -- WHERE t.id = g.idHomeTeam AND g.ptsHome = (SELECT max(ptsHome) -- FROM Game); -- abbreviation | nickname | city | ptshome | dategame -- --------------+----------+--------+---------+------------ -- DEN | Nuggets | Denver | 168 | 2008-03-16 -- (1 row) --? 7 - Même pour l'exterieur -- SELECT abbreviation, nickname, city, ptsAway, dateGame -- FROM Team t, Game g -- WHERE t.id = g.idVisitorTeam AND g.ptsAway = (SELECT max(ptsAway) -- FROM Game); -- abbreviation | nickname | city | ptsaway | dategame -- --------------+----------+---------+---------+------------ -- CHI | Bulls | Chicago | 168 | 2019-03-01 -- (1 row) --? 8 - Quels sont les noms des joueurs qui ont le plus gros pourcentage de paniers à trois points dans un match ? -- SELECT p.name, max(threePointsPrctage) -- FROM Player p, GameDetail gd -- WHERE p.id = gd.idPlayer AND gd.threePointsPrctage = (SELECT max(threePointsPrctage) -- FROM GameDetail) -- GROUP BY name, threePointsPrctage; -- name | max -- --------------------------+----- -- Malcolm Hill | 1 -- Rajon Rondo | 1 -- Kobi Simmons | 1 -- Derrick Jones Jr. | 1 -- Scott Williams | 1 -- Isaiah Joe | 1 -- Jarrell Brantley | 1 -- Tahjere McCall | 1 -- Jeremy Senglin | 1 --? 9 - Quels sont les joueurs qui ont la moyenne la plus élevée de pourcentage de paniers à trois points sur tous les matchs ? SELECT p.id, avg(threePointsPrctage) FROM Player p, GameDetail gd WHERE p.id = gd.idPlayer AND avg(threePointsPrctage) >= ALL(SELECT avg(threePointsPrctage) FROM GameDetail) GROUP BY p.id, threePointsPrctage ORDER BY threePointsPrctage ASC; --? 10 - Pour la saison 2012, calculer quel est le plus grand nombre de paniers à 3 points marqués par un joueur. SELECT max(threePointsMade), g.season, p.name FROM GameDetail gd, Game g, Player p WHERE gd.idGame = g.id AND gd.idPlayer = p.id AND g.season = '2012' GROUP BY threePointsMade, season, p.name ORDER BY threePointsMade DESC; --? 11 - Pour chaque conférence, quelle équipe (nom et ville) est la dernière à avoir rejoint la NBA en indiquant l’année d’arrivée en NBA ? --? (Faire une seule requête pour les deux conférences, et non pas une requête par conférence.) SELECT nickname, city FROM Team t, Game g, GameDetail gd WHERE t.id = gd.idTeam AND gd.idGame = g.id GROUP BY g.season HAVING max(season) - min(season) IN(SELECT max(max(season) - min(season)) FROM Game); --? 12 - Quel est le nom du joueur qui a fait le plus de passes décisives dans un match? Donner la date de son exploit. SELECT p.name, gd.turnovers, g.dateGame FROM Player p, GameDetail gd, Game g WHERE p.id = gd.idPlayer AND gd.idGame = g.id AND gd.turnovers >= ALL(SELECT gd.turnovers FROM GameDetail); --? 13 - Quel est le joueur qui a fait le plus rapidement 6 fautes personnelles ? Donner la date de cette performance et le nom du joueur. -- SELECT p.name, gd.playingTime, gd.personnalFoul -- FROM Player p, GameDetail gd -- WHERE p.id = gd.idPlayer AND gd.playingTime <= ALL(SELECT playingTime FROM GameDetail WHERE personnalFoul = 6) AND gd.personnalFoul = 6; -- name | playingtime | personnalfoul -- ---------------+-------------+--------------- -- Sean Williams | 00:02:00 | 6 -- (1 row) --? 14 - Même question, mais on veut désormais les deux équipes qui se sont affrontées lors de ce match. --? 15 - Écrire la requête permettant d’afficher la liste des joueurs qui ont fait un triple double dans --? leur carrière en donnant leurs statistiques dans les 5 catégories. Un triple double c’est avoir au moins --? dans 3 catégories des statistiques à 2 chiffres (points, rebonds, passes, contres, interceptions) dans un même match. --? 16 - Écrire la requête permettant d’afficher la liste des joueurs qui ont fait plus d’interception que de --? balles perdues et qui ont intercepté plus de 1000 balles dans leur carrière.