andreis.

ro - SQL / Cig / I

1

ENUNTURI

O firmă are ca obiect de activitate efectuarea de reparaţii de autoturisme. Firma are angajaţi mai mulţi mecanici auto şi drept clienţi persoanele ce solicită reparaţii. Pentru fiecare intervenţie se întocmeşte o fişă pe care se consemnează numărul de înmatriculare a autoturismului reparat şi alte detalii legate de reparaţie. Pentru simplificarea problemei se consideră că la o reparaţie participă un singur mecanic. Se ia spre exemplificare următorul model al bazei de date:

Creare&Modificare tabele şi adăugare de înregistrări
1. Să se realizeze o frază SQL pentru a crea tabela mecanici. 2. Să se adauge tabelei mecanici un câmp numit Specializare (acest câmp va fi de tip text, lungime maximă 10) şi un câmp numit Salariu Încadrare (de tip numeric) 3. Presupunând că a fost angajat un nou mecanic să se înregistreze datele acestuia în tabelă:
CodMecanic Nume Adresa Telefon DataAngajarii Specializare Salariu Incadrare

102

Ion Dan

Str. Florilor, nr 2, Iasi

092.325.452

20/10/2002

Electric

4000000

Interogări de selecţie simple
4. Să se afişeze numele şi telefoanele mecanicilor ce au salarii mai mari de 4500000 ordonând lista alfabetic. In listă nu vor figura mecanicii care nu au telefon. 5. Să se selecteze toate informaţiile disponibile pentru mecanicii ce au fost angajaţi în luna ianuarie 2002 si au una dintre specializările “Electric” sau “Vopsitor”. Se va ordona lista descrescător după salariu iar dacă sunt mai mulţi angajaţi cu acelaşi salariu va fi afişat primul cel mai vechi angajat. 6. Să se afişeze o listă cu toate mărcile 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 maşini de cel tip. 7. Să se calculeze vechimea în muncă pentru fiecare angajat (se va calcula în ani) şi, într-un alt câmp calculat numit Spor Vechime, să se afişeze 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.

Interogări de selecţie pe mai multe tabele
8. Să se afişeze Numele şi Adresa posesorilor autoturismelor cu numerelor de înmatriculare “10-BV-XYZ” şi “12-TR-ABC”. 9. Să se afişeze numele mecanicilor care au realizat reparaţii pentru clientul “Mihai Dan” şi datele la care au efectuat aceste reparaţii.

17. Să se afişeze numerele de în matriculare pentru toate autoturismele reparate într-un anumit an specificat ca parametru. Interogări de tip acţiune (DELETE. "Ion Dan". Iasi". ALTER TABLE MECANICI ADD COLUMN Specializare TEXT(10). Interogări de tip Crosstab 18. În listă va figura. 12. Nume TEXT(25).452". UPDATE) 15. Să se afişeze o listă cu toate numele şi adresele mecanicilor şi clienţilor ce au domiciliul în oraşul Braşov. Telefon FROM MECANICI WHERE [Salariu Incadrare]>4500000 AND Telefon Is Not Null ORDER BY Nume ASC. SELECT Nume. într-un câmp numit “Observatie”. Interogare cu parametru 20. Să se şteargă din baza de date (vor fi concediaţi) mecanicii care au participat la reparaţiile cu numerele 667 şi 668 (se va folosi IN). "Str. Interogare cu subinterogare 19. Interogări UNION 14. nr 2. Să se calculeze câte reparaţii a efectuat fiecare mecanic în fiecare an (numele mecanicilor se va afişa pe linii iar anii pe coloanele tabelului). Florilor. INSERT INTO MECANICI VALUES (102. 3. Telefon TEXT(9). 13. Să se mărească salariile cu 20% pentru toţi mecanicii angajaţi înainte de 10/10/1999. Să se modifice în tabela “Reparaţii” marca maşinii cu numărul de înmatriculare “10-B-ABA” în “Renault”. REZOLVARI 1. [Salariu Incadrare] NUMBER. "092.ro . #20/10/2002#. .325. Să se şteargă din baza de date mecanicii ce au codurile 101 şi 103.SQL / Cig / I 2 Interogări de selecţie Ce presupun gruparea datelor 10. Să se calculeze numărul de reparaţii efectuate de fiecare mecanic. Adresa TEXT(50). 4000000). 4. 2. Aceeaşi cerinţă de la interogarea precedentă dar să se afişeze doar costurile medii pentru acele mărci de autoturisme pentru care costul mediu depăşeşte 2000000. 16. Din fiecare marca se vor lua în calcul doar autoturismele fabricate după 1990. DataAngajarii DATE). 11. Sa se calculeze costul mediu al unei reparaţii pentru fiecare marca de autoturism. CREATE TABLE MECANICI (CodMecanic NUMBER CONSTRAINT CheieMecanici PRIMARY KEY. Lista se va descrescător după costurile medii. Lista se va ordona alfabetic. în dreptul fiecărui mecanic litera M şi în dreptul fiecărui client litera C.andreis. Să se calculeze suma totală încasată de la fiecare client în anul 2000."Electric". În listă trebuie să apară toţi mecanicii chiar dacă unii nu au efectuat încă nici o reparaţie (pentru aceasta se va utiliza LEFT JOIN în loc de INNER JOIN).

CodClient=CLIENTI.Nume. 6.CodClient WHERE CLIENTI. SAU SELECT Nume.Nume. SAU SELECT MECANICI.0. REPARATII. 7. SELECT MECANICI. Adresa FROM REPARATII INNER JOIN CLIENTI ON REPARATII. SELECT NUME. AVG(Tarif) AS [Cost Mediu] FROM REPARATII WHERE AnFabricatie>1990 GROUP BY [Marca Autoturism] ORDER BY AVG(Tarif) DESC.CodClient AND CLIENTI.CodClient AND (NumarInmatriculareAutoturism=“10-BV-XYZ” OR NumarInmatriculareAutoturism=“12-TR-ABC”). SELECT [Marca Autoturism]. SELECT DISTINCT [Marca Autoturism] FROM REPARATII WHERE DataReparatie>Date()-10.Nume=”Mihai Dan”.05. DataAngajarii ASC. CLIENTI WHERE REPARATII.07)) AS [Spor Vechime] FROM MECANICI 8.ro .SQL / Cig / I 3 5. IIF(Vechime<3. SELECT * FROM MECANICI WHERE DataAngajarii BETWEEN #01/01/2002# AND #31/01. DataReparatie FROM MECANICI. SELECT Nume. Adresa FROM REPARATII. (Date()-DataAngajarii)/365 AS Vechime.0.CodMecanic=REPARATII.0. 9.andreis.CodMecanic AND REPARATII. CLIENTI WHERE MECANICI.CodMecanic) INNER JOIN CLIENTI ON REPARATII. .2002# AND Specializare IN (“Electric”. AVG(Tarif) AS [Cost Mediu] FROM REPARATII WHERE AnFabricatie>1990 GROUP BY [Marca Autoturism] HAVING AVG(Tarif) > 2000000 ORDER BY AVG(Tarif) DESC.IIF(Vechime<10. 11.CodClient=CLIENTI.CodClient=CLIENTI. “Vopsitor”) ORDER BY [Salariu Incadrare] DESC.CodClient=CLIENTI.Nume=”Mihai Dan”. DataReparatie FROM (MECANICI INNER JOIN REPARATII ON MECANICI. SELECT [Marca Autoturism].CodMecanic=REPARATII. 10.CodClient WHERE (NumarInmatriculareAutoturism=“10-BV-XYZ” OR NumarInmatriculareAutoturism=“12-TR-ABC”).

CodClient WHERE YEAR(DataReparatie)=2000 GROUP BY CodClient. Nume. “C” AS Observatie FROM CLIENTI WHERE ADRESA LIKE “*Brasov”.CodMecanic GROUP BY CodMecanic. UPDATE MECANICI SET [Salariu Incadrare]=[Salariu Incadrare]*1.CodMecanic GROUP BY NUME PIVOT YEAR(DataReparatie) 19. Nume ORDER BY Nume. Nume. SELECT Nume.CodMecanic=REPARATII. 16. COUNT(NrReparatie) AS [Total Reparatii] FROM MECANICI LEFT JOIN REPARATII ON MECANICI.CodMecanic=REPARATII. 18. DELETE FROM MECANICI WHERE CodMecanic=101 OR CodMecanic=103. Nume.CodClient=Reparatii. 15. “M” AS Observatie FROM MECANICI WHERE ADRESA LIKE “*Brasov” UNION SELECT Nume. Adresa.CodMecanic.ro . 14. DELETE FROM MECANICI WHERE CodMecanic IN (SELECT CodMecanic FROM REPARATII WHERE NrReparatie=667 OR NrReparatie=668) . 20. 13. SELECT NumarInmatriculareAutoturism FROM REPARATII WHERE YEAR(DataReparatie) = [TASTATI ANUL] .2 WHERE DataAngajarii<#10/10/1999#. SELECT CLIENTI.CodClient.andreis. TRANSFORM Count(NrReparatie) SELECT NUME FROM MECANICI INNER JOIN REPARATIION MECANICI.SQL / Cig / I 4 12. Adresa. SELECT MECANICI. UPDATE REPARATII SET MARCA = “Renault” WHERE NumarInmatriculareAutoturism=”10-B-ABA”. 17. SUM(Tarif) AS [Suma incasata] FROM CLIENTI INNER JOIN REPARATII ON CLIENTI.

Sign up to vote on this title
UsefulNot useful