Application domotique - Recherches avec jointures

Série d'exercices

Cet exercice fait partie d'une série :

On souhaite gérer une installation domotique d'une maison afin de règler la température dans chaque pièce.

Au lieu de régler la température pièce par pièce, on a défini des profils et on établit des consignes pour chaque profil. On regroupe les pièces selon les profils suivants :

  • Chambre (chambre principale...)
  • Pièce de vie (salon, cuisine...)
  • Pièce technique (local technique, buanderie, garage...)
  • Salle d'eau (salle de bain, toilettes...)

L'application permet également de relever les températures dans certaines pièces de façon régulière.

On a enregistré en mémoire une base de données dont la structure est présentée par le schéma ci-dessous :

sql

L'exercice utilise les mots DISTINCT, FROM, JOIN, SELECT et WHERE.

On demande de compléter le code proposé pour réaliser les requêtes SQL suivantes :



Question 1

Créer la requête pour obtenir la désignation, la superficie et le type de profil associé de toutes les pièces de la maison :



Solution
SQL
SELECT désignation, superficie, type
FROM Pièce
JOIN Profil ON Profil.id_profil = Pièce.profil;

Il n’est pas nécessaire - mais recommandé - de préciser le nom de tables devant le nom des attributs quand il n’y a pas d’ambiguïté. On pourrait ainsi écrire :

SQL
SELECT désignation, superficie, type
FROM Pièce
JOIN Profil ON id_profil = profil;
Question 2

Créer la requête pour lister (sans doublon) les noms des pièces qui possèdent déjà des relevés de températures :





Solution
SQL
SELECT DISTINCT désignation
FROM Pièce
JOIN Température ON Température.pièce = Pièce.référence;

La solution pourrait s'écrire également (en étant moins lisible) :

SQL
SELECT DISTINCT désignation
FROM Pièce
JOIN Température ON pièce = référence;

Question 3

Créer la requête pour obtenir les consignes (heures et températures) du profil du type "Chambre" :





Solution
SQL
SELECT heure, température
FROM Consigne
JOIN Profil ON Consigne.profil = Profil.id_profil
WHERE type = "Chambre";

La solution pourrait s'écrire également (en étant moins lisible) :

SQL
SELECT heure, température
FROM Consigne
JOIN Profil ON profil = id_profil
WHERE type = "Chambre";