Cum funcționează
Cerințele a) și b) diferă doar prin username
Aceeași listă, aceeași ordonare; la b) se adaugă cine joacă fiecare joc, informație care stă în
celălalt tabel. E cel mai curat exemplu de „ce aduce joncțiunea": nu schimbă numărul de rânduri (fiecare
joc are exact un jucător), doar adaugă o coloană.
Atenție totuși: dacă un joc ar avea idj necompletat — un joc neatribuit niciunui jucător — INNER JOIN l-ar arunca din rezultat. La a) apar toate jocurile, la b) unul mai puțin. Când conteaza să nu
pierzi nimic, LEFT JOIN Jucatori (vezi
problema #154).
ORDER BY se aplică pe rezultatul joncțiunii
Sortarea e ultima operație executată, după lipirea tabelelor și după filtrare. De aceea poate folosi
orice coloană din oricare dintre tabele, indiferent de ordinea în care le-ai scris în FROM.
Ordonare pe mai multe criterii, dacă vrei rezultat reproductibil la scoruri egale:
ORDER BY g.scor DESC, j.username
Fără al doilea criteriu, două jocuri cu același scor pot apărea în orice ordine — inclusiv diferită de
la o rulare la alta, pe același tabel.
scor number(5) — întreg
Cinci cifre, niciuna zecimală: scorurile sunt numere întregi. Ordonarea numerică pe un câmp întreg e
exactă; dacă scor ar fi fost text, '90' ar fi ieșit înaintea lui '100', pentru că se compară
caracter cu caracter.
Greșeli frecvente
ORDER BY scor fără DESC — ordine crescătoare, exact inversul cerinței.
ORDER BY DESC scor — inversat: mai întâi coloana, apoi direcția.
ORDER BY pus înaintea lui INNER JOIN — eroare de sintaxă. ORDER BY e ultima clauză.
- Scorul uitat din
SELECT la b) — cerința îl cere explicit („și scorul obținut").
- Joncțiune fără
ON — 8 jucători × 12 jocuri = 96 de rânduri, ordonate impecabil și complet
inutile.
ORDER BY 3 DESC (după poziția coloanei) — funcționează, dar se strică silențios dacă schimbi
ordinea coloanelor din SELECT.