16
ACADEMIA DE STUDII ECONOMICE Facultatea de Cibernetică, Statistică şi Informatică Economică PROIECT BAZE DE DATE ~AGENŢIE IMOBILIARĂ~

Proiect Baze de Date - Agentie Imobiliara

Embed Size (px)

DESCRIPTION

proiect

Citation preview

Page 1: Proiect Baze de Date - Agentie Imobiliara

ACADEMIA DE STUDII ECONOMICEFacultatea de Cibernetică, Statistică şi Informatică Economică

PROIECT BAZE DE DATE~AGENŢIE IMOBILIARĂ~

Prof. Iuliana Botha

AGENŢIE IMOBILIARĂ

Page 2: Proiect Baze de Date - Agentie Imobiliara

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

Page 3: Proiect Baze de Date - Agentie Imobiliara

(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

Page 4: Proiect Baze de Date - Agentie Imobiliara

●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

Page 5: Proiect Baze de Date - Agentie Imobiliara

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

Page 6: Proiect Baze de Date - Agentie Imobiliara

( '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

Page 7: Proiect Baze de Date - Agentie Imobiliara

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

Page 8: Proiect Baze de Date - Agentie Imobiliara

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

Page 9: Proiect Baze de Date - Agentie Imobiliara

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

Page 10: Proiect Baze de Date - Agentie Imobiliara

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

Page 11: Proiect Baze de Date - Agentie Imobiliara

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

Page 12: Proiect Baze de Date - Agentie Imobiliara

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

Page 13: Proiect Baze de Date - Agentie Imobiliara

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