1_seminarsql

6
Următoarele cerinţe SQL vor fi rezolvate în baza de date de la seminar BazaDeDateSQL.mdb: 01. Sa se creeze tabela SALARIATI cu următoarea structură CNP, Nume, Functia, DataAngajare, Salariu. CREATE TABLE SALARIATI ( CNP TEXT(13) CONSTRAINT CNP PRIMARY KEY, Nume TEXT(30), FUNCTIA TEXT(10), DataAngajare DATE, Salariu CURRENCY) 02. Sa se adauge in tabela SALARIATI angajatul “Ionescu Ion” cu CNP “1751115463041”, funcţia contabil, angajat pe 1/1/2000 cu un salariu de 12.000.000. INSERT INTO SALARIATI VALUES ("1751115463041", "IONESCU ION", "CONTABIL", #1/1/2000#, 12000000); 03. Sa se adauge in tabela SALARIATI toate persoanele din tabela GESTIONARI (în coloana Funcţia se va completa “Gest”). INSERT INTO SALARIATI ( CNP, NUME, FUNCTIA, DATAANGAJARE, SALARIU ) 1

Upload: hyperol123

Post on 16-Jan-2016

5 views

Category:

Documents


0 download

DESCRIPTION

nnobjkmnvhjk

TRANSCRIPT

Page 1: 1_SeminarSQL

Următoarele cerinţe SQL vor fi rezolvate în baza de date de la seminar BazaDeDateSQL.mdb:

01. Sa se creeze tabela SALARIATI cu următoarea structură CNP, Nume, Functia, DataAngajare, Salariu.

CREATE TABLE SALARIATI ( CNP TEXT(13) CONSTRAINT CNP PRIMARY KEY, Nume TEXT(30), FUNCTIA TEXT(10), DataAngajare DATE, Salariu CURRENCY)

02. Sa se adauge in tabela SALARIATI angajatul “Ionescu Ion” cu CNP “1751115463041”, funcţia contabil, angajat pe 1/1/2000 cu un salariu de 12.000.000.

INSERT INTO SALARIATIVALUES ("1751115463041", "IONESCU ION", "CONTABIL", #1/1/2000#, 12000000);

03. Sa se adauge in tabela SALARIATI toate persoanele din tabela GESTIONARI (în coloana Funcţia se va completa “Gest”).

INSERT INTO SALARIATI ( CNP, NUME, FUNCTIA, DATAANGAJARE, SALARIU )SELECT CNPGEST, NUMEGEST, "GEST", [DATA ANGAJARE], SALARIUFROM GESTIONARI;

04. Sa se majoreye cu 500.000 salariile din tabela SALARIATI pentru persoanele angajate inainte de 1-1-1999..

UPDATE SALARIATI SET SALARIU = [SALARIU]+1000000WHERE DATAANGAJARE<#1/1/1999#;

1

Page 2: 1_SeminarSQL

05. Sa se şteargă din tabela SALARIATI toate persoanele agajate înainte de 1-1-2000 care au salariu sub 10.000.000 lei..DELETE FROM SALARIATIWHERE SALARIU<10000000 And DATAANGAJARE<#1/1/2000#;

06. Sa se afişeze, în odine alfabetică numele furnizorilor din Iaşi şi Braşov.

SELECT NumeFzFROM FurnizoriWHERE AdresaFZ LIKE "*IASI" OR ADRESAFZ LIKE "*Brasov"ORDER BY NumeFz;

07. Sa se afişeze lista localităţilor unde firma are depozite (fiecare oras va figura o singură dată).

SELECT DISTINCT LOCALITATEDFROM DEPOZITE;

08. Sa se afişeze lista cu numele, funcţiile şi salariile primilor 3 angajaţi cu cele mai mari salarii din tabela SALARIATI.

SELECT TOP 3 Nume, Functia, SalariuFROM SALARIATIWHERE FUNCTIA="GESTIONAR"ORDER BY SALARIU DESC;

09. Sa se afiseze numerele notelor de recepţie, datele recepţiilor şi să se calculeze numărul de zile trecut de la recepţie pentru toate recepţiile de la un anumit depozit tastat ca parametru.

SELECT NrNotaReceptie, DataReceptie, INT(NOW()-DataReceptie) AS [ZILE TRECUTE]FROM RECEPTIEWHERE NrDepozit=[TASTATI NR DEPOZIT];

10. Sa se afişeze numerele notelor de receptie si numele gestionarilor ce le-au intocmit de la inceputul anului pina in prezent.

Solutia ISELECT NumeGest, NrNotaReceptie, DataReceptieFROM GESTIONARI INNER JOIN RECEPTIE ON GESTIONARI.CNPGest=RECEPTIE.CNPGestWHERE DataReceptie Between #1/1/2004# And Now()ORDER BY NumeGest, NrNotaReceptie;sauSolutia II

2

Page 3: 1_SeminarSQL

SELECT NumeGest, NrNotaReceptie, DataReceptieFROM GESTIONARI AS G, RECEPTIE AS RWHERE G.CNPGest=R.CNPGest AND DataReceptie Between #1/1/2004# And Now()ORDER BY NumeGest, NrNotaReceptie;

11. Sa se afişeze numele materialelor consumate in lunile februarie si aprile 2005.

Solutia ISELECT DenMaterial FROM Materiale AS M, LINIE_CONSUM AS LC, CONSUM AS CWHERE M.CODMATERIAL=LC.CODMATERIAL AND LC.NRBONCONSUM=C.NRBONCONSUM AND MONTH(DATACONSUM) IN (2,4) AND YEAR(DATACONSUM) = 2005

Sau

Solutia IISELECT DenMaterialFROM (MATERIALE INNER JOIN LINIE_CONSUM ON MATERIALE.CODMATERIAL=LINIE_CONSUM.CODMATERIAL) INNER JOIN CONSUM ON LINIE_CONSUM.NRBONCONSUM=CONSUM.NRBONCONSUMWHERE MONTH(DATACONSUM) IN (2,4) AND YEAR(DATACONSUM)=2005;

12. Sa se calculeze câte depozite are firma în fiecare localitate.SELECT LOCALITATED, COUNT(NRDEPOZIT) AS DEPOZITEFROM DEPOZITEGROUP BY LOCALITATED

13. Sa se calculeze valorile bonurilor de consum intocmite a căror valoare depăşeşte 1 million. Se va ordona descrescător după valoare.

SELECT CONSUM.NRBONCONSUM, SUM(CantitateC*PretC) AS ValoareBonFROM CONSUM INNER JOIN Linie_Consum ON CONSUM.NRBONCONSUM=LINIE_CONSUM.NRBONCONSUMGROUP BY CONSUM.NRBONCONSUMHAVING SUM(CantitateC*PretC)>1000000ORDER BY SUM(CantitateC*PretC) DESC;

14. Sa se calculeze preturile minime de receptie, preturile maxime de receptie si preturile maxime cu TVA pentru fiecare dintre produsele din clasa de calitate 1 din cu pret mediu peste 20.000.

SELECT Materiale.CodMaterial, DenMAterial, Max(PretR) AS MAXIM, Min(PretR) AS MINIM, MAXIM*1.19 as MAXIMCUTVAFROM MATERIALE INNER JOIN LINIE_RECEPTIE ON MATERIALE.CODMATERIAL=LINIE_RECEPTIE.CODMATERIAL

3

Page 4: 1_SeminarSQL

WHERE CLASACALITATE=1GROUP BY Materiale.CodMaterial, Materiale.DenMaterialHAVING AVG(PRETR)>20000;

15 Realizaţi o interogare UNION pentru a afisa localitatile si adresele pentru toate depozitele şi ateliere firmei din afara Bucurestiului. Intr-o a treia coloana numita TipObiectiv se va afisa “Dep “ pentru depozite şi “At” pentru ateliereSELECT LocalitateD, AdresaD, "Dep" AS TIPFROM DEPOZITEWHERE LocalitateD <>"BUCURESTI"UNIONSELECT LocalitateA, AdresaA, "At" AS TIPFROM AteliereWHERE LocalitateA <>"BUCURESTI"

16Realizaţi o interogare cu subinterogare pentru a afisa denumirile materialelor din clasa de calitate 1 care nu au fost receptionate la preturi sub 20.000.SELECT DENMATERIALFROM MATERIALEWHERE CLASACALITATE =1 AND CODMATERIAL NOT IN (SELECT CODMATERIAL FROM LINIE_RECEPTIE WHERE PRETR<20000)

17 Realizaţi o interogare cu subinterogare pentru a sterge receptiile de la furnizorii din Iasi.DELETE FROM RECEPTIEWHERE YEAR(DATARECEPTIE)=2005AND CODFISCAL IN (SELECT CODFISCAL FROM FURNIZORI WHERE ADRESAFZ LIKE "*IASI")

18. Realizaţi o interogare cu subinterogare pentru a afisa numele gestionarilor care au cel mai mic salariu din tabela gestionari.

SELECT NumeGest, SalariuFROM GESTIONARIWHERE SALARIU<=ALL(SELECT SALARIU FROM GESTIONARI)

19. Realizaţi o interogare cu subinterogare pentru majora cu 10% salariile gestionarilor care lucreaza in depozite din Ploiesti

UPDATE GESTIONARISET SALARIU=1.1 * SALARIUWHERE NRDEPOZIT = ANY(SELECT NRDEPOZIT FROM DEPOZITE WHERE LOCALITATED="PLOIESTI")

4

Page 5: 1_SeminarSQL

20. Realizati o interogare CROSSTAB pentru a afisa câte recepţii s-au primit de la fiecare furnizor în fiecare an.

TRANSFORM COUNT(NRNOTARECEPTIE)SELECT NUMEFZFROM FURNIZORI INNER JOIN RECEPTIE ON FURNIZORI.CODFISCAL=RECEPTIE.CODFISCALGROUP BY NUMEFZPIVOT YEAR(DATARECEPTIE)

5