Biologie | Chimie | Didactica | Fizica | Geografie | Informatica | |
Istorie | Literatura | Matematica | Psihologie |
Clauza GROUP BY
Aceasta claza imparte tabela in grupuri de linii. Liniile din fiecare grup au aceeasi valoare in dreptul coloanei specificate. Deci, valorile identice fac parte din acelasi grup. Gruparea permite efectuarea de operatii asupra acestor grupuri. Gruparea se poate face pe baza a oricat de multe coloane. Coloanele din lista de selectie trebuie sa figureze in clauza Group By, sau sa contina o functie specifica.
Sintaxa unei comenzi SELECT care contine aceasta clauza este:
SELECT col1, . coln
FROM nume_tabela
GROUP BY nume_col1, . nume_coln
Clauza ia in considerare o singura instanta a fiecarei valori dintr-o coloana, dupa o ordonare crescatoare a valorilor din coloana respectiva. GROUP BY se deosebeste de ORDER BY care, desi ordoneaza liniile in ordine crescatoare, nu inlatura valorile care se repeta.
Exemplu: se grupeaza liniile din tabela Angajat dupa valorile din coloana depart care memoreaza numarul departamentului si se numara angajatii din fiecare grup sau departament.
Select depart, "nr" = count(*)
From Angajat
Group By depart
ڤ
Selectia anumitor grupuri se face cu clauza HAVING, care compara o anumita proprietate a grupului, cu o valoare constanta. Daca un grup satisface expresia logica din clauza HAVING, acesta este inclus in rezultatul interogarii.
Sintaxa unei comenzi SELECT care contine aceasta clauza este:
SELECT col1, . coln
FROM nume_tabela
GROUP BY nume_col
HAVING expresie;
Exemple: se grupeaza liniile din tabela Angajat dupa valorile din coloana depart care memoreaza numarul departamentului si se afiseaza departamentele care au 5 angajati.
Select depart, "nr" = count(*)
From Angajat
Group By depart
Having count(*) = 5
Se selecteaza informatia din tabela Compartimente.
SELECT id_comp, den_comp FROM compartimente
Rezultatul este cel de mai jos:
id_comp |
den_comp |
Vinzari |
|
Proiectare |
|
Preturi |
|
Contabilitate |
|
Secretariat |
|
Directori |
Se selecteaza informatia din tabela Angajati (angajatii lucreaza in diferite compartimente).
SELECT marca, nume, prenume, id_compartiment, salariu FROM angajati
marca |
nume |
prenume |
id_ compartiment |
salariu |
Popescu |
Ileana | |||
Ionescu |
Catalina | |||
Vasilescu |
Ion | |||
Popescu |
Eleonor | |||
Cristescu |
IOo | |||
Iona |
Claudia | |||
Stan |
Ilie | |||
Stanimir |
Valeriu |
Se selecteaza numai angajatii al caror nume incepe cu 'st'. Se foloseste operatorul Like.
SELECT marca, nume, prenume, id_compartiment, salariu
FROM angajati
WHERE (nume LIKE 'st%')
Rezultatul este cel de mai jos:
marca |
nume |
prenume |
id_ compartiment |
salariu |
Stan |
Ilie | |||
Stanimir |
Valeriu |
Se selecteaza campuri din cele doua tabele Angajati si Compartimente. Operatorul INNER JOIN realizeaza legatura 1:m existenta intre cele doua tabele.
SELECT compartimente.den_comp, angajati.nume, angajati.prenume
FROM angajati INNER JOIN compartimente ON
angajati.id_compartiment = compartimente.id_comp
ORDER BY den_comp
Rezultatul este cel de mai jos:
den_comp |
nume |
prenume |
Contabilitate |
Iona |
Claudia |
Preturi |
Cristescu |
Ion |
Proiectare |
Vasilescu |
Ion |
Proiectare |
Popescu |
Eleonor |
Secretariat |
Stan |
Ilie |
Secretariat |
Stanimir |
Valeriu |
Vinzari |
Popescu |
Ileana |
Vinzari |
Ionescu |
Catalina |
Comanda SELECT de mai jos numara angajatii din fiecare compartiment.
SELECT compartimente.den_comp, COUNT(angajati.marca) AS nr_angajati
FROM angajati INNER JOIN compartimente ON
angajati.id_compartiment = compartimente.id_comp
GROUP BY compartimente.den_comp
Rezultatul este cel de mai jos:
den_comp |
nr_angajati |
Contabilitate | |
Preturi | |
Proiectare | |
Secretariat | |
Vinzari |
Copyright © 2024 - Toate drepturile rezervate