You are on page 1of 4

Exemple de fraze SQL Exemple de fraze SQL Enunt: Se da o societate comerciala cu profil de activitate repararea de aparatura informatica (servere,

computere personale, imprimante, dispozitive mobile etc). Societatea are in componenta persoane specializate pe domenii. Pentru fiecare reparatie se intocmeste o fisa pe care se inscriu date despre reparatia efectuata. I. Structura tabelelor Pentru a administra activitatea companiei, proiectam urmatoarea baza de date: Angajati Reparatii Clienti id_angajat - autonumber nr_reparatie - autonumber id_client - autonumber nume - text data_reparatie - date denumire - text prenume - text obiect - text adresa - text adresa - text an_fabricatie - number telefon - text telefon - text diagnostic - text e_mail - text data_angajare - date tarif - number website - text specializare - text id_angajat - number observatii - text salariu - numeric id_client - number

II. Operatii creare, modificare tabele si adaugare de inregistrari 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)); 2. Sa se adauge tabelei Angajati ultimul camp (salariu) ALTER TABLE Angajati ADD COLUMN salariu NUMBER 3. Sa se insereze in tabela un angajat nou cu datele: nume - Popescu prenume - Marius adresa - Str. Revolutiei nr.1 telefon - 0722.77.28.55 data_angajare - 24/01/2001 salariu - 1500 specializare - electronica 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 -

III. Interogari (selectii) simple 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. SELECT * FROM Angajati WHERE data_angajare BETWEEN #03/01/2002# AND #03/31/2002# AND specializare IN ("informatica", "electronica") ORDER BY salariu DESC, data_angajare ASC sau SELECT * FROM Angajati WHERE (data_angajare >= #3/1/2002# AND data_angajare <= #3/31/2002#) AND specializare IN ("informatica", "electronica") ORDER BY salariu DESC, data_angajare ASC 6. Sa se afiseze toate reparatiile efectuate in ultimele 10 zile. SELECT * FROM Reparatii WHERE data_reparatie > Date()-10 7. Sa se selecteze numele si prenumele angajatilor, sa se calculeze vechimea in munca pentru fiecare angajat (in ani). Intr-un alt camp, calculat si denumit spor_vechime, sa se afiseze 0 daca vechimea este sub 2 ani si 1 daca vechimea este peste 2 ani. SELECT nume, prenume, (Date()-data_angajare)/365 AS vechime, IIF(vechime<2,0,1) AS spor_vechime FROM Angajati IV. Interogari multiple 8. Sa se afiseze denumirea si adresa clientilor care au avut de reparat produsul imprimanta. SELECT DISTINCT denumire, adresa FROM Clienti, Reparatii WHERE Reparatii.id_client = Clienti.id_client AND obiect="imprimanta" sau SELECT DISTINCT denumire, adresa FROM Clienti INNER JOIN Reparatii ON Reparatii.id_client = Clienti.id_client WHERE obiect="imprimanta" 9. Sa se afiseze numele angajatilor care au realizat reparatii pentru clientul Millenium Trading si datele la care au fost efectuate aceste reparatii. SELECT nume, prenume, data_reparatie FROM Angajati, Reparatii, Clienti WHERE Angajati.id_angajat = Reparatii.id_angajat AND Reparatii.id_client = Clienti.id_client AND Clienti.denumire = "Millenium Trading" sau

Exemple de fraze SQL

SELECT nume, prenume, data_reparatie FROM (Angajati INNER JOIN Reparatii ON Angajati.id_angajat = Reparatii.id_angajat) INNER JOIN Clienti ON Reparatii.id_client = Clienti.id_client WHERE Clienti.denumire = "Millenium Trading" V. Interogari de selectie ce utilizeaza functii de grup 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. SELECT obiect, AVG(tarif) as cost_mediu FROM Reparatii GROUP BY obiect ORDER BY AVG(tarif) DESC 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. SELECT obiect, AVG(tarif) as cost_mediu FROM Reparatii GROUP BY obiect HAVING AVG(tarif)>750 ORDER BY AVG(tarif) DESC 12. Sa se calculeze suma incasata de la fiecare client in anul 2002. SELECT denumire, SUM(tarif) as suma_incasata FROM Clienti INNER JOIN Reparatii ON Clienti.id_client = Reparatii.id_client WHERE Year (data_reparatie)=2002 GROUP BY denumire VI. Interogari tip UNION 13. Sa se afiseze toti angajatii si toti clientii care au domiciliul in Craiova. SELECT nume, adresa FROM Angajati WHERE adresa LIKE "*Craiova*" UNION SELECT denumire as nume, adresa FROM Clienti WHERE adresa LIKE "*Craiova*" VII. Interogari de stergere 14. Sa se stearga din baza de date angajatii care au codul 1 sau 3. DELETE FROM Angajati WHERE id_angajat=1 OR id_angajat=3 15. Sa se stearga din baza de date angajatii care au participat la reparatiile cu numerele 1 si 3. - pagina 3 -

DELETE FROM Angajati WHERE id_angajat IN (SELECT id_angajat FROM Reparatii WHERE nr_reparatie=1 OR nr_reparatie=3) VIII. Interogari de actualizare (modificare) date 16. Sa se modifice tariful reparatiilor la 1500 pentru obiectul calculator. 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# IX. Interogari de tip crosstab 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. X. Alte tipuri de interogari 19. Sa se afiseze clientii care incep cu un sir introdus de la tastatura. SELECT denumire, telefon, e_mail FROM Clienti WHERE denumire LIKE [Introduceti numele] & "*" 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. XII. Tipuri si exemple de relatii 1-M: studenti - orase-de-nastere, orase - judete, produse - categorii, produse - firme-producatoare facturi-clienti, jucatori - tari, jucatori - echipe, echipe - tari M-M: studenti - examene, studenti - profesori, facturi - produse, actori - filme, carti - abonati

You might also like