Sunteți pe pagina 1din 4

Utilizarea subinterogărilor

Orice rezultat care se obține cu ajutorul instrucțiunii Select este o interogare. O interogare poate
returna:

A) O coloană, eventual cu un singur rând;


B) Mai multe coloane – în acest caz se poate spune că interogarea returnează un table

Datele returnate de o interogare pot fi utilizate pentru a efectua o nouă interogare. În aceste cazuri,
prima interogare care se efectuează este interogarea subordonată. Rezultatul ei este utilizat pentru
a efectua o nouă interogare

A)Interogarea subordonată returnează o coloană cu un singur rând

Exerciții:

*)Să se determine numele elevilor din tabelul Elevi3 care au cea mai mare notă la matematică

*)Care sunt numele elevilor care au cea mai mare medie la disciplinele matematică și informatică

*)Scrieți numele elevilor și media generală a celor care au media mai mare decât media tuturor
elevilor. Să se ordoneze elevii în ordinea crescătoare a mediilor.

*)Care este numele elevilor care au aceeași notă la matematică ca și elevul Popescu marius?

B)Interogarea subordonată returnează un table . În acest caz tabelul returnat de interogarea


subordonată trebuie să aibă un nume. Aceasta se dă cu ajutorul clauzei AS. Interogarea care
.
subordonează adresează câmpurile tabelului, pornind de la numele său, urmat de ” ” și de numele
coloanei

Exemplu: Care este media generaăl la matematică și informatică a elevilor care au cel puțin 8 la una
dintre discipline?

Tabelul returnat de interogarea subordonată conține nptele la matematică și la informatică ale


elevilor care au cel puțin 8 la una dintre discipline. Acest tabel se numește virtual. Interogarea
principală calculează mediile la matematică și informatică ale acestor elevi.

Select AVG(virtual . matematica) AS medie_mate, AVG(virtual. Informatica) AS medie_info From


(Select matematica, informatica from elevi3 WHERE matematica ≥ 8 OR informatica ≥8) As virtual ;

Gruparea Datelor
Datele dintrun tabel pot fi grupate în funcție de valorile dintr-o anumită coloană. Prelucrările datelor
din fiecare grup se fac cu ajutorul funcțiilor agregate. Pentru a grupa datele din tabel după valorile
unei coloane se utilizează clauza GROUP BY nume_coloana adăugată după numele tabelului.

*)Să se creeze tabelul:

Vânzări

Date Char(50) Int(4)

Data Produs Valoare


2006-03-15 Produs1 12
2006-03-15 Produs2 18
2006-03-15 Produs1 28
2006-03-16 Produs3 100
2006-03-16 Produs1 15
2006-03-16 Produs5 300
2006-03-17 Produs2 14
2006-03-17 Produs2 21
2006-03-17 Produs2 125
2006-03-17 Produs3 18
2006-03-18 Produs4 125
2006-03-18 Produs3 5
NULL Produs3 5
NULL Produs1 20

*)Care este numărul de vânzări din fiecare zi? Se grupează datele după data și se numără vânzările
pentru fiecare grup

*) Care este suma vânzărilor zilnice? Se grupează datele după data și însumăm vânzările pentru
fiecare data în parte.

*) Care este numărul de vânzări și suma vânzărilor în fiecare zi?

Exemplu :Care este data în care vânzările sun tmaxime, câte vânzări au fost și care este suma
încasată?

Programul MYSQL nu permite mai mult de o interogare cu subordonata sa . Din aces motiv se
creează un tabel de manevră care conține data și suma vânzărilor zilnica. Apoi din acesta, utilizând o
interogare cu subinterogare , extragem datele cerute. În final se șterge tabelul ”manevra”

Create table manevra AS Select data, SUM(valoare) AS vanzare From vanzari GROUP BY data;

Select * From manevra;

Select data, vanzare From manevra WHERE vanzare= (Select MAX(vanzare) From manevra)ș

Drop table manevra;

*)Să se creeze un tabel care să conțină numele elevilor cu cel puțin 8 la matematică

Uniuni de tabele
Uniunea este aclcătuită din două sau mai multe tabele îbtre care există o legătură. De cele mai multe
ori, legătura este data de valorile existente în câte o coloană a fiecărui tabel din uniune. Pentru
tabelele care alcătuiesc uniunea se pot utiliza alias-uri de nume, sub forma nume_tabel AS
nume_alias, introdus eîn clauza FROM. Alias-urile pot fi utilizate în orice parte a instrucțiunii Select.
În aceste cazuri adresarea unei coloane a tabelului se face sub forma Aliza_nume.nume_col

1) O primă formă de realizare a unei uniuni este utilizarea instrucțiunii Select în care la clauza
FROM se trec, pe rând , toate tabelele care o alcătuiesc, iar legătura este precizată cu
ajutorul clauzei WHERE
2) Atunc când uniunea este alcătuită din două tabele, se poate preciza o legătură de tip INNER
sub forma de mai jos. În astfel de cazuri , se afișează datele din tabelul1 și tabelul2, pentru
care este îndeplinită condiția din ON. O astfel de uniune se mai numește și iniune interioară
nume_tabel1 [AS….] INNER JOIN nume_tabel2 [AS…..] ON condiția de uniune
3) Atunci când uniunea este alcătuită din două tabele se poate preciza o legătură de tip LEFT.
OUTER sub forma de mai jos. În astfel de cazuri, se afișează datele din tabel1, iar datele
tabel2 se afișează numai dacă este ăndeplinită condiția din ON, astfel în locul lor se afișează
valoarea implicită (NULL, de cele mai multe ori ). O astfel de uniune se numește uniune
exterioară stânga

Nume_tabel1 [AS…..] LEFT JOIN nume_tabel2 [AS……] ON condiția de uniune.

Ex: Se consideră 2 tabele : Produse și Date_Produse. Legătura dintre ele este data de coloanele
cod. Pentru un cod dat, din tabelul Produse se poate extrage cantitatea exeistentă într-un
magazine dintr-un anumit produs și denumirile produsului, producătorul său din tabelul
Date_Produse.

Produse Date_Produse

Cod Cantitate Cod Denumire Producător


001 20 001 Produs1 Producător2
003 10 003 Produs3 Producător5
002 2 002 Produs2 Producător4
004 1 005 Produs4 Producător2
006 8 006 Produs6 Producător1
008 Produs7 Producător2

Exercitii

*)pentru fiecare produs existent în magazine, care este trecut în tabelul Date_produse să se
afișeze denumirile și cantitatea (în ambele variante).

*)La fel ca la punctul anterior, numai că se vor trece datele existente pentru toate produsele din
tabelul Produse

*)La fel ca mai sus numai că se vor trece datele existente pentru toate produsele din tabelul
Date_Produse

*)Să se afișeze codurile din tabelul produse care nu se regăsesc înre codurile din tabelul
Date_Produse

*)Să se selecteze codurile de produse din tabelul Date_produse care nu se regăsesc printer
codurile din tabelul Produse

Autouniun

Dacă se unește un tabel cu el însuși, trebuie ca același tabel să aibă două alias-uri diferite și se
consider unite printr-o coloană

Exemplu. În tabelul pers, care sunt persoanele care locuiesc în același oraș cu Ioana?

Nume Oraș
Ioana Galați
Marina București
Cristian Târgu Jiu
Carmen Onești
Petru Galați
Cristian Galați

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