20 Déc2015
Les requêtes SELECT - Base de données LOCATION
Objectif : Écrire des requêtes SELECT comportant la projection, le tri, le regroupement et les jointures.
Soit le schéma relationnel suivant:
Travail à faire:
Écrire les requêtes SQL permettant de :
- Trouver les habitations de type T1 à Tanger et de type T2 à Marrakech.
- Déterminer le prix minimum, maximum et moyen des habitations de chaque type.
- La même que la requête précédente, mais donner les prix pour type et ville et seulement pour les villes de Tanger et Marrakech.
- Pour chaque habitation, afficher son code, son type, la ville où elle se trouve, les noms des locataires et leur profession.
- La même que la requête précédente mais afficher aussi les habitations qui n’ont jamais été loué.
- Trouver les clients qui ont loué une habitation dans la même ville où ils ont leur résidence principale (VilleResid).
- Pour chaque type compter combien des habitations de ce type ont été prises en location. Montrer seulement les types dont au moins 3 habitations (pas forcement différentes) ont été prises en location.
- Pour chaque habitation compter combien de mois en totale a été loué.
- Pour chaque client calculer combien a dépensé en location en totale.
- Trouver les clients qui n’ont jamais loué une habitation.
- Trouver les clients qui ont loué à la fois des habitations de type T1 et de type T2.
//Auteur: CHAOULID
//Copyright: Exelib.net
//Q1 select * from HABITATION where (Typeh='T1' and Ville='Tanger') or (Typeh='T2' and Ville='Marrakech') //Q2 select Typeh, MIN(LoyerM) as "Prix Min",MAX(LoyerM) as "Prix Max",AVG(LoyerM) as "Prix Moyen" from HABITATION group by Typeh //Q3 select Typeh,Ville, MIN(LoyerM) as "Prix Min",MAX(LoyerM) as "Prix Max",AVG(LoyerM) as "Prix Moyen" from HABITATION where Ville='Tanger' or Ville='Marrakech' group by Typeh,Ville //Q4 select h.Codeh,h.Typeh,h.Ville,c.Nom,c.Profession from HABITATION h inner join LOCATION l on h.Codeh=l.Codeh inner join CLIENT c on l.Codecl=c.Codecl //Q5 select h.Codeh,h.Typeh,h.Ville,c.Nom,c.Profession from HABITATION h left join LOCATION l on h.Codeh=l.Codeh left join CLIENT c on l.Codecl=c.Codecl //Q6 select c.* from HABITATION h inner join LOCATION l on h.Codeh=l.Codeh inner join CLIENT c on l.Codecl=c.Codecl where h.Ville=c.VilleResid //Q7 select h.Typeh,COUNT(Id_location) as "Nombre de locations" from HABITATION h inner join LOCATION l on h.Codeh=l.Codeh group by h.Typeh //Q8 select h.Codeh, SUM(l.NombMois) as "Nombre de mois" from HABITATION h inner join LOCATION l on h.Codeh=l.Codeh group by h.Codeh //Q9 select c.Codecl,SUM(l.NombMois*h.LoyerM) as "Dépense en location" from CLIENT c inner join LOCATION l on c.Codecl=l.Codecl inner join HABITATION h on l.Codeh=h.Codeh group by c.Codecl //Q10 select * from CLIENT where Codecl not in (select distinct(Codecl) from LOCATION) //Q11 select c.* from CLIENT c inner join LOCATION l on c.Codecl=l.Codecl inner join HABITATION h on l.Codeh=h.Codeh where h.Typeh='T1' intersect select c.* from CLIENT c inner join LOCATION l on c.Codecl=l.Codecl inner join HABITATION h on l.Codeh=h.Codeh where h.Typeh='T2'