Sunteți pe pagina 1din 38

ADMINISTRAREA BAZEI DE DATE

1.4 Grădinărit

1.4.1 Model de entitate/relație

1.4.2 Baza de date pentru MySQL


DROP BAZA DE DATE DACĂ EXISTĂ grădinărit;
CREAȚI BAZĂ DE DATE pentru grădinărit SET DE CARACTERE utf8mb4;
UTILIZAȚI grădinărit;

CREATE TABLE office (


cod_oficiu VARCHAR ( 10 ) NOT NULL ,
oraș VARCHAR ( 30 ) NOT NULL ,
tara VARCHAR ( 50 ) NOT NULL ,
regiune VARCHAR ( 50 ) DEFAULT NULL ,
cod_poștal VARCHAR ( 10 ) NOT NULL ,
telefon VARCHAR ( 20 ) NOT NULL ,
line_address1 VARCHAR ( 50 ) NOT NULL ,
line_address2 VARCHAR ( 50 ) DEFAULT NULL ,
CHEIE PRIMARĂ (cod_oficiu)
);

CREATE TABLE angajat (


cod_angajat INTEGER NOT NULL ,
nume VARCHAR ( 50 ) NOT NULL ,
lastname1 VARCHAR ( 50 ) NOT NULL ,
lastname2 VARCHAR ( 50 ) DEFAULT NULL ,
extensia VARCHAR ( 10 ) NOT NULL ,
email VARCHAR ( 100 ) NOT NULL ,
cod_oficiu VARCHAR ( 10 ) NOT NULL ,
cod_șef INTEGER DEFAULT NULL ,
pune VARCHAR ( 50 ) DEFAULT NULL ,
CHEIE PRIMARĂ (cod_angajat),
CHEIE STRĂINĂ (cod_oficiu) REFERINȚE birou (cod_oficiu),
CHEIE STRĂINĂ (cod_șef) REFERINȚE angajat (cod_angajat)
);

CREATE TABLE range_product (


interval VARCHAR ( 50 ) NOT NULL ,
text_description TEXT,
description_html TEXT,
imagine VARCHAR ( 256 ),
CHEIE PRIMARĂ (interval)
);

CREATE TABLE client (


customer_code INTEGER NOT NULL ,
nume_client VARCHAR ( 50 ) NOT NULL ,
contact_name VARCHAR ( 30 ) DEFAULT NULL ,
contact_lastname VARCHAR ( 30 ) DEFAULT NULL ,
telefon VARCHAR ( 15 ) NOT NULL ,
fax VARCHAR ( 15 ) NOT NULL ,
line_address1 VARCHAR ( 50 ) NOT NULL ,
line_address2 VARCHAR ( 50 ) DEFAULT NULL ,
oraș VARCHAR ( 50 ) NOT NULL ,
regiune VARCHAR ( 50 ) DEFAULT NULL ,
tara VARCHAR ( 50 ) DEFAULT NULL ,
cod_poștal VARCHAR ( 10 ) DEFAULT NULL ,
sales_rep_employee_code INTEGER DEFAULT NULL ,
credit_limit NUMERIC ( 15 , 2 ) DEFAULT NULL ,
CHEIE PRIMARĂ (cod_client),
CHEIE STRĂINĂ (cod_angajat_reprezentant_vânzări) REFERINȚE angajat
(cod_angajat)
);

cerere CREATE TABLE (


order_code INTEGER NOT NULL ,
data_comandă data NOT NULL ,
data_așteptată data NOT NULL ,
data_date de livrare DEFAULT NULL ,
stare VARCHAR ( 15 ) NOT NULL ,
Comentarii TEXT,
customer_code INTEGER NOT NULL ,
CHEIE PRIMARĂ (cod_comandă),
CHEIE STRĂINĂ (cod_client) REFERINȚE client (cod_client)
);

produs CREATE TABLE (


cod_produs VARCHAR ( 15 ) NOT NULL ,
nume VARCHAR ( 70 ) NOT NULL ,
interval VARCHAR ( 50 ) NOT NULL ,
dimensiuni VARCHAR ( 25 ) NULL ,
furnizor VARCHAR ( 50 ) DEFAULT NULL ,
text de descriere NULL ,
quantity_in_stock SMALLINT NOT NULL ,
pret_de vânzare NUMERIC ( 15 , 2 ) NOT NULL ,
furnizor_preț NUMERIC ( 15 , 2 ) DEFAULT NULL ,
CHEIE PRIMARĂ (cod_produs),
CHEIE STRĂINĂ (gamă) REFERINȚE product_range (gamă)
);

CREATE TABLE order_detail (


order_code INTEGER NOT NULL ,
cod_produs VARCHAR ( 15 ) NOT NULL ,
cantitate INTEGER NOT NULL ,
unit_price NUMERIC ( 15 , 2 ) NOT NULL ,
line_number SMALLINT NOT NULL ,
CHEIE PRIMARĂ (cod_comandă, cod_produs),
CHEIE străină (cod_comandă) REFERINȚE comanda (cod_comandă),
CHEIE STRĂINĂ (cod_produs) REFERINȚE produs (cod_produs)
);

CREATE TABLE plata (


customer_code INTEGER NOT NULL ,
payment_form VARCHAR ( 40 ) NOT NULL ,
tranzacție_id VARCHAR ( 50 ) NOT NULL ,
date_date_platei NU NULL ,
total NUMERIC ( 15 , 2 ) NU NUL ,
CHEIE PRIMARĂ (cod_client, cod_transacție),
CHEIE STRĂINĂ (cod_client) REFERINȚE client (cod_client)
);

1.4.3 Date
Accesați scriptul SQL pentru crearea bazei de date și inserarea datelor: jardineria.sql .

1.4.4 Interogări pe un tabel


1. Returnează o listă cu codul biroului și orașul în care există birouri.
2.

Returneaz o list cu oraul i numrul de telefon al birourilor din Spania.

3. Returnează o listă cu numele, prenumele și e-mailul angajaților al căror șef are


un cod de șef egal cu 7.
4. Returnează numele postului, numele, prenumele și emailul șefului companiei.

5. Returnează o listă cu numele, prenumele și funcția acelor angajați care nu sunt


reprezentanți de vânzări.
6. Returneaz o list cu numele tuturor clienilor spanioli.

7. Returnează o listă cu diferitele stări prin care poate trece o comandă.

8.
Returneaz o list cu codul de client al acelor clieni care au efectuat o plat în 2008. Tine cont ca trebu
9.
Returneaz o list cu codul comenzii, codul clientului, data estimat i data livrrii comenzilor care nu a

10.
Returneaz o list cu codul comenzii, codul clientului, data estimat i data livrrii comenzilor a cror da
11. Returnează o listă cu toate comenzile care au fost respinse în 2009 .

12. Returnează o listă cu toate comenzile care au fost livrate în luna ianuarie a
oricărui an.
13. Returnează o listă cu toate plățile care au fost efectuate în anul 2008 prin
Paypal . Ordonați rezultatul de la cel mai mare la cel mai mic.

14. Returnează o listă cu toate metodele de plată care apar în tabelul de plată . Vă
rugăm să rețineți că nu ar trebui să existe metode de plată repetate.
15. Returnează o listă cu toate produsele care aparțin gamei Ornamental și care au
peste 100 de unități în stoc. Lista trebuie ordonată după prețul său de vânzare,
arătând mai întâi prețul cel mai mare.

16. Returnează o listă cu toți clienții care sunt din orașul Madrid și al căror
reprezentant de vânzări are codul de angajat 11 sau 30 .
1.4.5 Interogări cu mai multe tabele (compoziție internă)
Rezolvați toate interogările folosind sintaxa SQL1 și SQL2 . Interogările cu sintaxa SQL2
trebuie rezolvate cu INNER JOIN și NATURAL JOIN .

1. Obțineți o listă cu numele fiecărui client și numele și prenumele reprezentantului


său de vânzări.

selectați customer.customer_name, employee.firstname,employee.lastname1

de la client, alăturați-vă angajatului pe


employee.employee_code=customer.employee_code_sales_rep

2. Afișează numele clienților care au efectuat plăți împreună cu numele


reprezentanților lor de vânzări.
3. Afișează numele clienților care nu au efectuat plăți împreună cu numele
reprezentanților lor de vânzări.

4. Returnează numele clienților care au efectuat plăți și numele reprezentanților


acestora împreună cu orașul biroului căruia îi aparține reprezentantul.
5. Returnează numele clienților care nu au efectuat plăți și numele reprezentanților
acestora împreună cu orașul biroului căruia îi aparține reprezentantul.

6. Listați adresa birourilor care au clienți în Fuenlabrada .


Returnează numele clienților și numele reprezentanților acestora împreună cu
orașul biroului căruia îi aparține reprezentantul.

8. Returnează o listă cu numele angajaților împreună cu numele șefilor acestora.


9. Returnează numele clienților pentru care o comandă nu a fost livrată la timp.
10. Returnează o listă cu diferitele game de produse pe care le-a achiziționat fiecare
client.
1.4.6 Interogări cu mai multe tabele (compoziție externă)
Rezolvați toate interogările folosind clauzele LEFT JOIN , RIGHT JOIN , NATURAL LEFT
JOIN și NATURAL RIGHT JOIN .

1. Returnează o listă care arată numai clienții care nu au efectuat nicio plată.
2. Returnează o listă care arată numai clienții care nu au plasat nicio comandă.

3. Returnează o listă cu clienții care nu au efectuat nicio plată și pe cei care nu au


plasat nicio comandă.
4. Returnează o listă care arată numai angajații care nu au un birou asociat.

5. Returnează birourile în care nu lucrează niciunul dintre angajații care au fost


reprezentanții de vânzări ai unui client care a făcut achiziția unui produs din
gama Frutales .

6. Returnează o listă care arată angajații care nu au un birou asociat și cei care
nu au un client asociat.

7. Returnează o listă de produse care nu au apărut niciodată într-o comandă.


8. Returneaza birourile in care nu lucreaza niciunul dintre angajatii care au fost
reprezentantii de vanzari ai unui client care a facut achizitionarea unui produs
din gama Frutales .

9. Returnează o listă cu clienții care au plasat o comandă, dar nu au efectuat nicio


plată.

10. Returnează o listă cu datele angajaților care nu au clienți asociați și numele


șefului asociat.

1.4.7 Interogări rezumate


1. Câți angajați sunt în companie?

2. Câți clienți are fiecare țară?

3. Care a fost plata medie în 2009?

4. Câte comenzi sunt în fiecare stat? Sortați rezultatul în ordine descrescătoare


după numărul de comenzi.
5. Calculați prețul de vânzare al celui mai scump și mai ieftin produs în aceeași
interogare.

6. Calculai numrul de clieni pe care îi are compania.

7. Câi clieni are oraul Madrid?


8. Estimai câi clieni are fiecare dintre oraele care încep cu M ?

9.
Returneaz numele reprezentanilor de vânzri i numrul de clieni deservii de fiecare.

10. Calculai numrul de clieni care nu au un reprezentant de vânzri alocat.


11.
Calculai data primei i ultimei pli efectuate de fiecare dintre clieni. Lista trebuie s arate numele i pre

12. Calculați numărul de produse diferite în fiecare dintre comenzi.


13. Calculați suma cantității totale a tuturor produselor care apar în fiecare dintre
comenzi.

14.
Returneaz o list cu cele 20 de produse cele mai vândute i numrul total de uniti din fiecare care au f

15.
Facturarea pe care compania a avut-o de-a lungul istoriei, indicând baza de impozitare, TVA i total

tabelul order_detail . TVA este de 21% din baza de impozitare, iar totalul este
suma celor două rubrici anterioare.
16.
Aceleai informaii ca la întrebarea anterioar, dar grupate dup codul produsului.

17.
Aceleai informaii ca la întrebarea anterioar, dar grupate dup codul produsului filtrate dup codurile
SAU .
18. Enumerați vânzările totale ale produselor care au facturat mai mult de 3000 de
euro. Se vor afișa numele, unitățile vândute, total facturat și total facturat cu taxe
(TVA 21%).

1.4.8 Subinterogări

1.4.8.1 Cu operatori de comparație de bază

1. Returnează numele clientului cu cea mai mare limită de credit.

2. Returnează numele produsului cu cel mai scump preț de vânzare.


3.
Returneaz numele produsului pentru care s-au vândut cele mai multe uniti. (Reinei c va trebui s cal
tabelul order_detail .
Odată ce știți care este codul produsului, puteți obține cu ușurință numele
acestuia.)

4.
Clienii a cror limit de credit este mai mare decât plile pe care le-ai efectuat. (Fr a utiliza
INNER JOIN ).

5. Returneaz produsul cu cele mai multe uniti în stoc.


6. Returnează produsul cu mai puține unități în stoc.

7. Returnează numele, prenumele și adresa de e-mail ale angajaților care se ocupă


de Alberto Soria .

1.4.8.2 Subinterogări cu ALL și ANY

8. Returnează numele clientului cu cea mai mare limită de credit.


9. Returnează numele produsului cu cel mai scump preț de vânzare.

10. Returnează produsul cu mai puține unități în stoc.

1.4.8.3 Subinterogări cu IN și NOT IN

11. Returnează prenumele, numele1 și titlul angajaților care nu reprezintă niciun


client.

12. Returnează o listă care arată numai clienții care nu au efectuat nicio plată.
13. Returnează o listă care arată numai clienții care au efectuat o plată.

14. Returnează o listă de produse care nu au apărut niciodată într-o comandă.

15. Returnează prenumele, prenumele, titlul și numărul de telefon al biroului acelor


angajați care nu sunt reprezentanți de vânzări pentru niciun client.
1.4.8.4 Subinterogări cu EXISTĂ și NU EXISTĂ

16. Returnează o listă care arată numai clienții care nu au efectuat nicio plată.
17. Returnează o listă care arată numai clienții care au efectuat o plată.
18. Returnează o listă de produse care nu au apărut niciodată într-o comandă.

19. Returnează o listă a produselor care au apărut vreodată într-o comandă.

1.4.8.5 Subinterogări corelate


1.4.9 Interogări diverse
1.
Returneaz lista clienilor indicând numele clientului i câte comenzi au plasat. Reinei c pot exista cli

2. Returnează o listă cu numele clienților și totalul plătit de fiecare dintre aceștia.


Rețineți că pot exista clienți care nu au efectuat nicio plată.
3. Returnează numele clienților care au plasat comenzi în 2008 în ordine alfabetică
de la cel mai mic la cel mai mare.
4.
Returneaz lista de clieni în care apare numele clientului, numele i prenumele reprezentantului lor d

5. Returnează o listă care indică toate orașele în care există birouri și numărul de
angajați pe care îi are

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