Professional Documents
Culture Documents
I. Structura tabelelor
1. Sa se realizeze o fraza SQL pentru crearea tabelei Angajati (mai putin ultimul camp dintre cele
enumerate mai sus)
CREATE TABLE Angajati (id_angajat COUNTER PRIMARY KEY, nume TEXT(50), prenume TEXT(50),
adresa TEXT(100), telefon TEXT(20), data_angajare DATE, specializare TEXT(20));
INSERT INTO Angajati (nume, prenume, adresa, telefon, data_angajare, salariu, specializare) VALUES
("Popescu", "Marius" , "Str. Revolutiei nr.1", "0722.77.28.55", "01/24/2001", 1500, "electronica")
- pagina 1 -
Exemple de fraze SQL
4. Sa se afiseze numele, prenumele si telefoanele angajatilor cu salarii mai mari sau egale cu 1000,
ordonand alfabetic lista rezultata. In lista nu vor aparea angajatii care nu au telefon.
SELECT nume, prenume, telefon FROM Angajati WHERE salariu>=1000 AND telefon IS NOT NULL
ORDER BY nume ASC
5. Sa se selecteze toate datele despre persoanele angajate in martie 2002 si au una dintre
specializarile “informatica” sau “electronica”.
sau
sau
9. Sa se afiseze numele angajatilor care au realizat reparatii pentru clientul “Millenium Trading” si datele
la care au fost efectuate aceste reparatii.
- pagina 2 -
Exemple de fraze SQL
sau
10. Sa se calculeze costul mediu al unei categorii de reparatii (medie per calculator, medie per
imprimanta, etc). Lista va fi ordonata descrescator dupa cost.
11. Sa se calculeze costul mediu al unei categorii de reparatii, afisandu-se numai acelea pentru care
costul mediu depaseste valoarea 750.
Obs.: Clauza WHERE nu lucreaza cu functii totalizatoare, deci se foloseste clauza HAVING.
15. Sa se stearga din baza de date angajatii care au participat la reparatiile cu numerele 1 si 3.
- pagina 3 -
Exemple de fraze SQL
UPDATE Reparatii
SET tarif=1500
WHERE obiect=”calculator”
17. Sa se mareasca salariile cu 20% pentru angajatii veniti in firma inainte de 1 ianuarie 2002.
UPDATE Angajati
SET salariu = salariu *1.2
WHERE data_angajare<#1/1/2002#
18. Sa se afiseze cate reparatii a efectuat fiecare angajat in fiecare an. Numele angajatilor se vor afisa
pe linii, iar anii pe coloanele tabelului.
TRANSFORM COUNT(nr_reparatie)
SELECT nume
FROM Angajati INNER JOIN Reparatii ON Angajati.id_angajat = Reparatii.id_angajat
GROUP BY nume
PIVOT YEAR (data_reparatie)
O interogare de tip crosstab se realizeaza punand valorile la TRANSFORM, randurile la SELECT, iar
coloanele la PIVOT. In exemplu de mai sus, COUNT(nr_reparatie) reprezinta valorile, nume reprezinta
randurile, iar YEAR (data_reparatie) coloanele.
XI. Recomandari
Clauzele Inner Join, Left Join, Right Join sunt mai rapide decat clauzelor Where.
Pe cat posibil, sa se evite utilizarea operatorului Not.
Nu folositi clauza Order By pentru o subselectie.
Evitati, pe cat posibil, folosirea tabelelor temporale.
M-M: studenti - examene, studenti - profesori, facturi - produse, actori - filme, carti - abonati
- pagina 4 -