Correction des jointures SQL

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 |
+--------------------+-----------------+---------------+

N'hésitez-pas à poser une question, ou faire avancer le schmilblick

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.