Vous êtes sur la page 1sur 2

Test 3 - correction

Durée : 30 minutes. Tous documents autorisés. Le barème est donné à titre indicatif et peut changer.

Soit le schéma relationnel suivant décrivant la base de données d'une agence immobilière :

Immeuble(ImmID, Adresse, Code_postal)


Type(id,libellé, nb_pieces)
Appartement(ImmID*,Napp,Etage, type*, surface) :immId référence
Immeuble(immId) et type_app référence Type(id)
Location(Ncontrat, (ImmID, Napp)*, Nom_locataire, Loyer, Date_debut) :
(immId,Napp) référence Appartement(ImmId,Napp)

Remarque : Les identifiants des immeubles, les codes postaux et les identifiants des types
d’appartement sont des chaines de caractères (varchar) et les prix sont donnés en euros.

Donnez sous forme de requête SQL les énoncés suivantes (dans le cas où les attributs ne
sont pas précisés, on donnera les clés primaires).:

1. (1pt) Les immeubles de Paris (code postal de la forme 75XXX).

SELECT ImmID
FROM Immeuble
WHERE Code_postal LIKE '75___';

2. (1pt) Les numéros de contrat de location des appartements de loyer entre 400 et 700€.

SELECT Ncontrat
FROM Location
WHERE Prix BETWEEN 400 AND 700;

3. (1pt) Les appartements dont la surface moyenne des pièces est supérieure à 20 m²

SELECT a.ImmID, a.Napp


FROM Appartement a, Type t
WHERE a.type=t.id
AND a.surface/t.nb_pieces >= 20

4. (1.5pts) Les adresses des locations concaténées avec leur code postal – rénommé en
adresse_complète, ainsi que leur prix en francs, renommés en prix_francs, pour les
locations démarrées en 2009. Les résultats seront ordonnés par ordre croissant des prix
et en cas de prix identiques, par ordre décroissant des adresses complètes.
Rappel : 1 euro correspond à 6.55957 francs.

SELECT Concat(Immeuble.adresse,’ ’,Immeuble.code_postal)as


`adresse_complète`, (Appartement.prix * 6.55957) AS 'prix_franc'
FROM Location, Immeuble
WHERE Location.ImmID = Immeuble.ImmID
And Location.date_debut>=’2009-01-01’
ORDER BY Prix_franc, `adresse_complète`

5. (0,5pt) Arrondissez dans la question précédente le prix des loyers au centime près
inférieur.

floor(Prix * 6.55957 * 100) / 100

6. (1.5pts) Les identifiants des appartements et les dates, au format 'DD/MM/YY', de


début de location de chaque appartement ayant au moins 2 pièces et situé au 1er étage.

SELECT a.immid,a.napp,date_format(l.Date_debut, '%d/%m/%y') as 'date'


FROM Location l, Appartement a, Type t
WHERE l.ImmID = a.ImmID
AND l.Napp = a.Napp
AND t.id=ap.type
AND t.nb_pieces>=2
AND a.etage = 1

7. (1pts) Les appartements loués depuis moins d'un mois.

SELECT l.ImmID, l.Napp


FROM Location l, Appartement a
WHERE a.ImmId=l.ImmId
AND a.Napp=l.Napp
AND date_sub(curdate(), interval 1 month) <= Location.Date_debut

8. (1pt)Les immeubles ayant un appartement de type T1 ou un appartement de type T2

SELECT DISTINCT Immeuble.Adresse


FROM Immeuble im, Appartement a
WHERE a.ImmID = im.ImmID
AND (a.type=’T1’ OR a.type=’T2’)

9. (1,5pts)Les immeubles ayant un appartement de type T1 et un appartement de type T2

SELECT DISTINCT im.Adresse


FROM Immeuble im, Appartement a1, Appartement a2
WHERE a1.ImmID = im.ImmID
AND a2.ImmID = im.ImmID
AND a1.Napp <> a2.Napp
AND a1.type=’T1’
AND a1.type=’T2’