Sunteți pe pagina 1din 5

Obs.

Intai creati baza de date (.dbc) care contine cele doua tabele, dupa care creati pe rand tabele. Sa aveti grija cum denumiti tabelele, campurile (folositi exact aceleasi nume si in inrerogari ->SELECT), ce tipuri de date stabiliti pentru campuri si ce date introduceti (mai ales in campurile comune celor doua tabele)! ; se foloseste pentru a scrie o singura instructiune pe mai multe randuri!
SELECT a.nume, a.spec, a.salariu, b.denumire; FROM angajatul a, departamentul b; WHERE a.cod_dep = b.cod_dep a.nume, a.spec, a.salariu, b.denumire FROM angajatul a, departamentul b WHERE a.cod_dep = b.cod_dep


ex.

<=> SELECT

Se pot redenumi tabele, ca in exemplul de mai sus/jos. Aveti exemple si cu redenumire si fara. Puteti alege, dupa preferinte una din cele doua metode (cu sau fara redenumire).

Subiectul 1 3. S se vizualizeze pentru fiecare angajat numele, specialitatea, salariul i denumirea departamentului. (Obs. Se pot redenumi tabelele angajatul si departamentul, cu a respectiv b, pentru scrie a.nume in loc de angajatul.nume etc.) SELECT a.nume, a.spec, a.salariu, b.denumire; FROM angajatul a, departamentul b; WHERE a.cod_dep = b.cod_dep 4. S se vizualizeze pentru fiecare departament numarul su de angajai. SELECT COUNT(*) as NrAngajati, departamentul.cod_dep; FROM angajatul, departamentul; WHERE angajatul.cod_dep=departamentul.cod_dep; GROUP BY departamentul.cod_dep Subiectul 2 3. S se vizualizeze pentru fiecare tip de bursa suma lunara necesar pentru toi studenii care au bursa respectiv. (Obs. Campul valoare trebuie sa fie de tip numeric!) SELECT SUM(valoare) AS Total, bursa.tip_bursa; FROM studentul, bursa; WHERE studentul.tip_bursa=bursa.tip_bursa; GROUP BY bursa.tip_bursa Subiectul 3 3. Pentru fiecare autor s se afieze valoarea crilor vndute. (Obs. Campurile pret si nr_ex trebuie sa fie de tip numeric!) SELECT SUM(nr_ex*pret) AS Total, autorul.cod_autor; FROM autorul, cartea; WHERE autorul.cod_autor=cartea.cod_autor; GROUP BY autorul.cod_autor Subiectul 4 3. S se vizualizeze pentru fiecare medic numrul de pacieni care depesc vrsta de 35 de ani sau care vor mplini 35 de ani n 2010. SELECT COUNT(*) as TotalPacienti, medicul.cod_medic; FROM medicul, pacientul; WHERE medicul.cod_medic=pacientul.cod_medic; AND pacientul.data_n<={^1975-12-31}; GROUP BY medicul.cod_medic

Subiectul 5 3. S se vizualizeze pentru fiecare facultate numrul candidailor nscrii. SELECT COUNT(*) as TotalCandidati, facultatea.cod_facultate; FROM facultatea, candidatul; WHERE facultatea.cod_facultate=candidatul.cod_facultate; GROUP BY facultatea.cod_facultate Subiectul 6 3. S se afiseze pentru fiecare olimpiad numrul de participani i media punctajelor obinute de participani. SELECT COUNT(*) as nrpart,Olimpiada.codolimpiada,AVG(punctajobtinut); FROM Elev e, Olimpiada o; WHERE e.codolimpiada=o.codolimpiada; GROUP BY o.codolimpiada 4. S se afieze pentru fiecare olimpiad numrul de participani. Observatie: Se consider c olimpiadele au loc n acelai timp, deci un elev poate participa doar la o olimpiad. SELECT COUNT(*) as Nr_participanti, o.codolimpiada; FROM Elev e, Olimpiada o; WHERE e.codolimpiada=o.codolimpiada; GROUP BY o.codolimpiada Subiectul 7 3. Pentru fiecare atelier s se vizualizeze numrul de muncitori. SELECT COUNT(*) as Nr_muncitori, atelier.cod_atelier; FROM muncitor, atelier; WHERE muncitor.cod_atelier=atelier.cod_atelier; GROUP BY atelier.cod_atelier Subiectul 8 3. S se afieze pentru fiecare formaie numrul de albume. SELECT COUNT(*) as Numar_Discuri, formatie.cod_formatie; FROM formatie, album; WHERE formatie.cod_formatie=album.cod_formatie; GROUP BY formatie.cod_formatie Subiectul 9 3. S se vizualizeze pentru fiecare diagnostic numrul de bolnavi cu acel diagnostic. SELECT COUNT(*), consultatie.diagnostic; FROM consultatie GROUP BY diagnostic Subiectul 10 (Cand creati tabela Difuzare (Cod Reclam, Data, Ora) stabiliti pentru campul Data, tipul Date, iar pentru Ora, DateTime) 3. S se vizualizeze toate reclamele cu o durat mai mare de 3 minute; SELECT reclama.cod_reclama, reclama.durata; FROM reclama WHERE durata>3 4. S se afieze pentru fiecare reclam textul i numrul de difuzari. (Am afisat doar numarul de difuzari!) SELECT difuzare.cod_reclama, COUNT(*) as Nr_difuzari; FROM reclama, difuzare; WHERE reclama.cod_reclama=difuzare.cod_reclama; GROUP BY difuzare.cod_reclama

Subiectul 11 3. Sa se vizualizeze pentru fiecare client datele personale si suma datorata; Observatie: Un client poate avea un singur credit la aceeasi banca. SELECT SUM(rata.sumaachitata); FROM client,rata; WHERE client.codcredit=rata.codcredit; GROUP BY client.codcredit Subiectul 12 3. Pentru fiecare diriginte s se afieze clasa i media general a clasei sale. SELECT d.nume, e.clasa, avg(e.med_gen); FROM Diriginti d, Elevi e; WHERE e.clasa=d.clasa; GROUP BY e.clasa, d.nume Subiectul 13 3. S se afiseze pentru fiecare abonat numele, adresa, nr de telefon i suma de plata. SELECT abonat.nume, abonat.adresa, abonat.telefon, factura.suma; FROM abonat, factura; WHERE abonat.cod_abonat=factura.cod_abonat sau SELECT a.nume, a.adresa, a.telefon, f.suma; FROM abonat a, factura f; WHERE a.cod_abonat=f.cod_abonat

Subiectul 14 3. Pentru fiecare melodie afiai numrul de persoane care o prefer. SELECT melodie.denumire_melodie, count(*) as nr_pref; FROM melodie,persoana; WHERE persoana.id_melodie=melodie.id_melodie; GROUP BY melodie.denumire_melodie Subiectul 15 3. S se afieze pentru fiecare persoana numele, prenumele i suma total disponibil pe toate cardurile sale. SELECT persoana.nume, persoana.prenume, SUM(card.suma); FROM persoana, card; WHERE persoana.cnp=card.cnp; GROUP BY persoana.nume, persoana.prenume Subiectul 16 3. S se afieze pentru fiecare proprietar numrul de cini pe care i are. SELECT proprietar.nume, COUNT(*) as NRCAINI; FROM proprietar,caine; WHERE caine.cod_proprietar=proprietar.cod_proprietar; GROUP BY proprietar.nume

Subiectul 17 3. Pentru fiecare ora s se afieze numele oraului, numele judeului, numrul de locuitori i suprafaa; SELECT judet.codjudet,SUM(oras.nrlocuitori),SUM(oras.suprafata ); FROM judet,oras; WHERE judet.codjudet=oras.codjudet; GROUP BY judet.codjudet

4. S se afieze pentru fiecare jude codul, numarul de locuitori i suprafaa oraelor.


SELECT judet.numejudet, oras.numeoras, oras.nrlocuitori, oras.suprafata; FROM judet, oras; where judet.codjudet = oras.codjudet; ORDER BY judet.numejudet Subiectul 18 3. Pentru fiecare staiune s se afieze numele pensiunilor i preul de edere pentru o persoan/zi. SELECT pensiune.nume_p, pensiune.pret, statiune.nume_stat; FROM pensiune, statiune; WHERE pensiune.cod_stat = statiune.cod_stat 4. S se afieze numele, staiunea i judeul pentru pensiunile cu categoria trei stele. SELECT pensiune.nume_p, statiune.nume_stat, statiune.nume_jud, pensiune.categorie; FROM pensiune, statiune; WHERE pensiune.cod_stat = statiune.cod_stat and pensiune.categorie="3"

Subiectul 19 3. S se vizualizeze datele relativ la elevii care au media mai mare sau egal cu o anumita valoare, n ordinea descresctoare a mediei; SELECT Elev1.nume, Elev1.medie; FROM ELEV1; WHERE Elev1.medie >= 7; ORDER BY Elev1.medie DESC 4. S se vizualize pentru fiecare elev gsit n ambele tabele datele referitoare la acel elev. SELECT e.nume,e.cnp, a.adresa, e.clasa, e.medie; FROM elev1 e, adresa a WHERE e.cnp=a.cnp Subiectul 20 3. S se vizualizeze pentru fiecare persoan numrul automobilelor pe care le deine; Observaie:numrul de inmatriculare al mainii poate fi de forma BR-10-AXY. (character!) SELECT p.nume, COUNT(*) as nr_masini; FROM persoana p, automobil a; WHERE p.nr_inmatric=a.nr_inmatric; group BY p.nume Subiectul 21 3. Pentru fiecare curs s se vizualizeze, destinaia, data cursei, numrul total de locuri i numrul de locuri rezervate, n ordinea datei la care este programat cursa. SELECT c.cod_cursa, c.destinatia, c.data_c,c.nr_loc, SUM (r.nr_loc_rez) as TOTAL REZ; FROM cursa c, rezervare r; WHERE c.cod_cursa=r.cod_cursa; GROUP BY c.cod_cursa, c.destinatia, c.data_c, c.nr_loc;

ORDER BY c.data_c DESC c.cod_cursa, c.destinatia, c.data_c, c.nr_loc Subiectul 22

3. Pentru fiecare abonat s se vizualizeze numarul de reviste la care este abonat;


SELECT a.nume_ab, COUNT (*) as nr_reviste; FROM revista r, abonat a; WHERE r.cod_r=a.cod_r; GROUP BY a.nume

4. S se vizualizeze informaii despre revistele pentru care s-au fcut abonamente.


SELECT r.denumire, r.cod_r, r.nr_aparitii; FROM revista r, abonat a; WHERE r.cod_r=a.cod_r; Subiectul 23 3. Pentru fiecare grup s se afieze numrul de studeni ai grupei; SELECT g.cod_grupa, g.spec, COUNT (*) as nr_studenti; FROM student s, grupa g; WHERE s.cod_grupa=g.cod_grupa; GROUP BY g.cod_grupa, g.spec

4. S se elimine din tabela Grupa nregistrarea referitoare la o anumit grup identificat prin cod grupa i din tabela Student
toate nregistrrile referitoare la studenii din acea grup. @ 5,5 SAY "Grupa" GET c default 0 READ USE grupa DELETE FOR cod_grupa=c USE student DELETE ALL FOR cod_grupa=c Subiectul 24 3. S se afieze firmele care au nchiriat spaii crora le expir contractul n luna curent; SELECT f.nume, f.data_e, f.nr_luni; FROM sediu s, firma f; WHERE s.cod_s=f.cos_s AND MONTH(f.data_c)+f.nr_luni=MONTH(DATE())

4. S se afieze pentru fiecare firm numele ei, adresa sediului i suma total de plat.
Observaie: Nu se ia n cosiderare cazul n care se trece de la un an la urmtorul. SELECT f.nume, s.adresa, SUM (f.nr_luni*s.chirie) as suma_de_plata; FROM sediu s, firma f; WHERE s.cod_s=f.cod_s; GROUP BY f.nume, s.adresa Subiectul 25 3. S se afieze oferii i km parcuri n ordinea descresctoare a numrului de km. Observaii: Un ofer lucreaz pe o singur masin. SELECT t.nume, t.nr_masina, c.km; FROM taxi t, cursa c; WHERE t.nr_masina=c.nr_masina; ORDER BY c.km DESC t.nume_sofer, t.nr_masina