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")
III. Interogari (selectii) simple
- 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.
SELECT * FROM Angajati
WHERE data_angajare BETWEEN #03/01/2002#
("informatica", "electronica")
ORDER BY salariu DESC, data_angajare ASC

AND

#03/31/2002#

AND

specializare

IN

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,
spor_vechime
FROM Angajati

prenume,

(Date()-data_angajare)/365

AS

vechime,

IIF(vechime<2,0,1)

AS

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"
- pagina 2 -

Exemple de fraze SQL


sau
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 -

Exemple de fraze SQL


DELETE FROM Angajati
WHERE id_angajat IN
nr_reparatie=3)

(SELECT id_angajat

FROM

Reparatii

WHERE

nr_reparatie=1

OR

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, orase - tari, facturi-clienti, produse - categorii, produse
- firme-producatoare, jucatori - tari, jucatori - echipe, echipe - tari
M-M: studenti - examene, studenti - profesori, facturi - produse, actori - filme, carti - abonati
- pagina 4 -

You might also like