Documente Academic
Documente Profesional
Documente Cultură
UM, StocInitial, Clasa de Calitate) APROV(NrAprov, DataAprov, Cantitate, PretUnitar, CodM, CodF) FURNIZORI (CodF, NumeFz, Tara, Oras, Adresa, Telefon, SoldDatorii)
2. Creati Tabelul Angajati cu urmtoarele cmpuri CodAngajat, NumeAngajat, DataAngajare, SalariuBaza, CNP. Observatii: se va limita nume angajat la 20 de caractere iar CNP l a 13 caractere.Campul nume nu trebuie sa permita valoarea NULL iar CNP trebuie sa ia valori unice.
CREATE TABLE ANGAJATI (CODANG NUMBER CONSTRAINT CheieAngajati PRIMARY KEY, Nume TEXT(30) NOT NULL, DataAngajare DATE, SALARIU CURRENCY, CNP TEXT(13) UNIQUE);
4. Exemplu In tabela Angajati se va modifica coloana Nume pentru a memora pina la 55 de caractere
ALTER TABLE ANGAJAT ALTER COLUMN Nume TEXT(55);
6. Se va elimina din baza de date tabela Clienti (nu se va executa interogarea pt a mai folosim tabela ulterior)
DROP TABLE Clienti;
8.Sa se creeze tabelul FurnizoriBrasov cu codurile, numele i datoriile furnizorilor la care soldul datoriilor depete 10.000.000 lei (SELECT INTO).
SELECT codf, nume, adresa INTO FurnizoriBrasov FROM furnizori WHERE Oras=Brasov;
9. Angajatul codul 101 s se completeze data Angajare cu valoarea 4 aprile 2005 si sa se mareasca salariul cu 1.000.000 lei (UPDATE).
c numele de furnizori nu au fost scrise corect s se transforme toate realizrile din cmpul nume n majuscule (UPDATE):
UPDATE Furnizori SET NumeFZ=UCASE(NumeFZ)
11. S se terag din tabela Comenzi toate comenzile mai vechi de 400 de zile i cele provenite de la clientul cu codul 102 (DELETE)
DELETE FROM aprov WHERE DATAaprov<DATE()-400 OR CodF=102;
13. Afisati lista ordonata alfabetic a localitatilor din care se aprovizioneaz firma de la parteneri organizai ca societi pe aciuni:
SELECT DISTINCT Oras FROM Furnizori WHERE Nume LIKE *SA OR Nume LIKE *S.A. ORDER BY Oras;
14.. Afisati lista cu numele, adresele si sumele datorate ale primilor 5 furnizori la care firma are cele mai mari datorii.
SELECT TOP 5 Nume, Adresa, SoldDatorii FROM Furnizori ORDER BY SoldDatorii DESC;
15. Calculai pentru fiecare aprovizionare Valoarea si Valoarea in lei grei si ordonai lista descrescator dupa Valoare iar pentru aprovizionarile cu aceeasi valoare, ordonati cronologic dupa DataAprov.
SELECT NrAprov, Cantitate*PretUnitar AS [Valoare ROL], [Valoare ROL]/10000 AS [Valoare RON] FROM Aprov ORDER BY Cantitate*PretUnitar DESC , DataAprov
16. Afiai lista cu denumirile i StocurileInitiale materialelor dintr-o anumit categorile precizat ca parametru.In cazul materialelor fara stoc initial se va preciza intr-o coloana numita Necesar textul De aprovizionat
SELECT MATERIALe.Nume, MATERIALe.StocInitial, IIf(StocInitial=0,"De aprovizionat","-") AS NECESAR FROM MATERIALE WHERE MATERIALe.Categorie=[tastati categorie];
Exemple de interogri de selecie ce presupun gruparea datelor 17. Calculati ci furnizori are firma in fiecare localitate si afisati lista ordonata descrescator pentru localitatile in care exista mai mult de 2 de furnizori.
SELECT Oras, Count(CodF) As NumarFurnizori FROM Furnizori GROUP BY Oras HAVING Count(CodF) >2 ORDER BY Count(CodF) DESC;
18. Calculai Valoarea totala a aprovizionarilor pentru fiecare luna de dup data de 01-01-2000 si afisati rezultatele doar pentru lunile in care au existat mai mult de 3 aprovizionari.
SELECT MONTH(DataAprov) AS Luna, SUM(Cantitate*PretUnitar) AS TotalValoare FROM Aprov
Exemple de interogri de selectie avnd ca surs mai multe tabele 19. Afisati numele si adresele furnizorilor de la care s-au receptionat materiale in ultimele 100 zile
Rezolvare I (exprimarea legturilor n clauza WHERE)
SELECT DISTINCT Nume, Adresa FROM Aprov, Furnizori WHERE Aprov.CodF=FurnizorI.CodF AND DataAprov>Date()-100;
20 Caz particular : Jonctiuni externe (LEFT/RIGHT JOIN) : De la ce furnizori nu s-a realizat nici o aprovizionare ?
SELECT Furnizori.CodF, Nume, Adresa, NrAprov FROM Furnizori LEFT JOIN Aprov ON Furnizori.CodF=Aprov.CodF WHERE NrAprov IS NULL;
21. Afisati lista cu numele materialelor achiziionate de furnizorul ABC SRL n anul 2005.
Rezolvare I (exprimarea legturilor n clauza WHERE)
SELECT DISTINCT MATERIALE.Nume FROM Materiale, Aprov, Furnizori WHERE Materiale.CodM=Aprov.CodM And Aprov.CodF=Furnizori.CodF And YEAR(DataAprov)=2005 And Furnizori.Nume="ABC sa";
Interogri Crosstab Sintaxa: TRANSFORM expresie Instruciune de selecie PIVOT campul ce urmeaza a fi afisat pe coloanele tabelului
23. Sa se realizeze o interogare de tip analiza incrucisata pentru a determina cantitatea totala comandata din fiecare produs in fiecare an. Se vor ordona anii pe coloane si materialele pe linii.
TRANSFORM Sum(Cantitate) SELECT MATERIALE.Nume FROM MATERIALE INNER JOIN APROV ON MATERIALE.CodM = APROV.CodM GROUP BY Materiale.codM, MATERIALE.Nume PIVOT Year([DataAprov]);
24. Sa se determine cate aprovizionari s-au realizat din fiecare tara din fiecare material. Se vor odona materialele pe coloane si denumirile tarilor din care provin furnizorii pe coloane
TRANSFORM COUNT(NrAprov) SELECT TARA FROM FURNIZORI, APROV, MATERIALE WHERE Furnizori.CODF=Aprov.CODF AND Aprov.CODM=Materiale.CODM AND DATAAPROV>#1/1/2005# GROUP BY TARA PIVOT Materiale.Nume;
INTEROGARI CU SUBINTEROGARI Un exemplu particular l reprezint interogrile de tip INSERT INTO ce permit adugarea de date dintr-o tabel n alt tabel 25. Sa se adauge in tabela CLIENTI toi furnizorii din afara rii.
INSERT INTO CLIENTI (CodCL, Nume) SELECT CodF, Nume FROM FURNIZORI WHERE Tara NOT IN (Romania)
26. S se afieze lista cu cele mai ieftine materiale (se utilizeaz ALL)
SELECT M.CodM, M.Nume, A.PretUnitar FROM MATERIALE AS M, APROV AS A WHERE M.CodM=A.CODM AND A.PretUnitar<=All (SELECT PretUnitar FROM APROV );
27. S se afieze Numele furnizorilor din aceeai ar cu firma BEST SA. (se utilizeaz ANY)
SELECT NUME, TARA FROM FURNIZORI WHERE TARA = ANY(SELECT TARA FROM FURNIZORI where NUME ="BEST SA"); 28. Care
SELECT FURNIZORI.Nume FROM FURNIZORI WHERE FURNIZORI.Nume In (SELECT NUME FROM CLIENTI); 29. S
se diminueze cu 10% Preturile unitare din aprovizionrile provenite de la furnizori din Brasov in ultimele 90 de zile (se utilizeaz IN)
UPDATE APROV SET PretUnitar = PretUnitar*0.9 WHERE DataAprov>Date()-60 AND CODF IN (SELECT CODF FROM FURNIZORI WHERE ORAS="BRASOV"); 30. S
se tearg din tabela materiale toate materialele din clasa de calitate 1 care au fost aprovizionate de mai puin de 5 ori (se utilizeaz IN) .
DELETE * FROM MATERIALE WHERE ClasaCalitate="1" AND CodM IN (SELECT CODM FROM APROV GROUP BY CODM HAVING COUNT(CODM)<5);