Sunteți pe pagina 1din 14

ACADEMIA DE STUDII ECONOMICE Facultatea de Cibernetic, Statistic i Informatic Economic

PROIECT BAZE DE DATE


~AGENIE IMOBILIAR~

Prof. Iuliana Botha

AGENIE IMOBILIAR
Prezentare Agenia imobiliar ofer urmtoarele servicii pentru clieni: o serie de oferte variate puse la dispoziia clienilor, categorisite n funcie de numrul de camere, tipul locuinei, zon i tipul de ofert: nchiriere si vnzare agenii imobiliari cei mai buni, experi n domeniul lor posibilitatea clienilor de a se inregistra n baza noastr de date cu cererile de imobile n acest sens am dorit crearea unei interfee care sa ajute operatorul s i desfoare mai uor i mai eficient activitatea. Schema bazei de date AGENTIIMB CODAGENT OFERTE CODOFERTA CERERI CODCERERE CLIENTII CODCLIENT NUME DATANASTERII CNP TELEFON CODOFERTA CODCLIENT TIPLOC NRCAMERE ZONA CODAGENT TIPLOC ZONA TIPOFERTA NRCAMERE PRET NUMEAGENT TELEFON DATAANGAJ SEX CNP

CREAREA I POPULAREA TABELELOR drop table AGENTIIMB cascade constraints; drop table OFERTE cascade constraints; drop table CERERI cascade constraints; 2

drop table CLIENTII cascade constraints; CREAREA TABELEI AGENTIIMB CREATE TABLE AGENTIIMB (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 AGENTIIMB ADD 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 OFERTE ADD CONSTRAINT oferte_codoferta_pk PRIMARY KEY(codoferta); ALTER TABLE OFERTE ADD CONSTRAINT oferte_zona_ck CHECK(zona in ('pipera', 'romana', 'militari', 'floreasca', 'pantelimon', 'dristor', 'primaverii')); ALTER TABLE OFERTE ADD CONSTRAINT oferte_codagent_fk references AGENTIIMB (codagent); CREAREA TABELEI CLIENTII CREATE TABLE CLIENTII (CODCLIENT varchar2(3), NUME varchar2(25) not null, 3 FOREIGN KEY (codagent)

DATANASTERII date not null, CNP number(13), TELEFON number(10)); ALTER TABLE CLIENTII ADD CONSTRAINT clientii_codclient_pk PRIMARY KEY(codclient); 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 CERERI ADD CONSTRAINT cereri_codcerere_pk PRIMARY KEY(codcerere); ALTER TABLE CERERI ADD CONSTRAINT cereri_zona_ck CHECK (zona in ('pipera', 'romana', 'rahova', 'floreasca', 'primaverii', 'berceni')); ALTER TABLE CERERI ADD CONSTRAINT cereri_codoferta_fk references OFERTE (codoferta); ALTER TABLE CERERI ADD CONSTRAINT cereri_codclient_fk references CLIENTII(codclient); FOREIGN KEY(codoferta)

FOREIGN

KEY(codclient)

POPULAREA TABELELOR INSERARE NREGISTRRI DELETE DELETE DELETE DELETE FROM FROM FROM FROM AGENTIIMB; OFERTE; CLIENTII; CERERI;

N TABELA AGENTIIMB INSERT INTO AGENTIIMB VALUES ('101','Popa Marian','0267322366',to_date('13-oct,2000','ddmon,yyyy' ),'m', '1600413152627'); 4

INSERT INTO AGENTIIMB VALUES ('201','Marinescu Ioana','0312242245',to_date('4-jan,2002','ddmon,yyyy'),'f', '2840423142625'); INSERT INTO AGENTIIMB VALUES ('301','Ionescu Ion','0213456789',to_date('23-jun,2003','ddmon,yyyy'),'m', '1800525162728'); INSERT INTO AGENTIIMB VALUES ('401','Popescu Maria','3254866',to_date('17-apr,2005','ddmon,yyyy'),'f', '2840328141726'); INSERT INTO AGENTIIMB VALUES ('501','Ionescu Alexandra','0213126822',to_date('22-nov,2003','ddmm,yyyy'),'f', '2850329190413'); INSERT INTO AGENTIIMB VALUES ('601',' Marin Raluca','0213453456',to_date('18-may,2001','ddmm,yyyy'),'f', '2022803162799'); INSERT INTO AGENTIIMB VALUES ('701','Dumitru Mirabela','0311234123',to_date('23-apr,1999', 'ddmm,yyyy'),'f', '2801231031234'); INSERT INTO AGENTIIMB VALUES ('801','Ion Ion','0216786789',to_date('13-dec,2000', 'ddmm,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'); 5

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 ( '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 restricie pentru TIPLOC n mulimea : {'garsoniera,casa,apartament}.

ALTER TABLE CERERI ADD CONSTRAINT cereri_tiploc_ck CHECK (TIPLOC IN ('garsoniera','casa','apartament')); 3. S se dezactiveze restricia 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. ALTER TABLE CLIENTII DROP COLUMN EMAIL; 6. S se tearga toate nregistrrile i spaiul alocat tabelei OFERTE. TRUNCATE TABLE OFERTE. EXEMPLE CU DML 1. Modificai n Davidson Marian din tabela AGENTIIMB, unde codagent=301. SET numeagent='Davidson Marian' WHERE

UPDATE AGENTIIMB codagent=301; 2.

S se majoreze cu 5% preurile 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 preul e mai mic de 15000.

DELETE FROM OFERTE WHERE pret<15000; 4. S se tearga toate inregistrrile din coloana OFERTE.

DELETE * FROM OFERTE; 5. S se scad cu 50 preurile apartamentelor, din tabela OFERTE. SET pret=pret-50 7 WHERE lower(tiploc)=

UPDATE OFERTE 'apartament';

6.

S se actualizeze zon i tip loc din tabela CERERI pentru codclient 60 cu zona i tip loc pentru codclient 10.

UPDATE CERERI SET (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 CERERI SET codclient=10 WHERE codcerere=33; EXEMPLE CU INTEROGRI 1. S se selecteze toti agenii imobiliari din tabela AGENTIIMB. SELECT * FROM AGENTIIMB; 2. S se selecteze cmpurile 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 cmpurile nume si telefon pentru angajatii de sex feminin. SELECT numeagent,telefon FROM AGENTIIMB WHERE SEX='f'; 5. S se afieze media preurilor apartamentelor puse spre vnzare din tabele OFERTE. SELECT AVG(pret) media FROM OFERTE WHERE UPPER(tipoferta)= 'vanzare';

6. S se afieze ofertele propuse de agenii 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. S se afieze numele clientului, tipul i nr de camere a locuinei dorite. SELECT cl.nume, cl.codclient, c.tiploc, c.nrcamere FROM clientii cl, cereri c WHERE cl.codclient=c.codclient; 9. S se afieze dup pre, ofertele puse la dispoziie, din Roman n ordine descresctoare. SELECT * FROM OFERTE GROUP BY pret HAVING zona=romana ORDER BY pret DESC; 10. S se selecteze agenii imobiliari angajai nainte de 2000. SELECT numeagent FROM AGENTIIMB WHERE EXTRACT(YEAR FROM DATAANGAJ)<2000; 11. S se selecteze numele agenilor care ncep cu M. SELECT numeagent FROM AGENTIIMB WHERE numeagent LIKE 'M%'; 12. S se afieze numele i numrul de oferte ale agenilor dac numrul de oferte pe fiecare agent este mai mare dect 1. SELECT a.numeagent, count(o.codagent) nr_oferte FROM agentiimb a, oferte o WHERE a.codagent=o.codagent GROUP BY a.numeagent 9

HAVING count(o.codagent)>1; 13. S se afieze preul mediu al ofertelor fiecrui 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 afieze ofertele ale cror pre este mai mic dect 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); 15. S se afieze preul maxim, preul mediu, preul minim i preul total a ofertelor SELECT AVG(o.pret), MAX(o.pret), MIN(o.pret), SUM(o.pret) FROM oferte o; 16. S se afieze data angajrii a celui mai nou angajat i a celui mai vechi. SELECT MIN(dataangaj), MAX(dataangaj) FROM agentiimb; 17. S se afieze numrul de oferte cu preul mai mare de 15000. SELECT COUNT(*) nr_oferte FROM oferte WHERE pret>15000; 18. S se afieze numrul de cereri. SELECT COUNT(codcerere) nr_cereri FROM cereri; sau SELECT COUNT(DISTINCT(codcerere)) nr_cereri FROM cereri; 19. S se afieze preul mediu al apartamentelor, garsonierelor din tabela OFERTE. Ordonate dupa pre. SELECT tiploc, avg(pret) pret_mediu FROM oferte 10 caselor,

GROUP BY tiploc ORDER BY avg(pret); 20. S se afieze ofertele cuprinse ntre 500 i 50000, iar condiia s se specifice n clauza HAVING. SELECT oferte.codoferta, SUM(oferte.pret) pret_total FROM oferte, cereri WHERE oferte.codoferta=cereri.codoferta GROUP BY oferte.codoferta HAVING SUM(oferte.pret) BETWEEN 500 AND 50000 ORDER BY pret_total DESC; 21. S se afieze tip locuinei i numrul de camere ale cererilor. SELECT 'Oferta: ' || initcap(tiploc)|| ' ,Nr de camere: ' || nrcamere FROM OFERTE; 22. S se afieze vechimea angajailor. SELECT numeagent, ROUND((sysdate-dataangaj)/365) Ani FROM agentiimb; 23. S se afieze data naterii tuturor clienilor. Data se va afia de tipul: DD.MM.YY. SELECT nume, FROM clientii; TO_CHAR(datanasterii, 'DD.MM.YY') data_nasterii

24. S se afieze numele angajailor, angajai dup anul 2000. SELECT numeagent, dataangaj FROM agentiimb WHERE EXTRACT(year FROM dataangaj)>2000; 25. S se afieze numele clienilor care au ca preferina zona Berceni. SELECT clientii.nume, cereri.zona FROM clientii, cereri WHERE cereri.codclient=clientii.codclient AND LOWER(cereri.zona)='berceni'; 26. De srbtori preurile la inchiriere cresc cu 0.3% iar la vanzare cu 0.5%, indiferent de tipul de locuin. S se afieze cu ct se majoreaz preurile, iar unde nu se majoreaz s se treac 0. S se ordoneze dup tipul locuinei, tipul ofertei i zona n care se afl. SELECT o.tiploc, o.zona, o.tipoferta, 11

(CASE WHEN LOWER(o.tipoferta) ='inchiriere' THEN 0.03 WHEN LOWER(o.tipoferta)='vanzare' THEN 0.05 END)*SUM(o.pret) valoarea FROM oferte o, cereri c WHERE o.codoferta=c.codoferta GROUP BY o.tiploc, o.zona, o.tipoferta

ELSE

27. S se afieze numele agenilor 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 potenial client fidel, codclient 70 clinet restanier. SELECT nume, DECODE(codclient, 20, 'client fidel', 50, 'potential client fidel', 70, 'client restantier') tip_client FROM clientii; 29. S se afieze ce cereri corespund i ofertelor. SELECT tiploc, nrcamere, zona FROM cereri INTERSECT SELECT tiploc, nrcamere, zona FROM oferte; 30. S se afieze ce apartamente din cereri i oferte sunt disponibile n roman. SELECT tiploc, zona, nrcamere tiploc='apartament' AND zona='romana' UNION SELECT tiploc, zona, nrcamere tiploc='apartament' AND zona='romana'; FROM FROM oferte cereri WHERE WHERE

EXEMPLE CU OBIECTE ALE BAZEI DE DATE CREAREA TABELELOR VIRTUALE 1. S se creeze o tabel virtual cu toti agenii de sex feminin. CREATE VIEW agenti_femei AS SELECT * FROM agentiimb WHERE LOWER(sex)='f'; 12

SELECT * FROM agenti_femei; 2. S se creeze o tabel virtual cu ofertele de vnzare 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 INDECILOR 1. S se creeze numeagent. un index pe tabela agentiimb pe coloana

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 SECVENELOR 1. Creai 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 informaii despre secvenele utilizatoriilor. Select * from user_sequences;

13

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;

14