Rezolvari MySQL

10

Click here to load reader

description

rezolvari probleme MySql atestat

Transcript of Rezolvari MySQL

Page 1: Rezolvari MySQL

Importul bazei de date din backup-ul "atestat.sql":

- downloadatzi backup-ul intr-un director (ex: c:\work)- ne asiguram ca in mysql avem o baza de date in care sa importam backup-ul. Fie aceasta baza de date "work". Daca nu exista o cream (pentru asta trebuie să ne conectăm mai întâi la serverul de baze de date cu mysql –u mysql -p work) :

create database work;Daca exista, o shtergem shi o recreăm:

drop database work;create database work;

- importul în sine se face astfel (atenţie, comanda de import NU merge din mysql, ci trebuie dată din prompt. Dacă sunteţi în mysql ieşiţi cu quit):- deschidem un command prompt (dacă nu e deja deschis) în directorul in care am salvat backup-ul- importăm cu:

mysql –u mysql -p work < atestat.sql(!atenţie să NU puneţi ; după comandă!)

Aceasta va importa baza de date din fişierul atestat.sql creind in baza de date 'work' o tabelă care se va chema 'admitere' şi asupa căreia vom lucra toate subiectele următoare.

Rezolvarea subiectului preliminar:

- deschidem o consolă în care pornim mysql monitor:mysql –u root –p- accesăm baza de date atetstatuse work;- calculam mediile tuturor ploadelor:update admitere set media=floor((proba1+proba2+0.0001)/2*100)/100;- le punem tuturor 'respins':update admitere set rezultat='respins';- primilor 20 de catindatzi care au la ambele probe peste 5, in ordinea descrescatoare a mediilor, le punem 'admis'update admitere set rezultat='admis' where proba1>=5 and proba2>=5 order by media desc limit 20;

Rezolvarea biletelor propriuzise:

1) Să se creeze două interogari, cu structura NUME, PRENUME, REZULTAT, MEDIA, una cu fetele iar alta cu băieţii ce s-au prezentat la examen, ordonate descrescător, fiecare, după criteriul mediei obţinute la examen.

select nume,prenume,rezultat,media from admitere where sex='m' order by media desc;select nume,prenume,rezultat,media from admitere where sex='f' order by media desc;

2) Să se creeze două interogari care să conţină:• lista celor mai buni cinci candidaţi admişi• lista celor mai slabi cinci candidaţi admişi Structura: NUME, PRENUME, MEDIA, DATAN, ORAŞ

Page 2: Rezolvari MySQL

select nume,prenume,media,datan,oras from admitere where rezultat='admis' order by media desc limit 5;

select nume,prenume,media,datan,oras from admitere where rezultat='admis' order by media desc limit 15,5;3) Să se creeze o interogare care să conţină candidaţii admişi ce au vârsta cuprinsă între 18 şi 20 de ani, relativ la data la care se consultă tabela. Articolele vor fi ordonate crescător după DATAN. Pentru două articole care au DATAN egală, ordinea va fi dată de NUME.Structura interogării: NUME, PRENUME, ORAŞ, DATAN, MEDIA

select nume,prenume,oras,datan,media from admitere where rezultat='admis' and datan>=date_add(now(),interval -20 year) and datan<=date_add(now(),interval -18 year) order by datan,nume;

4) Să se creeze două interogări ce conţin: NUME, PRENUME, PROBA1, REZULTAT, respectiv NUME, PRENUME, PROBA2, REZULTAT ordonate descrescător după criteriul PROBA1 respectiv PROBA2

select nume,prenume,proba1,rezultat from admitere order by proba1 desc;

select nume,prenume,proba2,rezultat from admitere order by proba2 desc;

5) Să se creeze o interogare ce conţine situaţia de la examen, cu lista candidaţilor în ordine alfabetică. Pentru doi candidaţi cu acelaşi nume, ordinea în listă va fi dată de prenume.Structura: NUME, PRENUME, MEDIA, REZULTAT

select nume,prenume,media,rezultat from admitere order by nume,prenume;

6) Să se realizeze o situaţie statistică, cu numărul procentual al mediilor cuprinse între: l - 5.00 ; 5.01 - 7.00 ; 7.01 - 9.00 ; 9.01 - 10. Procentele se vor prezenta ca numere întregi, cu rotunjire.

- numărăm în variabilele n15, n57, n79 şi n910 numărul de medii respective, iar in variabila n nr. total de medii (catindaţi)

select @n15:=(select count(media) from admitere where media<=5); select @n57:=(select count(media) from admitere where media>5 and media<=7);select @n79:=(select count(media) from admitere where media>7 and media<=9);select @n910:=(select count(media) from admitere where media>9);select @n:=(select count(media) from admitere);select round(@n15/@n*100) as procent15, round(@n57/@n*100) as procent57, round(@n79/@n*100) as procent79, round(@n910/@n*100) as procent910;

Page 3: Rezolvari MySQL

7) a) Să se facă o interogare cu structura NUME, PRENUME, MEDIA, REZULTAT, ORAŞ, grupând toţi candidaţii din acelaşi oraş în înregistrări consecutive, candidaţii din acelaşi oraş fiind ordonaţi după nume şi prenume.b) Pentru un oraş fixat să se afişeze o interogare de forma:NR NUME PRENUME MEDIA REZULTAT 1 ............ .................. ............. .................... 2 ............ .................. ............. .................... 3 ............ .................. ............. .................... 4 : : : :doar cu catindaţii din acel oraş, ordonaţi după nume şi prenumeObs: Numerotarea candidaţilor din listă se va face începând de la 1

a)select nume,prenume,media,rezultat,oras from admitere order by oras,nume,prenume;

b)select @a:=0;select (@a:=@a+1) as nr,nume,prenume,media,rezultat from admitere where oras=”brasov” order by nume,prenume;

8) Să se facă o interogare cu structura: NUME, PRENUME, MEDIA, ORAŞ, care să cuprindă, pentru toate oraşele ce apar în lista examenului de admitere, cel mai bun (cei mai buni) candidat provenit din fiecare oraş. Lista va fi ordonată alfabetic în funcţie de numele oraşului.

- tre’ făcută separat o listă cu oraşele distincte şi media cea mai bună din fiecare. Această listă o joinăm apoi cu tabela dată făcând legătura prin câmpurile ‘media’ şi ‘oras’

select nume,prenume,media,admitere.oras from admitere join (select oras,max(media) as medmax from admitere group by(oras)) as rezmax on admitere.oras=rezmax.oras and media=medmax order by oras;

9) Să se creeze două interogări cu informaţii complete - mai puţin oraşul - cu candidaţii admişi, respectiv respinşi la examen, proveniţi din CLUJ. Listele vor fi ordonate după medie. La medii egale, se va face ordonare alfabetică.

- admişii:select nume,prenume,sex,proba1,proba2,media,datan,rezultat from admitere where oras=’cluj’ and rezultat=’admis’ order by media desc,nume,prenume;- respinşii:select nume,prenume,sex,proba1,proba2,media,datan,rezultat from admitere where oras=’cluj’ and rezultat=’respins’ order by media desc,nume,prenume;

10) în urma evaluării contestaţiilor, candidatului DINITA Razvan i s-a modificat nota de la proba1, din 9.88 în 9.50, iar candidatului LAMPINEAN Neonila nota de la proba2 din 4.99 în 5.Faceţi modificările respective în tabelă.

Page 4: Rezolvari MySQL

update admitere set proba1=9.50 where nume='dinita' and prenume='razvan';

update admitere set proba2=5 where nume='lampinean' and prenume='neonila';

11) În cămin sunt disponibile 4 locuri. Ele se vor distribui în ordinea descrescătoare a mediilor, candidaţilor admişi care au domiciliul în altă localitate decât Braşov.Să se creeze o interogare cu viitorii căminişti, cu următoarea structură: NUME, PRENUME, ORAŞ, MEDIA.Lista va fi ordonată descrescător după criteriul mediei la examen. La medii egale, departajarea se va face după nota la proba1.

select nume,prenume,oras,media from admitere where oras<>’brasov’ and rezultat=’admis’ order by media desc, proba1 desc limit 4;

12) În cămin sunt disponibile 2 locuri pentru băieţi şi 3 pentru fete. Să se creeze două interogări, una pentru băieţi şi una pentru fete, cu candidaţii admişi ce nu sunt din Braşov şi obţin loc în cămin. Locurile disponibile se vor distribui în ordinea descrescătoare a mediilor, la medii egale departajarea făcându-se după nota obţinută la proba1.Lista va fi ordonată descrescător după criteriul mediei la examen. Coloanele afişate sunt: NUME, PRENUME, ORAŞ, MEDIA.

select nume,prenume,oras,media from admitere where oras<>’brasov’ and rezultat=’admis’ and sex=’m’ order by media desc, proba1 desc limit 2;select nume,prenume,oras,media from admitere where oras<>’brasov’ and rezultat=’admis’ and sex=’f’ order by media desc, proba1 desc limit 3;

13) Pentru candidaţii admişi la examen se dau două categorii de burse:• de merit - pentru candidaţii ce au obţinut medii cuprinse între 9.75 şi 10• de studii - pentru candidaţii ce au obţinut medii cuprinse între 8.50 şi 9.74. Să se creeze două interogări cu cele două categorii de bursieri, ordonate alfabetic.Structura rapoartelor este: NUME, PRENUME, MEDIA.

select nume,prenume,media from admitere where media>=9.75 order by nume,prenume;select nume,prenume,media from admitere where media>=8.50 and media <=9.74 order by nume,prenume;

Page 5: Rezolvari MySQL

14) Să se facă două interogări ordonate alfabetic, pentru Comisariatul Militar, una cu băieţii incorporabili şi una cu cei neincorporabili în armată.Un candidat (băiat) este incorporabil dacă:• este respins• are vârsta de cel puţin 20 de ani la data de 20 mai 2007. Coloanele afişate: NUME, PRENUME, DATAN, ORAŞ.

- ca să aibă cel puţin 20 de ani la 20 mai 2007 tre’ să fie născut înainte de 20 mai 1987.

select nume,prenume,datan,oras from admitere where datan<=’1987-05-20’ and rezultat=’respins’ and sex=’m’ order by nume,prenume;select nume,prenume,datan,oras from admitere where not(datan<=’1987-05-20’ and rezultat=’respins’) and sex=’m’ order by nume,prenume;

15) Să se facă o statistică pentru candidaţii proveniţi dintr-un oraş fixat, care să evidenţieze procentul de admişi din oraşul respectiv şi numărul de candidaţi proveniţi din acest oraş. Procentul se va furniza ca număr întreg, cu rotunjire.

- calculăm în variabila @nadm, @nres, @n numărul de admişi, respectiv respinşi respectiv total din oraşul dat.

select @nadm:=(select count(*) from admitere where oras='brasov' and rezultat='admis');select @nres:=(select count(*) from admitere where oras='brasov' and rezultat='respins');select @n:=@nadm+@nres;select round(@nadm/@n*100) as procent_admisi;select round(@nres/@n*100) as procent_respinsi;

16) Să se facă o statistică în care să se evidenţieze media notelor la proba1, media notelor la proba2 şi media mediilor generale doar pentru candidaţii declaraţi admişi la examen. Fiecare dintre cele trei medii se calculează cu rotunjire la a doua zecimală.

select round(avg(proba1),2) as media_la_proba1 from admitere where rezultat='admis';select round(avg(proba2),2) as media_la_proba2 from admitere where rezultat='admis';select round(avg(media),2) as media_mediilor from admitere where rezultat='admis';

17) Să se facă o interogare cu toţi candidaţii care au media peste media de admitere dar care au fost declaraţi respinşi. Coloanele: NUME, PRENUME, MEDIA, ORAŞ.

- tre’ să determinăm ultima medie cu care s-a intrat: media minimă a vreunui admis:

select @madm:=(select min(media) from admitere where rezultat=’admis’);select nume,prenume,media,oras from admitere where media>=@madm and rezultat=’respins’;

Page 6: Rezolvari MySQL

18) Să se evidenţieze care este:• media mediilor candidaţilor admişi• media mediilor candidaţilor respinşi. Fiecare dintre cele două medii se calculează cu rotunjire la a doua zecimală.

select round(avg(media),2) as media_admisilor from admitere where rezultat=’admis’;select round(avg(media),2) as media_respinsilor from admitere where rezultat=’respins’;

19) a) Să se facă o interogare în care să listăm oraşele în ordine alfabetică, pentru fiecare oraş afişând numărul de candidaţi. Coloanele vor fi: ORAS, NRCAND

select oras,count(*) as nrcand from admitere group by oras;

b) Să se afişeze oraşul (oraşele) care au numărul cel mai mare de candidaţi. Se va afişa oraşul şi nr. de candidaţi.

select @max:=(select max(nrcand) from (select count(*) as nrcand from admitere group by oras) as nmax );

aia boldită şi albăstrită afişează nr. de catindaţi din fieşcare oraşDin ea calculam maximul, şi îl ţâpăm în variabila maxpentru a afişa oraşele cu acest nr. max de catindaţi:

select oras,count(*) as nrcand from admitere group by oras having nrcand=@max;

20) În vederea repartizării celor admişi în grupe de câte 10 studenţi fiecare, să se distribuie candidaţii admişi, în ordinea descrescătoare a mediilor de admitere după cum urmează: primul candidat este repartizat în grupa1, al doilea în grupa2, al treilea în grupa1, al patrulea în grupa2, şi aşa mai departe.Structura tabelelor ce se vor afişa, va fi: NRCRT, NUME, PRENUME, ORAS, MEDIA, DATAN

* cu primul, al 3-lea, al 5-lea,....:

select @nrord:=0;select * from (select (@nrord:=@nrord+1) as nrcrt, nume, prenume, oras, media, datan from admitere where rezultat='admis' order by media desc) as coco where nrcrt mod 2=1;

ăla boldit şi albăstrit ne dă lista cu toţi admişii, în care mai apare o coloana nrcrt ce-i numără.Din interogarea obţinută le filtrăm apoi printr-un alt select DOAR pe-ălea cu nrcrt mod 2=1 pentru prima grupă. Analog va fi şi pentru a 2a.

select @nrord:=0;select * from (select (@nrord:=@nrord+1) as nrcrt, nume, prenume, oras, media, datan from admitere where rezultat='admis' order by media desc) as coco where nrcrt mod 2=0;