Documente Academic
Documente Profesional
Documente Cultură
Seminar 12
Evaluare individuala – 2 p
LUCRU INDIVIDUAL
Meta Instrucțiuni:
1. Folosind adresa de e-mail instituțională (de student), rezultatele obținute vor fi transmise pe e-
mail la următoare adresă: roxana.adam@unibuc.ro sau folosind adresa
faa.ub.lucrari@gmail.com pentru cei care nu acces la adresa de e-mail instituțională.
2. Rezultatele obținute vor fi transmise în dublu exemplar sub forma unui fișier text cu extensia
.txt şi a unui fişier cu extensia .sql, numele fișierului având următorul format:
CE_II_T2_<grupa1/2/3>_<nume>_<prenume>. txt / .sql (exemplu:
CE_II_T2_grupa1_Popescu_IonAlexandru.txt şi CE_II_T2_grupa1_Popescu_IonAlexandru.sql),
care să conțină toate instrucțiunile utilizate pentru rezolvarea cerințelor (DOAR fisierul .txt
trebuie sa conțină si outputul), împreună cu comentarii sub forma acceptată de MySQL (ex: /*
comentariu */, - , #, \! echo).
3. Vor fi punctate doar rezolvările care nu au erori şi afişează rezultatul corect. Fișierul cu extensia
.sql trebuie sa fie executabil în MySQL, iar cel cu extensia .txt să redea exact aceeaşi structura
ca primul fişier + outputul aferent fiecărei interogări.
4. Fișierul se completează în ordine cronologică a cerințelor: începând cu prima cerință şi se
încheie cu ultima cerinţă. Cerințele care nu au rezolvare vor fi completate cu mesajul:
/* cerinţă nerezolvată */
5. Mailul va avea drept subiect/titlu “ CE_II_T2_<grupa1/2/3>_<nume>_<prenume>” (exemplu:
CE_II_T2_grupa1_Popescu_IonAlexandru)
6. Termen limită de primire a fișierului de lucru este: 12.01.2023 ora 18:00. Tot ce depășește
această dată nu va fi luat în considerare.
7. Pentru orice nelămurire legată de lucru individual, în se realizează o listă cu toate întrebările
studenților și se trimit de un reprezentant al studenților pe e-mail coordonatorului de seminar
până la data 10.01.2023 ora 18:00.
8.
Punctaj:
Pentru a fi punctată lucrarea trebuie să respectare meta instrucțiunile.
Punctaj: 2 p (20% din nota finală).
Fiecare întrebare are notat punctajul aferent.
ONESTITATE ACADEMICĂ
Însușirea ideilor altor autori pentru rezolvarea prezentei teme, fie prin preluarea parțială sau
totală, fără a menționa prin referință completă şi corectă sursa acestor idei sugerează în mod
eronat cititorului faptul că acele idei v-ar aparține.
Atenţie! În conformitate cu Carta Universităţii din Bucureşti, cazurile de plagiat pot duce la
exmatricularea fără drept de apel a studentului aflat în această situaţie.
REZOLVARE:
/* O data incarcata baza de date in MySQL (command line client) puteti vizualiza Diagrama entitate-
relatie (ERD) cu ajutorul MySQL Workbench in format editabil pentru intelegerea bazei de date*/
/* Q1: Pe baza Diagramei entitate-asociere (ERD) din documentul PDF sau vizualizata cu ajutorul MySQL
Workbench dupa incarcarea baze de date, descrieti tipurile de asocieri aferente tabelului:
a. customer,
b. employee,
c. account.
Pentru clarificari suplimentare, la nevoie, folositi instructiunea: SHOW CREATE TABLE nume_tabel\G.
Prezentati cu cate alte tabele se afla in asociere tabelul de interes, variabila de legatura, apoi detaliati
optionalitatea si cardinalitatea asocieriilor cu fiecare tabel. */
#1p
Select Pro.Product_Cd
,Pro.Name
,Pro.Product_Type_Cd
From Product Pro;
/* Q3: Utilizand comanda SQL corespunzatoare, afisati datele de identificare a angajatilor (Emp_Id,
First_Name. Last_Name, Dept_Id) a caror prenume (First_Name) incepe cu litera C sau T si lucreaza in
departamentul 1 sau 2 (Dept_Id). */
#1p
Select Emp.Emp_Id
,Emp.First_Name
,Emp.Last_Name
,Emp.Dept_Id
From Employee Emp
Where (Emp.First_Name Like 'C%' Or Emp.First_Name Like 'T%')
And Emp.Dept_Id IN (1, 2);
/* Q4: Utilizand comanda SQL corespunzatoare, afisati urmatoarele date despre angajati cu ID-ul
(Emp_Id) cuprins intre 5 si 10: Emp_Id, First_Name. Last_Name, Start_Date din tabelul Employee si
numele departamentului in care lucreaza fiecare angajat (coloana Name din tabelul Department). */
#1p
Select Emp.Emp_Id
,Emp.First_Name
,Emp.Last_Name
,Emp.Start_Date
,Dep.Name
From Employee Emp, Department Dep
Where Emp.DEPT_ID = Dep.DEPT_ID AND
(Emp.Emp_Id Between 4 And 7);
/* Q5: Utilizand comanda SQL corespunzatoare, afisati datele de identificare a ofiterilor de serviciu
(Officer_Id, Last_Name, First_Name, Start_Date) din tabelul Officer si a clientilor cu care au colaborat
(Cust_ID, Cust_TYPE_CD) din tabelul Customer. Ordonati datele dupa numele de familie (Last_Name) a
ofiterilor in ordine crescatoare si prenumele (First_Name) acestora in ordine descrescatoare. */
#1p
Select Off.Officer_Id
, Off.Last_Name
, Off.First_Name
, Off.Start_Date
, Cust.Cust_ID
, Cust. Cust_TYPE_CD
From Officer Off, Customer Cust
Where Off.Cust_ID = Cust.Cust_ID
Order By Off. Last_Name ASC, Off.First_Name desc;
/* Q6: Utilizand comanda SQL corespunzatoare, pentru fiecare tip de servicii (Product_Cd)de care
beneficieaza mai mult de trei 3 participanti, listati balanta conturilor (Avail_Balance) ca suma medie si
suma totala de bani in conturi.
#1p
Select Acc.Product_Cd
,Count(Acc.Product_Cd) As Count_Acc
,Sum(Acc.Avail_Balance) As Sum_Avail_Balance
,Avg(Acc.Avail_Balance) As Avg_Avail_Balance
From Account Acc
Group By Acc.Product_Cd
Having Count(*) > 3;
/* Q7: Un client poate detine unul sau mai multe conturi. Conturile pot fi deschise la diferite sucursale
(Open_Branch_Id). Utilizand comanda SQL corespunzatoare, afisati: suma minima disponibila
(Avail_Balance) din conturi pentru fiecare sucursala, id-ul condului (Account_ID) si sucursala aferenta. */
#1p
Select Acc.Open_Branch_Id
,Acc.Account_ID
,Min(Acc.Avail_Balance)
From Account Acc
Group By Acc.Open_Branch_Id;
/* Q8: Scrieti o instructiune SQL de tip JOIN pentru a afisa id-ul angajatului, numele, prenumele, id-ul
departamentului, numele departamentului (Emp_Id, First_Name, Last_Name, Dept_Id, Name) pentru
observatiile comune din tabelele Employee si Department. */
#1p
Select Emp.Emp_Id
,Emp.First_Name
,Emp.Last_Name
,Emp.Dept_Id
,Dep.Name Dept_Name
From Employee Emp
Inner Join Department Dep
On Emp.Dept_Id = Dep.Dept_Id
Order By Emp.Emp_Id;
/* Q9: Scrieti o instructiune SQL de tip LEFT JOIN pentru a afisa pentru urmatoarele date din tabelul
Customer (Cust_Id, Fed_Id, State) informatii din tabelul Officer (Cust_Id, Officer_Id, Start_Date, Title).
Utilizati tabelele Customer si Officer. */
#1p
Select Cus.Cust_Id
,Cus.Fed_Id
,Cus.State
,Ofc.Cust_Id As Ofc_Cust_Id
,Ofc.Officer_Id
,Ofc.Start_Date
,Ofc.Title
From Customer Cus -- Table1
Left Join Officer Ofc -- Table2
On Cus.Cust_Id = Ofc.Cust_Id;
/* Q10: Scrieti o instructiune SQL de tip RIGH JOIN pentru a afisa pentru urmatoarele date din tabelul
Customer (Cust_Id, Fed_Id, State) informatii din tabelul Officer (Cust_Id, Officer_Id, Start_Date, Title).
Utilizati tabelele Customer si Officer. */
#1p
Select Cus.Cust_Id
,Cus.Fed_Id
,Cus.State
,Ofc.Cust_Id As Ofc_Cust_Id
,Ofc.Officer_Id
,Ofc.Start_Date
,Ofc.Title
From Officer Ofc -- Table1
Right Join Customer Cus -- Table2
On Ofc.Cust_Id = Cus.Cust_Id;
/* Q11: Scrieti o instructiune SQL de tip LEFT JOIN pentru a afisa pentru urmatoarele date din tabelul
Officer (Cust_Id, Officer_Id, Start_Date, Title) informatii din tabelul Customer (Cust_Id, Fed_Id, State).
Utilizati tabelele Customer si Officer. */
#1p
Select Cus.Cust_Id
,Cus.Fed_Id
,Cus.State
,Ofc.Cust_Id As Ofc_Cust_Id
,Ofc.Officer_Id
,Ofc.Start_Date
,Ofc.Title
From Officer Ofc
Left Join Customer Cus
On Ofc.Cust_Id = Cus.Cust_Id;
/* Q12: Care este clasamentul oraselor bogate din punct de vedere al sumelor economisite (in ordine
descrescatoare) de clientii cu CUST_TYPE_CD='I'?
Creati o interograre utilizand RIGHT JOIN pentru a afisa pentru fiecare oras totalul sumei disponibile in
cont (folosind variabilele CITY si AVAIL_BALANCE din tabelele account si customer) pentru clientii cu
CUST_TYPE_CD='I'.
Indiciu (SUM(AVAIL_BALANCE)).*/
#1p
/* Q15: Care este firma (colona NAME din tabelul business) si in ce oras (colona CITY din tabelul
customer) activeaza care detine cele mai multe lichiditati (colona AVAIL_BALANCE din tabelul account)
pentru clientii cu CUST_TYPE_CD='B'?
De aceasta data creati o subinterograre utilizand clauza WHERE (fara a folosi JOIN).
Indiciu MAX(AVAIL_BALANCE) */
#2p
/* Q16: Afisati numele produselor care au facut obiectul unei operatiuni de cont si id-ul conturilor
respective (coloana NAME din tabelul product si coloana ACCOUNT_ID din tabelul account).
Creati interograrea utilizand INNER JOIN. */
#1p
# verificam
SELECT PRODUCT_TYPE_CD, AVAIL_BALANCE
FROM (account a NATURAL JOIN product p)
WHERE PRODUCT_TYPE_CD='LOAN';