UNIVERSITÉ DU QUÉBEC À MONTRÉAL
Département d'informatique
TP1
Cours : INF3180-E06
(Bases de données)
Travail remis à
Georges Debay
Login de la remise (obligatoire) : _ via CREPUQ ___________
Nom : Grenon Prénom : Nicola
Code permanent : GREN30077307 Groupe : ___________
Nom : _____________________________
Prénom : _____________________________
Code permanent : _____________________________
Groupe : ___________
Numéro 1, algèbre relationnnelle:
1. π No_Logement, No_Immeuble
(σ Occ_Code="L" et Nb_Chambres=3 et Loyer≤750.0 et Nb_Logements ≥ 25 ( Logements @0 Immeubles ))
2. π Loc_Nom
(σ Log_No_Immeuble = No_immeuble et Log_No_Logement = No_Logement et NbChambres = 1 et Vil_Nom_Ville = "Boucherville"
( Locataires X
(Logements @0 Immeubles ))) 3. π Nb_Chambres, No_Immeuble, No_Logement
(σ Occ_Code="L" et Vil_Nom_Ville = "Longueuil"
( Logements @0 Immeubles ))
4. π Description_Metier, Ent_Date, No_Logement, No_Immeuble
(σ Emp_Emp_Nom = Emp_Nom et Taux_Code_Metier = Code_Metier et No_Logement = Log_No_Logement et Foyer = "O" et Salle_A_Diner = "N" et (Vil_Nom_Ville = "Boucherville" ou Vil_Nom_Ville = "St-Bruno") ( (Immeubles @0 Logements) X Entretiens X Employes X Taux_Metiers ))
5. π Loc_Nom, No_Logement, No_Immeuble (σ Log_No_Logement = No_Logement et NbChambres ≥ 2 et Occupant ="5"
( Locataires X Logements )) 6. π Loc_Nom, No_Logement, No_Immeuble
(σ Log_No_Immeuble = No_immeuble et Log_No_Logement = No_Logement et Occ_Code="C" et Meuble="S" et Foyer="O" et Vil_Nom_Ville="St-Bruno"
( Locataires X
( Logements @0 Immeubles ))) 7. π No_Logement, No_Immeuble
(σ Log_No_Logement = No_Logement
et Chauffage="H" et Date_Fin_Bail ="2006/07/01"
( Locataires X Logements ))
8. Dans le tableau de présentation des tables, on remarque que Loc_Nom est souligné, sous-entendant qu'il s'agit d'une clé primaire. Si tel est le cas, il ne peut pas y avoir plus d'un individu ayant le même nom comme locataire dans notre système. Si nous n'avions pas d'obligation d'unicité sur la valeur Loc_Nom, alors on pourrait utiliser:
π Locataires.Loc_Nom, Locataires.Log_No_Logement (σ Locataires.Loc_Nom Locataires2.Loc_Nom ( Locataires X
ρ Locataires2 ( Locataires )))
9. π No_Immeuble, (Revenu_Loyer – Entretiens – Assurances – Conciergerie – Frais_Hypotheque – Taxes) (σ Annee = 2005 ( Archives ))
10. π Loc_Nom
(σ Date_Fin_Bail < "2006/05/31" ( Locataires )) 11. Créer un annuaire téléphonique des locataires:
π Loc_Nom, No_Immeuble, No_Logement, Loc_Telephone (σ Log_No_Logement = No_Logement
(Locataires X
( Logements @0 Immeubles )))
Numéro 2&3, SQL:
--- -- INF3180 - E06 - TP1 -- -- par Nicola Grenon GREN30077303 -- -- nicola.grenon@umontreal.ca -- ---
--- -- Initialisations -- ---
SET ECHO ON
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY/MM/DD' /
--- -- Création des tables -- ---
CREATE TABLE Locataires
(Loc_Nom VARCHAR2 (30) PRIMARY KEY, Loc_Telephone VARCHAR2 (10),
Date_Entree DATE, Date_Fin_Bail DATE,
Occupant VARCHAR2 (1) )
/
CREATE TABLE Occupations
(Occ_Code VARCHAR2 (1) PRIMARY KEY, Occ_Description VARCHAR2 (10)
) /
CREATE TABLE Chauffages
(Chau_Code VARCHAR2 (1) PRIMARY KEY, Chau_Description VARCHAR2 (12)
) /
CREATE TABLE Logements
(No_Logement NUMBER (4) PRIMARY KEY, Loyer NUMBER (6,2),
Nb_Chambres NUMBER (2), Nb_Salle_Bain NUMBER (2), A_Louer VARCHAR2 (1), Foyer VARCHAR2 (1), Meuble VARCHAR2 (1), Salle_A_Diner VARCHAR2 (1) )
/
CREATE TABLE Entretiens
(No_Entretien NUMBER (4) PRIMARY KEY, Ent_Date DATE,
Nb_Heures NUMBER (3,1), Emp_Emp_Nom VARCHAR2 (25) )
/
CREATE TABLE Immeubles
(No_Immeuble NUMBER (4) PRIMARY KEY, Adresse VARCHAR2 (30),
Nb_Etages NUMBER (2), Nb_Logements NUMBER (2), Annee_en_cours NUMBER (4), Assurance NUMBER (6,2), Conciergerie NUMBER (6,2), Cumul_Loyer NUMBER (8), Entretien NUMBER (8,2), Evaluation NUMBER (7), Prix_Achat NUMBER (7), Hypotheque NUMBER (7), Taux_Hypotheque NUMBER (9,2) )
/
CREATE TABLE Actionnaires
(No_Actionnaire NUMBER (5) PRIMARY KEY, Adresse VARCHAR2 (30),
Nom_Actionnaire VARCHAR2 (30), Telephone VARCHAR2 (10), Nb_Parts NUMBER (7,3),
Profit_A_Distribuer NUMBER (8,2), Valeur_Part NUMBER (7,3) )
/
CREATE TABLE Employes
(Emp_Nom VARCHAR2 (25) PRIMARY KEY, Emp_Adr VARCHAR2 (30)
) /
CREATE TABLE Taux_Metiers
(Code_Metier VARCHAR2 (2) PRIMARY KEY, Description_Metier VARCHAR2 (20),
Taux_Horaire NUMBER (5,2) )
/
CREATE TABLE Concierges
(Nom_Concierge VARCHAR2 (25) PRIMARY KEY, Adresse VARCHAR2 (30),
Salaire_Mensuel NUMBER (6,2) )
/
CREATE TABLE Villes
(Nom_Ville VARCHAR2 (12) PRIMARY KEY, Taux_Taxes NUMBER (4,2)
) /
CREATE TABLE Archives
(Annee NUMBER (4), Evaluation NUMBER (9), Taxes NUMBER (8,2), Frais_Hypotheque NUMBER (8,2), Conciergerie NUMBER (8,2), Assurances NUMBER (6,2), Entretien NUMBER (8,2), Revenu_Loyer NUMBER (8) )
/
--- -- Clés distantes -- ---
ALTER TABLE Locataires ADD
(Log_No_Immeuble NUMBER (4) REFERENCES Immeubles, Log_No_Logement NUMBER (4) REFERENCES Logements )
/
ALTER TABLE Logements ADD
(No_Immeuble NUMBER (4) REFERENCES Immeubles, Chauffage VARCHAR2 (1) REFERENCES Chauffages, Occ_Code VARCHAR2 (1) REFERENCES Occupations )
/
ALTER TABLE Entretiens ADD
(Imm_No_Immeuble NUMBER (4) REFERENCES Immeubles, Log_No_Logement NUMBER (4) REFERENCES Logements )
/
ALTER TABLE Immeubles ADD
(Vil_Nom_Ville VARCHAR2 (12) REFERENCES Villes, Con_Nom_Concierge VARCHAR2 (25) REFERENCES Concierges )
/
ALTER TABLE Employes ADD
(Taux_Code_Metier VARCHAR2 (2) REFERENCES Taux_Metiers )
/
ALTER TABLE Archives ADD
(No_Immeuble NUMBER (4) REFERENCES Immeubles )
/
--- -- Données factices -- ---
INSERT INTO Occupations VALUES('L','Libre') /
INSERT INTO Occupations VALUES('C','Concierge') /
INSERT INTO Occupations VALUES('R','Regulier') /
INSERT INTO Chauffages VALUES('E','Electricite') /
INSERT INTO Chauffages VALUES('G','Gaz') /
INSERT INTO Chauffages VALUES('H','Huile') /
INSERT INTO Chauffages VALUES('B','Bois') /
INSERT INTO Villes VALUES('Longueuil',2) /
INSERT INTO Villes VALUES('St-Bruno',3) /
INSERT INTO Villes
VALUES('Boucherville',4) /
INSERT INTO Concierges
VALUES('Marcel','436 là-bas',400) /
INSERT INTO Concierges
VALUES('Bill','452 là-bas',401) /
INSERT INTO Concierges
VALUES('Georges','459 là-bas',402) /
INSERT INTO Concierges
VALUES('Mar32cel','436 là-bas',400) /
INSERT INTO Concierges
VALUES('Bi23ll','452 là-bas',401) /
INSERT INTO Concierges
VALUES('Geo23rges','459 là-bas',402) /
INSERT INTO Concierges
VALUES('Mar45cel','436 là-bas',400) /
INSERT INTO Concierges
VALUES('Bi56ll','452 là-bas',401) /
INSERT INTO Concierges
VALUES('Geo67rges','459 là-bas',402) /
INSERT INTO Immeubles
VALUES(1,'123 ici',2,5,2006,1234.56,1234.56,33333,5000,500000,400000,200000,5,'Boucherville','Marcel') /
INSERT INTO Immeubles
VALUES(2,'123 pasici',2,25,2006,1234.56,1234.56,33333,5000,500000,400000,200000,5,'Longueuil','Bill') /
INSERT INTO Immeubles
VALUES(3,'123 ailleurs',2,5,2006,1234.56,1234.56,33333,5000,500000,400000,200000,5,'St-Bruno','Georges') /
INSERT INTO Immeubles
VALUES(4,'1a23 ici',2,35,2006,1234.56,1234.56,33333,5000,500000,400000,200000,5,'St-Bruno','Mar32cel') /
INSERT INTO Immeubles
VALUES(5,'1a23 pasici',2,25,2006,1234.56,1234.56,33333,5000,500000,400000,200000,5,'Longueuil','Bi23ll')
/
INSERT INTO Immeubles VALUES(6,'1a23
ailleurs',2,45,2006,1234.56,1234.56,33333,5000,500000,400000,200000,5,'Boucherville','Geo67rges') /
INSERT INTO Logements
VALUES(1,500,1,1,'N','O','O','N',1,'B','C') /
INSERT INTO Logements
VALUES(2,505,3,1,'O','N','S','O',2,'H','L') /
INSERT INTO Logements
VALUES(3,509,7,2,'O','O','S','O',3,'H','C') /
INSERT INTO Logements
VALUES(4,515,3,1,'O','O','N','O',2,'H','C') /
INSERT INTO Logements
VALUES(5,516,5,1,'O','N','O','O',2,'H','L') /
INSERT INTO Logements
VALUES(6,500,1,1,'N','O','S','N',1,'B','R') /
INSERT INTO Logements
VALUES(7,505,3,1,'O','O','N','O',2,'H','L') /
INSERT INTO Logements
VALUES(8,509,7,2,'N','O','O','N',3,'E','R') /
INSERT INTO Logements
VALUES(9,515,3,1,'O','N','N','O',2,'H','C') /
INSERT INTO Logements
VALUES(10,516,5,1,'O','O','S','O',2,'H','L') /
INSERT INTO Locataires
VALUES('Bob Binette','5557654321','1999/07/01','2006/07/01','5',1,1) /
INSERT INTO Locataires
VALUES('Bup Bunette','5557654421','1998/07/01','2006/02/25','5',2,2) /
INSERT INTO Locataires
VALUES('Baf Binette','5566654321','1997/07/01','2006/07/01','5',3,3) /
INSERT INTO Locataires
VALUES('Bob11 Binette','5557654321','2005/07/01','2006/07/01','5',4,4) /
INSERT INTO Locataires
VALUES('Bup11 Bunette','5557654421','2005/07/01','2006/02/25','5',5,5) /
INSERT INTO Locataires
VALUES('Baf11 Binette','5566654321','2005/07/01','2006/07/01','5',6,6) /
INSERT INTO Locataires
VALUES('Bauuf Binette','5566654321','1997/07/01','2006/07/01','5',2,7) /
INSERT INTO Locataires
VALUES('Bob1uu1 Binette','5557654321','2005/07/01','2006/07/01','5',1,8) /
INSERT INTO Locataires
VALUES('Bup1uu1 Bunette','5557654421','2005/07/01','2006/02/20','5',3,9) /
INSERT INTO Locataires
VALUES('Baf1uu1 Binette','5566654321','2005/07/01','2006/07/01','5',5,10) /
INSERT INTO Archives
VALUES(2005,500000,3000,20000,8000,5000,10000,70000,1) /
INSERT INTO Archives
VALUES(2005,500000,3000,20000,8000,5000,10000,72000,2) /
INSERT INTO Archives
VALUES(2005,500000,3000,20000,8000,5000,10000,73000,3) /
INSERT INTO Archives
VALUES(2005,500000,3000,20000,8000,5230,10000,55000,4)
/
INSERT INTO Archives
VALUES(2005,500000,3000,20000,8000,5045,10000,52000,5) /
INSERT INTO Archives
VALUES(2005,500000,3000,20000,8000,5143,10000,53000,6) /
INSERT INTO Taux_Metiers
VALUES(6,'Destructeur',66.33) /
INSERT INTO Employes VALUES('Max','1 là',6) /
INSERT INTO Entretiens
VALUES(123,'2006/01/01',5,'Max',1,1) /
--- -- Manipulations de la base de données (#3) -- ---
-- 1 --
SELECT No_Logement, Logements.No_Immeuble FROM Logements, Immeubles
WHERE Logements.No_Immeuble = Immeubles.No_Immeuble AND
Occ_Code='L' AND Nb_Chambres=3 AND Loyer<=750.0 AND Nb_Logements >=25 /
-- 2 --
SELECT Loc_Nom
FROM Logements, Immeubles, Locataires
WHERE Logements.No_Immeuble = Immeubles.No_Immeuble AND Locataires.Log_No_Immeuble = Immeubles.No_Immeuble AND Logements.No_Logement = Locataires.Log_No_Logement AND
Nb_Chambres=1 AND Vil_Nom_Ville = 'Boucherville' /
-- 3 --
SELECT Nb_Chambres, COUNT(*) AS Frequence FROM Logements,Immeubles
WHERE Logements.No_Immeuble = Immeubles.No_Immeuble AND Occ_Code='L' AND Vil_Nom_Ville = 'Longueuil' GROUP BY Nb_Chambres
/
-- 4 --
SELECT Description_Metier, Ent_Date, Logements.No_Logement AS No_Logement, Logements.No_Immeuble AS No_Immeuble
FROM Logements, Immeubles, Entretiens, Employes, Taux_Metiers
WHERE Logements.No_Immeuble = Immeubles.No_Immeuble AND Logements.No_Logement = Log_No_Logement AND Emp_Emp_Nom = Emp_Nom AND Taux_Code_Metier = Code_Metier AND
Foyer='O' AND Salle_A_Diner = 'N' AND (Vil_Nom_Ville = 'Boucherville' OR Vil_Nom_Ville = 'St-Bruno') /
-- 5 --
SELECT Loc_Nom, No_Logement, No_Immeuble FROM Logements, Locataires
WHERE Log_No_Logement = No_Logement AND Nb_Chambres>=2 AND Occupant = '5' /
-- 6 --
SELECT Loc_Nom, No_Logement, Logements.No_Immeuble AS No_Immeuble FROM Locataires, Logements, Immeubles
WHERE Logements.No_Immeuble = Immeubles.No_Immeuble AND Log_No_Logement = Logements.No_Logement AND Occ_Code='C' AND Meuble = 'S' AND Foyer='O' AND Vil_Nom_Ville='St-Bruno'
ORDER BY Loc_Nom DESC /
-- 7 --
SELECT Logements.No_Logement AS No_Logement, Log_No_Immeuble AS No_Immeuble FROM Logements, Locataires
WHERE Log_No_Logement = Logements.No_Logement AND Chauffage='H' AND Date_Fin_Bail ='2006/07/01' /
-- 8 --
SELECT Loc_Nom, COUNT(*) AS Frequence FROM Locataires
GROUP BY Loc_Nom HAVING COUNT(*) >= 2 /
-- 9 --
SELECT No_Immeuble, (Revenu_Loyer - Entretien - Assurances - Conciergerie - Frais_Hypotheque - Taxes) AS Profits
FROM Archives WHERE Annee=2005 /
-- 10 -- DELETE
FROM Locataires
WHERE Date_Fin_Bail < '2006/05/31' /
-- 11 --
SELECT Loc_Nom AS Nom, Log_No_Immeuble AS No_Immeuble, Logements.No_Logement AS No_Logement, Loc_Telephone AS Telephone
FROM Immeubles, Logements, Locataires
WHERE Log_No_Logement = Logements.No_Logement AND Log_No_Immeuble = Immeubles.No_Immeuble /
-- On confirme les données dans la base COMMIT
/