Ces questions n’étaient pas toujours faciles car elles impliquaient parfois plusieurs jointures 😦
Questions – TP jointures
1. Noms des gaulois et noms du village des gaulois dont le métier est ‘femme du chef’ (1 lignes).
SELECT gaulois.nom,village.nom AS 'nom du village' FROM gaulois JOIN village USING(vilno) WHERE metier = 'femme du chef';
L’ alias AS 'nom du village'
a été rajouté pour éviter un affichage avec deux attributs appelés 'nom'
:
+----------+-----------------+ | nom | nom du village | +----------+-----------------+ | Bonemine | Village gaulois | +----------+-----------------+ 1 row in set (0.00 sec)
Mais je préfère utiliser ON
pour être précis dans ces jointures comme ci-dessous :
SELECT g.nom,v.nom AS 'nom du village' FROM gaulois AS g JOIN village AS v ON g.vilno = v.vilno WHERE metier = 'femme du chef';
2. Noms, métiers des gaulois et noms des potions que des gaulois savent préparer (27 lignes).
SELECT g.nom AS 'nom de Gaulois', g.metier, p.nom AS 'nom de potion' FROM gaulois AS g JOIN druide_potion AS d ON g.gauno = d.gauno JOIN potion as p ON d.potno = p.potno;
+----------------+------------+---------------+ | nom de Gaulois | metier | nom de potion | +----------------+------------+---------------+ | Pronostix | druide | Invincibilite | | Marjolaine | druide | Invincibilite | | Amnesix | druide | Invincibilite | | Panoramix | druide | Invincibilite | | Otorino | druide | Invisibilite | | Panoramix | druide | Invisibilite | | Otorino | druide | Genuis | | Berlix | professeur | Genuis | | Amnesix | druide | Genuis | | Panoramix | druide | Genuis | | Otorino | druide | Jouvence | | Laringolix | druide | Jouvence | | Marjolaine | druide | Jouvence | | Jolifleur | NULL | Jouvence | | Panoramix | druide | Jouvence | | Diagnostix | druide | Gentil | | Otorino | druide | Gentil | | Amnesix | druide | Gentil | | Panoramix | druide | Gentil | | Otorino | druide | Dodo | | Panoramix | druide | Dodo | | Pronostix | druide | Aphrodisiaque | | Otorino | druide | Aphrodisiaque | | Laringolix | druide | Aphrodisiaque | | Marjolaine | druide | Aphrodisiaque | | Amnesix | druide | Aphrodisiaque | | Panoramix | druide | Aphrodisiaque | +----------------+------------+---------------+ 27 rows in set (0.00 sec)
3. Numéros, noms des batailles et noms des villages et des camps (10 lignes).
SELECT batno, bataille.nom, village.nom, camp.nom FROM bataille JOIN village USING(vilno) JOIN camp USING(campno);
+-------+-----------------+-----------------+------------+ | batno | nom | nom | nom | +-------+-----------------+-----------------+------------+ | 1 | alesia | Aquae Calidae | BABAORUM | | 5 | gergovie | Village gaulois | BABAORUM | | 6 | poisson d avril | Village gaulois | BABAORUM | | 2 | NULL | Aquae Calidae | PETITBONUM | | 7 | NULL | Village gaulois | PETITBONUM | | 3 | NULL | Borvo | LAUDANUM | | 4 | NULL | Borvo | LAUDANUM | | 8 | NULL | Village gaulois | LAUDANUM | | 10 | NULL | Lutece | LAUDANUM | | 9 | NULL | Village gaulois | AQUARIUM | +-------+-----------------+-----------------+------------+ 10 rows in set (0.01 sec)
ou
SELECT batno, b.nom AS 'bataille', v.nom AS 'village', c.nom AS 'camp' FROM bataille AS b JOIN village AS v ON b.vilno=v.vilno JOIN camp AS c ON b.campno=c.campno;
+-------+-----------------+-----------------+------------+ | batno | bataille | village | camp | +-------+-----------------+-----------------+------------+ | 1 | alesia | Aquae Calidae | BABAORUM | | 5 | gergovie | Village gaulois | BABAORUM | | 6 | poisson d avril | Village gaulois | BABAORUM | | 2 | NULL | Aquae Calidae | PETITBONUM | | 7 | NULL | Village gaulois | PETITBONUM | | 3 | NULL | Borvo | LAUDANUM | | 4 | NULL | Borvo | LAUDANUM | | 8 | NULL | Village gaulois | LAUDANUM | | 10 | NULL | Lutece | LAUDANUM | | 9 | NULL | Village gaulois | AQUARIUM | +-------+-----------------+-----------------+------------+ 10 rows in set (0.01 sec)
4. Noms du ou des chefs du ou des villages les plus grands dont le chef est connu. (1 ligne)
SELECT g.nom AS 'nom du chef', v.nom AS 'nom du village' FROM gaulois AS g JOIN village AS v ON g.gauno = v.chef WHERE nbhutte = (SELECT MAX(nbhutte) FROM village WHERE village.chef IS NOT NULL);
+---------------+----------------+ | nom du chef | nom du village | +---------------+----------------+ | Vercingetorix | Alesia | +---------------+----------------+ 1 row in set (0.01 sec)
5. Numéros, noms des batailles et noms des potions absorbées un jour de début de bataille (7 lignes).
SELECT DISTINCT batno AS 'numéro de bataille', b.nom AS 'bataille', p.nom AS 'potion' FROM bataille AS b JOIN potion AS p JOIN absorption AS a ON p.potno = a.potno WHERE a.dateab = b.datebat;
+--------------------+-----------------+---------------+ | numéro de bataille | bataille | potion | +--------------------+-----------------+---------------+ | 1 | alesia | Invincibilite | | 2 | NULL | Invisibilite | | 5 | gergovie | Invincibilite | | 6 | poisson d avril | Invincibilite | | 7 | NULL | Invincibilite | | 8 | NULL | Invincibilite | | 9 | NULL | Invincibilite | +--------------------+-----------------+---------------+