Vous êtes sur la page 1sur 5
017 Dunod ‘opyright © Corrections des exercices 267 0. On utilise GROUP BY pour agréger les données de chaque prénom, SELECT prenom UN ( nombre } a8 nonbreF FROM baseprenoms "GROUP BY prenca La table des prénoms masculins est construite sur le méme modele + SELECT prenom , SUN ( nombre ) ax nonbreN FROM baseprenoms ‘WERE Gexe™"" GROUP BY prenom 1. On joint les deux tables pour obtenir les prénoms donnés a des filles et aussi A des garcons. SELECT *, nonbreF / (nombre + neabreW) as TaUXF FROM feminin JOIN nascuLin ON aasculin.prenom = fenton. prea 2. Une différence ensembliste permet d’obtenir les prénoms exclusivement féminins. SELECT prenon FROM bascorenons WHERE sexe="F" EXCEPT SELECT prenom FROM baseprenons WHERE sexe="¥! On procéde de méme pour Jes prénoms exclusivement masculins, SELECT prenom FROM bascorenons WHERE So EXCEPT SELECT prenom FROM baseprenons WHERE sexe="7" On fait union entre les épicénes, les purement féminins et les purement masculins, SELECT prenom , SELECT prenon , 1 AS TauxF FROM prenonfeninin ‘uroH SELECT prenon , nonbreF / nonbreF * nonbrel as TauxF FROM epicene Corrigé exo 6.1 AS TousF FROM prenonmasculin 0. La colonne ref. 1. SELECT ctondard, (re_mintren.max) /2 as rem.noy, temp FROM oto: SELECT ref, aimants. standard, materiau FROH aimants,90IN standards ON atnants.standard = standards, standard WHERE forme = "eyLindve” AND rennin >= 50 AND temp >- 100; © 2017 Dunod Copyright 268 Chapitre 6 Bases de données 3. L’opération demandée s‘appelle « division ens mbliste ». On utilise ici le fait qu'une requéte qui ne renvoie qu'une valeur est assimi e A cette valeur (d’oit le test du HAVING). SELECT standard FROM aimants GROUP BY standara NAVENG COUNT(DTSTENCT forme) = (SELECT COUNT(OISTINCT fore) FRON ainants); Corrigé exo 6.2 0. Le couple (Reference, Ingredient) est une clef primaire possible. 1. Une condition WHERE permet de ne garder que les lignes voulues SELECT ingredient FROM recette WHERE Reference = "W08"; 2. On fait une jointure pour obtenir la référence du ChocoPlusPlus. SELECT ingredtent FROM racette JOIN nomenclature ON recette.Reference = nonenclature.Reference 3. On regroupe par référence aprés avoir fait une jointure pour avoir les prix. On divise par 1000 pour convertir les kg en g. SELECT Reference, suM(Prix+ quant ite/1999) FROM recette’ JOIN matleres premieres ON recette. Ingredient = matleres_prenieres.tngredients 4, On commence par éerire la table dans laquelle le prix du cacao Criollo a été remplacé par celui du cacao Forastero SELECT + FRON matieres premieres WHERE Ingredient <> "Cacao criotto" SELECT "Cacao Criotlo" as Ingredient, prix FROM matieres_premicres WHERE Ingredient = "Cacco Forostero's Cotte requote sert alors de sous-requéte : SELECT Reference, SUM(Pries quant’ FROM recette 2020 (SELECT + FRON. watterss_premieres WHERE Ingredient <> "Cacao ¢riotto" SELECT "cocao Cr{ollo" as Ingredient, prix FROM matieres.orenteres WHERE angretent = "Cocoo rorgstero”) on recette-tngredient = matieres_pramteres.Ingredients GROUP BY Reference; (Corrigé exo 6.3 0. On obtient » 1. I suffit de compter le nombre de lignes de la table des inserits SELECT COUNT(4) FROM inserits; no% Copyright € Corrections des exercices 269 2. Dans la table prets, on compte combien d'inscrits apparaissent. SELECT COUNT(OISTINCT Nuserotnscription) FROM pret; faire le lien entre Roland Fr 3. On joint les trois tables por nklyn et les livres qu'il a empruntés. SELECT Uvres.+ FRoH WHERE Hom = "Franklyn" AND Prenom = "Roland" exo 6. , car cela impliquerait deux lignes identiques dans la table commande. Visiblement, la base de données n'a pas été trés bien congue! 1. Le prix de la table pizza peut évoluer (1 chaque pizza dans les commandes passées 2, On retire de la table des pizzas toutes les pizzas contenant l'un on l'autre ingrédient probléma- tique. nflation) et on connaitra toujours le prix de vente de SELECT + FROM pizza SELECT pizzo.* FROW pizza 203M ings WHERE Sngreaient sents ON pizza.non_pizza = ingrecients.nom_pizza reonaee” OR Sngredsent="purée de. tonotes” ; 3. On retire de Ia table des pizzas toutes celles comm wlées il y a moins d’um an, SELECT pizza. RON WHERE dateC"now", 9 201M commande OW pizza.noR_pi220 = comande.nom.pt2z4 "=r yeor") >= dates SELECT rumero_client, strftine(%¥"X) a5 annee, SUN(prix) a5 depense FROM conmande Copyright © 2017 Dunod 270 Chapitre 6 Bases de données Corrigé TP 6.0 0. On obtient | sisson ron oan 1 SELec +, “Oronge* a8 entreprise FROH orange WHERE YoLUne = @ ion SELECT +, "Airbus" a6 entroprise HOM airbus WERE Volume = 95 2 SELECT +, "oronge? as entrprise FH0H orange WERE Yolune = © SELECT +, "Airous* os entreprise FHOM atrbus WERE Yotune * 8 note v"ootes 3 | SELECT + FROM ars WERE date > aatec"non?, "3 years”); i | SELECT MIN(date), MX(éate) FROKstebus: 5. | SELECT MIN(dato) FROM airbus MARE Close> open; 6 | SELECT strFeine(*H7- Anda) mots, ME(lon), RAK(high) FROM orange GROUP BY nots 7 | SELECT date PON orange EXCEPT SELECT date FROM airbus; 8 SELECT orange.date FROM airbus 20IH orange OW orange. éate = airbus.cate ene orange-apen > strbus.opens 9. SELECT orange.date, orange. high-orange. low a8 grin.orange, airbus.high-afrbus.low as gain_atrbus FROM orange JOIN airbus ON orange.date = airbus.date; 10. Avec ce que nous avons vt en cours, une solution est de faire deux requétes avec dewx WHERE pour distinguer les cas, puis de faire une union, 7 Dunox Copyright € Correction d'un TP 271 SELECT orange.date, orange. high-orange. low a6 gain.orange, ‘irous.tigh-atrous.low as gain_airbus, "Grange" as entreprise Ron orange 201N sirius OW arange-date = airbus. date WERE gain_oranzedznin_airbus SELECT orange.date, orange. high-orange. low as gatn_orange, ‘airous.high-atrous.lor as gain_atrbus, "Airbus" as entreprise RON orange JOIN airbus OW orange. dave = airbus.date ‘WHERE gain-orange < gain airbus; Tl est aussi possible (utiliser des fonctionnalités de SQL que nous w'avons pas abordées en cours, comme le CASE. Birous.high-airbus.low as gain_oirbus, CASE orange.high-orange.low>airbus.high-airbus.Low SHON T THEN sorange" MMOH 8 THEN Sotrbus” ERO AS entreprise on orange 201" atric On orange. date ~ airs. dates ul. FROM airbus 30IN airbus as airbus? OW date(airous. date, "+1 doy") 12. SELECT Kinonth, airbus.open as open, airbus2.close a8 close, ¥.low, Hshigh FROM “ SELECT strftine("%Y-i0"date) a8 month, MIN(date) a8 mindate, nax(date)_as mandate, MIN(TOW) as Ton, MAK(HEN) a high Fro airbus asa JON airbus OW H.mindate = airbus. date JOD airbus a airbus2 On Minoxdace = atrous2.date: 13. On fait attention au fait que les jours d’achat-vente ne sont pas les mémes pour les deux entreprises. SELECT sir.annee, gain_orange, gainaicbus FROM (SELECT serfvine(Mv" date) ae annee, SUM(igh-Low) ae gainorange FROM orange GROUP’BY ance) as ofa (SELECT strftine("¥",date) as amnee, SUM(high-Low) a5 gain_airbus RON a1rouS GROUP BY ance) as air

Vous aimerez peut-être aussi