Cum funcționează
a) ORDER BY cu două coloane
ORDER BY nume, prenume sortează crescător după nume, iar acolo unde numele coincide, decide
prenumele. Într-un tabel de angajați apar aproape sigur doi „Popescu"; cu un singur criteriu,
ordinea lor rămâne la voia serverului, iar „ordine alfabetică" nu mai e garantată.
ORDER BY se scrie ultimul în interogare, după FROM și după WHERE. Crescător este implicit
(ASC); pentru descrescător, DESC — vezi
problema #129.
Se poate ordona și după o coloană care nu e afișată (ORDER BY salariul cu SELECT nume): sortarea
se face pe rânduri, nu pe ce se vede.
b) COUNT după joncțiune
Aceeași structură ca la problema #122,
doar că se numără în loc să se afișeze: lipești tabelele, filtrezi departamentul, numeri ce a rămas.
Pe datele de test, Financiar are 3 angajați.
Varianta cu subinterogare, fără joncțiune, dă exact același rezultat:
SELECT COUNT(*) FROM Angajati
WHERE idd = (SELECT idd FROM Departamente WHERE denumire = 'Financiar');
Amândouă sunt corecte. Prima e mai scurtă când ai nevoie și de coloane din al doilea tabel; a doua e
mai clară când nu ai.
Greșeli frecvente
ORDER BY pus înaintea lui WHERE — eroare de sintaxă. Ordinea e fixă:
SELECT → FROM → JOIN → WHERE → GROUP BY → ORDER BY.
- Ordonare doar după
prenume — „ordine alfabetică" la o listă de persoane înseamnă nume, apoi
prenume.
ORDER BY 1 (după poziția coloanei) — funcționează, dar dacă schimbi coloanele din SELECT,
sortarea se mută în altă parte fără să observi.
COUNT(*) cu WHERE d.denumire = 'financiar' — în Oracle, literă mică înseamnă zero rânduri.
- Numărare fără joncțiune, pe
idd = 'D02' — merge pe datele de test, dar codul
departamentului nu e dat în enunț; e o valoare pe care ai ghicit-o.