Cum funcționează
Cele zece probleme de la DIVERTISMENT urmează tiparul întregului Subiect I: a) pe un tabel, b) pe
amândouă. Legătura se face prin idc — codul cinematografului, prezent și în Filme.
Când enunțul nu enumeră coloanele, se afișează tot rândul. ORDER BY titlu sortează alfabetic
crescător (ASC e implicit).
Un detaliu de sortare care surprinde: într-o bază cu diacritice, ordinea alfabetică depinde de
collation-ul serverului. „Ștefan" poate ajunge după „Zorba" dacă serverul sortează după codul
caracterului, nu după regulile limbii române. Nu e ceva ce se cere la atestat, dar explică rezultate
care par greșite.
b) Filtrarea după numele cinematografului
Titlul e în Filme, denumirea cinematografului e în Cinematografe. Deci joncțiune pe idc, apoi
WHERE pe c.denumire. Mecanismul complet, cu varianta scrisă cu virgulă în loc de INNER JOIN, e
la problema #121.
De ce nu merge fără joncțiune: în Filme există doar idc (C01), nu denumirea. O condiție
WHERE idc = 'Cinema City' compară un cod de 4 caractere cu un text de 11 — zero rânduri.
Se cere doar titlul, deci SELECT f.titlu. Dacă ai scris SELECT * după joncțiune, ai afișat
toate cele 10 coloane din ambele tabele.
Varianta cu subinterogare, la fel de corectă:
SELECT titlu FROM Filme
WHERE idc = (SELECT idc FROM Cinematografe WHERE denumire = 'Cinema City');
Greșeli frecvente
WHERE idc = 'Cinema City' — idc e codul, nu denumirea. Zero rânduri.
- Joncțiune fără
ON — 10 filme × 5 cinematografe = 50 de rânduri.
SELECT * la cerința b) — se cere doar titlul.
ORDER BY idf în loc de titlu — ordinea introducerii în tabel, nu ordine alfabetică.
'cinema city' cu literă mică — în Oracle, zero rânduri, fără eroare.
ORDER BY pus înaintea lui WHERE — eroare de sintaxă.