Application domotique - Recherches avec jointures
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 :
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
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 :
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
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) :
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
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) :
SELECT heure, température
FROM Consigne
JOIN Profil ON profil = id_profil
WHERE type = "Chambre";