Sunteți pe pagina 1din 5

1

ENUNT
O firm are ca obiect de activitate efectuarea de reparaii de autoturisme. Firma are angajai mai muli
mecanici auto i drept clieni persoanele ce solicit reparaii. Pentru fiecare intervenie se ntocmete o
fi pe care se consemneaz numrul de nmatriculare a autoturismului reparat i alte detalii legate de
reparaie. Pentru simplificarea problemei se consider c la o reparaie particip un singur mecanic.
Se ia spre exemplificare urmtorul model al bazei de date:

Creare&Modificare tabele i adugare de nregistrri


1. S se realizeze o fraz SQL pentru a crea tabela mecanici.
2. S se adauge tabelei mecanici un cmp numit Specializare (acest cmp va fi de tip text, lungime maxim
10) i un cmp numit Salariu ncadrare (de tip numeric)
3. Presupunnd c a fost angajat un nou mecanic s se nregistreze datele acestuia n tabel:
DataAngajarii Specializare Salariu
Incadrare

CodMecanic Nume

Adresa

Telefon

102

Str. Florilor, nr 2,
Iasi

092.325.452 20/10/2002

Ion Dan

Electric

4000000

Interogri de selecie simple


4. S se afieze numele i telefoanele mecanicilor ce au salarii mai mari de 4500000 ordonnd lista
alfabetic. In list nu vor figura mecanicii care nu au telefon.
5. S se selecteze toate informaiile disponibile pentru mecanicii ce au fost angajai n luna ianuarie 2002 si
au una dintre specializrile Electric sau Vopsitor. Se va ordona lista descresctor dup salariu iar
dac sunt mai muli angajai cu acelai salariu va fi afiat primul cel mai vechi angajat.
6. S se afieze o list cu toate mrcile de autoturism reparate de mecanicii firmei n ultimele 10 zile. n
list fiecare marc de autoturism trebuie s apar o singur dat, indiferent dac au fost reparate mai
multe maini de cel tip. 7. S se calculeze vechimea n munc pentru fiecare angajat (se va calcula n
ani) i, ntr-un alt cmp calculat numit Spor Vechime, s se afieze 0 dac vechimea este sub 3 ani, 0.05
dac vechimea este intre 3-10 ani i 0.07 dac vechimea este peste 10 ani.

Interogri de selecie pe mai multe tabele


8. S se afieze Numele i Adresa posesorilor autoturismelor cu numerelor de nmatriculare 10-BV-XYZ
i 12-TR-ABC.

2
9. S se afieze numele mecanicilor care au realizat reparaii pentru clientul Mihai Dan i datele la care
au efectuat aceste reparaii.

Interogri de selecie Ce presupun gruparea datelor


10. Sa se calculeze costul mediu al unei reparaii pentru fiecare marca de autoturism. Din fiecare marca se
vor lua n calcul doar autoturismele fabricate dup 1990. Lista se va descresctor dup costurile medii.
11. Aceeai cerin de la interogarea precedent dar s se afieze doar costurile medii pentru acele mrci de
autoturisme pentru care costul mediu depete 2000000.
12. S se calculeze suma total ncasat de la fiecare client n anul 2000.
13. S se calculeze numrul de reparaii efectuate de fiecare mecanic. Lista se va ordona alfabetic. n list
trebuie s apar toi mecanicii chiar dac unii nu au efectuat nc nici o reparaie (pentru aceasta se va
utiliza LEFT JOIN n loc de INNER JOIN).

Interogri UNION
14. S se afieze o list cu toate numele i adresele mecanicilor i clienilor ce au domiciliul n oraul
Braov. n list va figura, ntr-un cmp numit Observatie, n dreptul fiecrui mecanic litera M i n dreptul
fiecrui client litera C.

Interogri de tip aciune (DELETE, UPDATE)


15. S se tearg din baza de date mecanicii ce au codurile 101 i 103.
16. S se modifice n tabela Reparaii marca mainii cu numrul de nmatriculare 10-B-ABA n
Renault. 17. S se mreasc salariile cu 20% pentru toi mecanicii angajai nainte de
10/10/1999.

Interogri de tip Crosstab


18. S se calculeze cte reparaii a efectuat fiecare mecanic n fiecare an (numele mecanicilor se va
afia pe linii iar anii pe coloanele tabelului).

Interogare cu subinterogare
19. S se tearg din baza de date (vor fi concediai) mecanicii care au participat la reparaiile cu numerele
667 i 668 (se va folosi IN).

Interogare cu parametru
20. S se afieze numerele de n matriculare pentru toate autoturismele reparate ntr-un anumit an
specificat ca parametru.

REZOLVARI
1.
CREATE TABLE MECANICI (CodMecanic NUMBER CONSTRAINT CheieMecanici
PRIMARY KEY, Nume TEXT(25), Adresa TEXT(50), Telefon TEXT(9), DataAngajarii
DATE);

2.
ALTER TABLE MECANICI ADD COLUMN Specializare TEXT(10), [Salariu Incadrare] NUMBER;

3
3.
INSERT INTO MECANICI
VALUES (102, "Ion Dan", "Str. Florilor, nr 2, Iasi", "092.325.452", #20/10/2002#,"Electric", 4000000);

4.
SELECT Nume, Telefon
FROM MECANICI
WHERE [Salariu Incadrare]>4500000 AND Telefon Is Not Null ORDER BY Nume ASC;

5.
SELECT *
FROM MECANICI
WHERE DataAngajarii BETWEEN #01/01/2002# AND #31/01.2002# AND Specializare IN (Electric,
Vopsitor) ORDER BY [Salariu Incadrare] DESC, DataAngajarii ASC;

6.
SELECT DISTINCT [Marca Autoturism]
FROM REPARATII
WHERE DataReparatie>Date()-10;

7.
SELECT NUME, (Date()-DataAngajarii)/365 AS Vechime, IIF(Vechime<3;0;IIF(Vechime<10,0.05,0.07))
AS [Spor Vechime] FROM MECANICI

8.
SELECT Nume, Adresa
FROM REPARATII, CLIENTI
WHERE REPARATII.CodClient=CLIENTI.CodClient AND (NumarInmatriculareAutoturism=10-BV-XYZ
OR NumarInmatriculareAutoturism=12-TR-ABC);

SAU
SELECT Nume, Adresa
FROM REPARATII INNER JOIN CLIENTI ON REPARATII.CodClient=CLIENTI.CodClient
WHERE (NumarInmatriculareAutoturism=10-BV-XYZ OR NumarInmatriculareAutoturism=12-TR-ABC);

9.
SELECT MECANICI.Nume,
DataReparatie FROM MECANICI,
REPARATII, CLIENTI
WHERE MECANICI.CodMecanic=REPARATII.CodMecanic AND
REPARATII.CodClient=CLIENTI.CodClient AND
CLIENTI.Nume=Mihai Dan;
SAU
SELECT MECANICI.Nume, DataReparatie
FROM (MECANICI INNER JOIN REPARATII ON MECANICI.CodMecanic=REPARATII.CodMecanic)
INNER JOIN CLIENTI ON REPARATII.CodClient=CLIENTI.CodClient WHERE CLIENTI.Nume=Mihai
Dan;

10.
SELECT [Marca Autoturism], AVG(Tarif) AS [Cost Mediu]
FROM REPARATII
WHERE AnFabricatie>1990
GROUP BY [Marca Autoturism] ORDER BY AVG(Tarif) DESC;

4
11.
SELECT [Marca Autoturism], AVG(Tarif) AS [Cost Mediu] FROM REPARATII
WHERE AnFabricatie>1990
GROUP BY [Marca Autoturism]
HAVING AVG(Tarif) > 2000000 ORDER BY AVG(Tarif) DESC;

12.
SELECT CLIENTI.CodClient, Nume, SUM(Tarif) AS [Suma incasata]
FROM CLIENTI INNER JOIN REPARATII ON CLIENTI.CodClient=Reparatii.CodClient
WHERE YEAR(DataReparatie)=2000 GROUP BY CodClient, Nume;

13.
SELECT MECANICI.CodMecanic, Nume, COUNT(NrReparatie) AS [Total Reparatii]
FROM MECANICI LEFT JOIN REPARATII ON MECANICI.CodMecanic=REPARATII.CodMecanic
GROUP BY CodMecanic, Nume ORDER BY Nume;

14.
SELECT Nume, Adresa, M AS Observatie
FROM MECANICI
WHERE ADRESA LIKE *Brasov
UNION
SELECT Nume, Adresa, C AS Observatie
FROM CLIENTI
WHERE ADRESA LIKE *Brasov;

15.
DELETE FROM MECANICI
WHERE CodMecanic=101 OR CodMecanic=103;

16.
UPDATE REPARATII
SET MARCA = Renault
WHERE NumarInmatriculareAutoturism=10-B-ABA;

17.
UPDATE MECANICI
SET [Salariu Incadrare]=[Salariu
Incadrare]*1.2 WHERE
DataAngajarii<#10/10/1999#;

18.
TRANSFORM Count(NrReparatie)
SELECT NUME
FROM MECANICI INNER JOIN REPARATIION MECANICI.CodMecanic=REPARATII.CodMecanic
GROUP BY NUME PIVOT YEAR(DataReparatie)

19.
DELETE FROM MECANICI
WHERE CodMecanic IN (SELECT CodMecanic FROM REPARATII WHERE NrReparatie=667 OR
NrReparatie=668) ;

5
20.
SELECT NumarInmatriculareAutoturism
FROM REPARATII
WHERE YEAR(DataReparatie) = [TASTATI ANUL]

S-ar putea să vă placă și