Sunteți pe pagina 1din 5

Pentru exemplificare se va utiliza urmtorul model simplificat privind evidena aprovizionrilor cu materiale la o firm MATERIALE (CodM, Denumire, Categorie,

UM, StocInitial, Clasa de Calitate) APROV(NrAprov, DataAprov, Cantitate, PretUnitar, CodM, CodF) FURNIZORI (CodF, NumeFz, Tara, Oras, Adresa, Telefon, SoldDatorii)

Comenzi SQL pentru descrierea datelor.


1. Creati Tabela CLIENTI cu urmatoarele campuri: CodCL, Nume, Adresa, DataInregistrare, SoldDatorii).
CREATE TABLE CLIENTI (CodCL NUMBER CONSTRAINT CheieCL PRIMARY KEY, Nume TEXT, ADRESA TEXT, DataInregistrare DATE, SoldDatorii CURRENCY);

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);

3. In tabela Angajati se va mai adauga campurile Functia si adresa de tip text


ALTER TABLE ANGAJATI ADD COLUMN Functia text(20), Adresa TEXT(100);

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);

5. Se va terge din tabela Furnizori Clienti cmpul DataInregistrare


ALTER TABLE Clienti DROP COLUMN DataInregistrare;

6. Se va elimina din baza de date tabela Clienti (nu se va executa interogarea pt a mai folosim tabela ulterior)
DROP TABLE Clienti;

Comenzi SQL pentru manipularea datelor


7. Sa se adauge in tabelul angajati salariatul Ionescu Ion cu cod 101, salariu 6000000 (INSERT)
INSERT INTO ANGAJATI(CODANG, NUME, SALARIU) VALUES(101, "Ionescu Ion", 6000000);

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).

UPDATE ANGAJATI SET DATAANGAJARE=#4/4/2005#, SALARIU=[SALARIU]+1000000 WHERE CODANG=101 10. Presupunnd

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;

Instruciuni de selecie a datelor


Exemple de interogri de selectie simple: 12. Afisati toate informaiile despre materialele din categoria Consumabile
SELECT * FROM Materiale WHERE Categorie=Consumabile;

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

WHERE DataAprov>#01/01/2000# GROUP BY MONTH(DataAprov) HAVING COUNT(NrAprov)>3;

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;

Rezolvare II (exprimarea legturilor n clauza FROM)


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";

Rezolvare II (exprimarea legturilor n clauza FROM)


SELECT DISTINCT MATERIALE.Nume FROM (MATERIALE INNER JOIN APROV ON MATERIALE.CodM=APROV.CodM) INNER JOIN Furnizori ON Aprov.CodF=Furnizori.CodF WHERE YEAR(DataAprov)=2005 And Furnizori.Nume="ABC sa";

Interogari DE TIP UNION


22. Se dorete afiarea unei liste cu 3 coloane ce va conine numele i adresele clienilor i furnizorilor iar n cea de-a treia coloan (numit Categorie) se va afia C pentru Clienti i F pentru Furnizori.
SELECT Nume, Adresa, "c" AS CATEGORIE FROM CLIENTI UNION SELECT Nume, Adresa, "f" AS CATEGORIE FROM FURNIZORI; Observaii pentru interogri UNION - toate sursele de date trebuie s conin acelai numr de cmpuri - cmpurile din sursele de date s fie de acelai tip - ordinea cmpurilor trebuie s fie aceeai

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

sunt furnizorii a cror nume se regsesc i n tabela Clieni

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);