Upload
nicoleta-bordeianu
View
296
Download
25
Tags:
Embed Size (px)
DESCRIPTION
proiect
Citation preview
ACADEMIA DE STUDII ECONOMICEFacultatea de Cibernetică, Statistică şi Informatică Economică
PROIECT BAZE DE DATE~AGENŢIE IMOBILIARĂ~
Prof. Iuliana Botha
AGENŢIE IMOBILIARĂ
Prezentare
Agenţia imobiliară oferă următoarele servicii pentru clienţi:
● o serie de oferte variate puse la dispoziţia clienţilor, categorisite în funcţie de numărul de camere, tipul locuinţei, zonă şi tipul de ofertă: închiriere si vânzare● agenţii imobiliari cei mai buni, experţi în domeniul lor● posibilitatea clienţilor de a se inregistra în baza noastră de date cu cererile de imobile
În acest sens am dorit crearea unei interfeţe care sa ajute operatorul să îşi desfăşoare mai uşor şi mai eficient activitatea.
Schema bazei de date
AGENTIIMB
CODAGENT NUMEAGENT TELEFON DATAANGAJ SEX CNP
OFERTE
CODOFERTA CODAGENT TIPLOC ZONA TIPOFERTA NRCAMERE PRET
CERERI
CODCERERE CODOFERTA CODCLIENT TIPLOC NRCAMERE ZONA
CLIENTII
CODCLIENT NUME DATANASTERII CNP TELEFON
CREAREA ŞI POPULAREA TABELELOR
drop table AGENTIIMB cascade constraints;drop table OFERTE cascade constraints;drop table CERERI cascade constraints;drop table CLIENTII cascade constraints;
●CREAREA TABELEI AGENTIIMB
CREATE TABLE AGENTIIMB
2
(CODAGENT varchar2(3),NUMEAGENT varchar2(25) not null,TELEFON number(10),DATAANGAJ date default sysdate,SEX varchar2(1),CNP number(13));
ALTER TABLE AGENTIIMB ADD CONSTRAINT agentiimb_codagent_pk PRIMARY KEY(codagent);
ALTER TABLE AGENTIIMBADD CONSTRAINT agentiimb_sex_ck CHECK(sex in ('m','f'));
●CREAREA TABELEI OFERTE
CREATE TABLE OFERTE(CODOFERTA number(3),CODAGENT varchar2(3)not null ,TIPLOC varchar2(15)not null,ZONA varchar2(12),TIPOFERTA varchar2(15),NRCAMERE number(2)not null,PRET number(5));
ALTER TABLE OFERTEADD CONSTRAINT oferte_codoferta_pk PRIMARY KEY(codoferta);
ALTER TABLE OFERTEADD CONSTRAINT oferte_zona_ck CHECK(zona in ('pipera', 'romana', 'militari', 'floreasca', 'pantelimon', 'dristor', 'primaverii'));
ALTER TABLE OFERTE ADD CONSTRAINT oferte_codagent_fk FOREIGN KEY (codagent) references AGENTIIMB (codagent);
●CREAREA TABELEI CLIENTII
CREATE TABLE CLIENTII(CODCLIENT varchar2(3),NUME varchar2(25) not null,DATANASTERII date not null,CNP number(13),TELEFON number(10));
ALTER TABLE CLIENTIIADD CONSTRAINT clientii_codclient_pk PRIMARY KEY(codclient);
3
●CREAREA TABELEI CERERI
CREATE TABLE CERERI(CODCERERE number(3), CODOFERTA number(3) not null,CODCLIENT varchar2(4) not null,TIPLOC varchar2(15),NRCAMERE number(2), ZONA varchar2(10));
ALTER TABLE CERERIADD CONSTRAINT cereri_codcerere_pk PRIMARY KEY(codcerere);
ALTER TABLE CERERIADD CONSTRAINT cereri_zona_ck CHECK (zona in ('pipera', 'romana', 'rahova', 'floreasca', 'primaverii', 'berceni'));
ALTER TABLE CERERIADD CONSTRAINT cereri_codoferta_fk FOREIGN KEY(codoferta) references OFERTE (codoferta);
ALTER TABLE CERERIADD CONSTRAINT cereri_codclient_fk FOREIGN KEY(codclient) references CLIENTII(codclient);
POPULAREA TABELELOR
INSERARE ÎNREGISTRĂRI
DELETE FROM AGENTIIMB;DELETE FROM OFERTE;DELETE FROM CLIENTII;DELETE FROM CERERI;
●ÎN TABELA AGENTIIMB
INSERT INTO AGENTIIMB VALUES('101','Popa Marian','0267322366',to_date('13-oct,2000','dd-mon,yyyy' ),'m', '1600413152627');INSERT INTO AGENTIIMB VALUES('201','Marinescu Ioana','0312242245',to_date('4-jan,2002','dd-mon,yyyy'),'f', '2840423142625');INSERT INTO AGENTIIMB VALUES('301','Ionescu Ion','0213456789',to_date('23-jun,2003','dd-mon,yyyy'),'m', '1800525162728');INSERT INTO AGENTIIMB VALUES('401','Popescu Maria','3254866',to_date('17-apr,2005','dd-mon,yyyy'),'f', '2840328141726');
4
INSERT INTO AGENTIIMB VALUES('501','Ionescu Alexandra','0213126822',to_date('22-nov,2003','dd-mm,yyyy'),'f', '2850329190413');INSERT INTO AGENTIIMB VALUES('601',' Marin Raluca','0213453456',to_date('18-may,2001','dd-mm,yyyy'),'f', '2022803162799');INSERT INTO AGENTIIMB VALUES('701','Dumitru Mirabela','0311234123',to_date('23-apr,1999', 'dd-mm,yyyy'),'f', '2801231031234');INSERT INTO AGENTIIMB VALUES('801','Ion Ion','0216786789',to_date('13-dec,2000', 'dd-mm,yyyy'),'m','1111126534876');
●ÎN TABELA OFERTE
INSERT INTO OFERTE VALUES('102','101', 'apartament','romana','inchiriere','4','10000');INSERT INTO OFERTE VALUES('202','401','apartament','floreasca','vanzare','2', '17000');INSERT INTO OFERTE VALUES('302','601','garsoniera','romana','vanzare','1','40000');INSERT INTO OFERTE VALUES('402','201','casa','pipera','vanzare','5','99000');INSERT INTO OFERTE VALUES('502','201','apartament','militari','vanzare','3','33000');INSERT INTO OFERTE VALUES('602','301','garsoniera','floreasca','inchiriere','1','600');INSERT INTO OFERTE VALUES('702','801','casa','primaverii','inchiriere','3','3000');INSERT INTO OFERTE VALUES('802','701', 'garsoniera','dristor','inchiriere','3','600');
●ÎN TABELA CLIENTII
INSERT INTO CLIENTII VALUES('10','Cristian Dobre',to_date('22/03/1960','dd/mm/yyyy'), '1600322562658', '0268912345');INSERT INTO CLIENTII VALUES('20','Adrian Georgescu',to_date('06/07/1982','dd/mm/yyyy'), '1820706523451', '0218932456');INSERT INTO CLIENTII VALUES( '30','Maria Andries',to_date('29/09/1987','dd/mm/yyyy'), '2870929234591', '02671234567');INSERT INTO CLIENTII VALUES('40','Catalin Marin',to_date('15/03/1977','dd/mm/yyyy'), '1770315834923', '0269333212');INSERT INTO CLIENTII VALUES
5
( '50', 'Rebecca Anderson',to_date('10/12/1977','dd/mm/yyyy'), '2771210123854', '0213211456');INSERT INTO CLIENTII VALUES('60', 'Raluca Dumitrascu',to_date('13/04/1988', 'dd/mm/yyyy'), '2880413152765', '0211234333');INSERT INTO CLIENTII VALUES('70', 'Bogdan Popescu',to_date('21/02/1979','dd/mm/yyyy'), '1790221345860', '0315556654');
●ÎN TABELA CERERI
INSERT INTO CERERI VALUES('11','102','40','apartament','2','rahova');INSERT INTO CERERI VALUES('22','302','40','garsoniera','2', 'berceni');INSERT INTO CERERI VALUES('33','602','10','garsoniera','1', 'primaverii');INSERT INTO CERERI VALUES('44','502','50','apartament','4','pipera');INSERT INTO CERERI VALUES('55','202','30','apartament','2','floreasca');INSERT INTO CERERI VALUES('66','302','20','apartament','2','romana');INSERT INTO CERERI VALUES('77', '702', '60', 'apartament', '3', 'berceni');
EXEMPLE CU DDL
1. Să se redenumească tabela AGENTIIMB în AGENTIIMOBILIARI.
ALTER TABLE AGENTIIMB RENAME TO AGENTIIMOBILIARI;
2. Să se adauge în tabela CERERI o restricţie pentru TIPLOC în mulţimea : {'garsoniera’,’casa’,’apartament’}.
ALTER TABLE CERERI ADD CONSTRAINT cereri_tiploc_ck CHECK (TIPLOC IN ('garsoniera','casa','apartament'));
3. Să se dezactiveze restricţia cereri_tiploc_ck din tabela CERERI.
ALTER TABLE CERERI DISABLE CONSTRAINT cereri_tiploc_ck;
4. Să se adauge coloana EMAIL în tabela CLIENTII.
ALTER TABLE CLIENTII ADD (EMAIL varchar2(30));
5. Să se şteargă coloana EMAIL din tabela CLIENTII.
6
ALTER TABLE CLIENTII DROP COLUMN EMAIL;
6. Să se ştearga toate înregistrările şi spaţiul alocat tabelei OFERTE.
TRUNCATE TABLE OFERTE.
EXEMPLE CU DML
1. Modificaţi în “Davidson Marian” din tabela AGENTIIMB, unde codagent=301.
UPDATE AGENTIIMB SET numeagent='Davidson Marian' WHERE codagent=301;
2. Să se majoreze cu 5% preţurile apartamentelor care sunt oferite spre vanzare din tabela OFERTE.
UPDATE OFERTE SET PRET=PRET*1.05 WHERE UPPER(TIPLOC)='APARTAMENT' and UPPER(TIPOFERTA)='VANZARE';
3. Să se ştearga ofertele pentru care preţul e mai mic de 15000.
DELETE FROM OFERTE WHERE pret<15000;
4. Să se ştearga toate inregistrările din coloana OFERTE.
DELETE * FROM OFERTE;
5. Să se scadă cu 50 preţurile apartamentelor, din tabela OFERTE.
UPDATE OFERTE SET pret=pret-50 WHERE lower(tiploc)= 'apartament';
6. Să se actualizeze zonă şi tip loc din tabela CERERI pentru codclient 60 cu zona şi tip loc pentru codclient 10.
UPDATE CERERISET (zona,tiploc)=(SELECT zona,tiploc FROM CERERI
WHERE codclient='60')WHERE codclient='10';
7. Să se actualizeze tabela CERERI unde codcerere e 33, codclient sa fie 10.
UPDATE CERERISET codclient=10WHERE codcerere=33;
7
EXEMPLE CU INTEROGĂRI
1. Să se selecteze toti agenţii imobiliari din tabela AGENTIIMB.
SELECT * FROM AGENTIIMB;
2. Să se selecteze câmpurile NUMEAGENT, TELEFON şi CNP din tabele AGENTIMB.
SELECT numeagent, telefon, cnp FROM AGENTIIMB;
3. Să se selecteze numai apartamentele din tabela CERERI.
SELECT * FROM CERERI WHERE UPPER(TIPLOC) LIKE '%APARTAMENT%';
4. Să se selecteze câmpurile nume si telefon pentru angajatii de sex feminin.
SELECT numeagent,telefon FROM AGENTIIMB WHERE SEX='f';
5. Să se afişeze media preţurilor apartamentelor puse spre vânzare din tabele OFERTE.
SELECT AVG(pret) media FROM OFERTE WHERE UPPER(tipoferta)=
'vanzare';
6. Să se afişeze ofertele propuse de agenţii imobiliari.
SELECT agentiimb.*, oferte.* FROM AGENTIIMB, OFERTE WHERE
agentiimb.codagent=oferte.codagent;
7. Să se selecteze casele propuse de agentul ’Marinescu Ioana’.
SELECT agentiimb.*, oferte.* FROM agentiimb, oferte WHERE agentiimb.codagent = oferte.codagent AND lower(tiploc)='%casa%' AND upper(agentiimb.numeagent) = 'Marinescu Ioana';
8
8. Să se afişeze numele clientului, tipul şi nr de camere a locuinţei dorite.
SELECT cl.nume, cl.codclient, c.tiploc, c.nrcamere FROM clientii cl, cereri c WHERE cl.codclient=c.codclient;
9. Să se afişeze după preţ, ofertele puse la dispoziţie, din Romană în ordine descrescătoare.
SELECT * FROM OFERTE GROUP BY pret HAVING zona=’romana’ ORDER BY pret DESC;
10. Să se selecteze agenţii imobiliari angajaţi înainte de 2000.
SELECT numeagent FROM AGENTIIMB WHERE EXTRACT(YEAR FROM DATAANGAJ)<2000;
11. Să se selecteze numele agenţilor care încep cu M.
SELECT numeagent FROM AGENTIIMB WHERE numeagent LIKE 'M%';
12. Să se afişeze numele şi numărul de oferte ale agenţilor dacă
numărul de oferte pe fiecare agent este mai mare decât 1.
SELECT a.numeagent, count(o.codagent) nr_oferte FROM agentiimb a,
oferte o WHERE a.codagent=o.codagent
GROUP BY a.numeagent
HAVING count(o.codagent)>1;
13. Să se afişeze preţul mediu al ofertelor fiecărui agent.
SELECT a.numeagent, AVG(o.pret)pret_mediu FROM agentiimb a,
oferte o
WHERE a.codagent=o.codagent
GROUP BY a.numeagent;
14. Să se afişeze ofertele ale căror preţ este mai mic decât cel mai mare preţ pentru oferta cu codul 202.
SELECT tiploc, zona, nrcamere, pret, codoferta FROM OFERTE
WHERE pret<any(SELECT pret FROM OFERTE WHERE codoferta=202);
9
15. Să se afişeze preţul maxim, preţul mediu, preţul minim şi preţul total a ofertelor
SELECT AVG(o.pret), MAX(o.pret), MIN(o.pret), SUM(o.pret) FROM oferte o;
16. Să se afişeze data angajării a celui mai nou angajat şi a celui mai vechi.
SELECT MIN(dataangaj), MAX(dataangaj) FROM agentiimb;
17. Să se afişeze numărul de oferte cu preţul mai mare de 15000.
SELECT COUNT(*) nr_oferte FROM oferte WHERE pret>15000;
18. Să se afişeze numărul de cereri.
SELECT COUNT(codcerere) nr_cereri FROM cereri;
sau
SELECT COUNT(DISTINCT(codcerere)) nr_cereri FROM cereri;
19. Să se afişeze preţul mediu al apartamentelor, caselor, garsonierelor din tabela OFERTE. Ordonate dupa preţ.
SELECT tiploc, avg(pret) pret_mediu FROM oferteGROUP BY tiplocORDER BY avg(pret);
20. Să se afişeze ofertele cuprinse între 500 şi 50000, iar condiţia să se specifice în clauza HAVING.
SELECT oferte.codoferta, SUM(oferte.pret) pret_totalFROM oferte, cereriWHERE oferte.codoferta=cereri.codofertaGROUP BY oferte.codofertaHAVING SUM(oferte.pret) BETWEEN 500 AND 50000 ORDER BY pret_total DESC;
21. Să se afişeze tip locuinţei şi numărul de camere ale cererilor.
SELECT 'Oferta: ' || initcap(tiploc)|| ' ,Nr de camere: ' || nrcamereFROM OFERTE;
22. Să se afişeze vechimea angajaţilor.
10
SELECT numeagent, ROUND((sysdate-dataangaj)/365) AniFROM agentiimb;
23. Să se afişeze data naşterii tuturor clienţilor. Data se va afişa de tipul: DD.MM.YY.
SELECT nume, TO_CHAR(datanasterii, 'DD.MM.YY') data_nasterii FROM clientii;
24. Să se afişeze numele angajaţilor, angajaţi după anul 2000.
SELECT numeagent, dataangaj FROM agentiimb WHERE EXTRACT(year FROM dataangaj)>2000;
25. Să se afişeze numele clienţilor care au ca preferinţa zona Berceni.
SELECT clientii.nume, cereri.zona FROM clientii, cereri WHERE cereri.codclient=clientii.codclient AND LOWER(cereri.zona)='berceni';
26. De sărbători preţurile la inchiriere cresc cu 0.3% iar la vanzare cu 0.5%, indiferent de tipul de locuinţă. Să se afişeze cu cât se majorează preţurile, iar unde nu se majorează să se treacă 0. Să se ordoneze după tipul locuinţei, tipul ofertei şi zona în care se află.
SELECT o.tiploc, o.zona, o.tipoferta, (CASE WHEN LOWER(o.tipoferta) ='inchiriere' THEN 0.03 WHEN LOWER(o.tipoferta)='vanzare' THEN 0.05 ELSE 0 END)*SUM(o.pret) valoareaFROM oferte o, cereri cWHERE o.codoferta=c.codofertaGROUP BY o.tiploc, o.zona, o.tipoferta
27. Să se afişeze numele agenţilor care încep cu M şi care nu sunt de sex masculine.
SELECT numeagent, sex FROM agentiimb WHERE numeagent LIKE 'P%'MINUS
SELECT numeagent, sex FROM agentiimb WHERE sex='m';
28. Să se scrie pentru clientul cu codclient 20 – client fidel, codclient 50 – potenţial client fidel, codclient 70 – clinet restanţier.
SELECT nume,DECODE(codclient, 20, 'client fidel',
50, 'potential client fidel', 70, 'client restantier') tip_client
FROM clientii;
11
29. Să se afişeze ce cereri corespund şi ofertelor.
SELECT tiploc, nrcamere, zona FROM cereri INTERSECT SELECT tiploc, nrcamere, zona FROM oferte;
30. Să se afişeze ce apartamente din cereri şi oferte sunt disponibile în romană.
SELECT tiploc, zona, nrcamere FROM oferte WHERE tiploc='apartament' AND zona='romana'UNIONSELECT tiploc, zona, nrcamere FROM cereri WHERE tiploc='apartament' AND zona='romana'; EXEMPLE CU OBIECTE ALE BAZEI DE DATE
CREAREA TABELELOR VIRTUALE
1. Să se creeze o tabelă virtuală cu toti agenţii de sex feminin.
CREATE VIEW agenti_femei AS SELECT * FROM agentiimb WHERE LOWER(sex)='f';
SELECT * FROM agenti_femei;
2. Să se creeze o tabelă virtuală cu ofertele de vânzare din tabela OFERTE.
CREATE VIEW oferte_vanzare AS SELECT tiploc, zona, tipoferta, pret FROM oferte WHERE LOWER(tipoferta)='vanzare';
SELECT * FROM oferte_vanzare;
3. Să se creeze o tabelă virtuală cu toate ofertele de închiriere. Să nu se mai poată actualize tabela.
CREATE VIEW oferte_inchiriere AS SELECT * FROM oferte WHERE LOWER(tipoferta)='inchiriere'WITH READ ONLY;
SELECT * FROM oferte_inchiriere;
CREAREA INDECŞILOR
1. Să se creeze un index pe tabela agentiimb pe coloana numeagent.
12
CREATE INDEX agentiimb_nume_agenti ON agentiimb(numeagent);
2. Să se vizualizeze indexul anumitor untilizatori.
Select * FROM user_indexes;
3. Să se ştearga indexul creat.
DROP INDEX agentiimb_nume_agent;
CREAREA SECVENŢELOR
1. Creaţi o secvenţă pentru cheia primară a tabelei OFERTE.
CREATE SEQUENCE cod_oferta START WITH 7 INCREMENT BY 1 MAXVALUE 9999 NOCYCLE;
2. Să se vizualizeze informaţii despre secvenţele utilizatoriilor.
Select * from user_sequences;
CREAREA SINONIMELOR
1. Să se creeze un sinonim pentru tabela oferte.
CREATE SYNONYM de_vanzare FOR oferteş
2. Să se vizualizeze sinonimele.
SELECT * FROM user_synonyms;
3. Să se ştearga sinonimul creat anterior.
DROP SYNONYM de_vanzare;
13