Cum funcționează
Cerința b) e însuși motivul pentru care baza de date are două tabele. Filme nu conține denumirea
cinematografului, ci doar codul lui (C01). Dacă ar conține denumirea, aceasta s-ar repeta pe fiecare
film, iar o redenumire a cinematografului ar cere modificarea tuturor filmelor lui. Denumirea stă o
singură dată, în Cinematografe, și se aduce la nevoie prin idc.
Filme Cinematografe
titlu idc idc denumire
Interstellar C01 ─────────────► C01 Cinema City
Dune C02 ─────────────► C02 CineGold
Oppenheimer C01 ─────────────┘
Un cod care apare la mai multe filme (C01) trimite la același rând din Cinematografe, deci
denumirea se repetă în rezultat — corect, pentru că sunt filme diferite la același cinematograf.
AS cinematograf redenumește coloana în rezultat; altfel capul de tabel ar scrie „denumire", ceea ce
nu spune al cui e numele. ORDER BY nu era cerut — e adăugat pentru că o listă grupată pe
cinematografe se citește mult mai bine.
Explicația detaliată a joncțiunii, cu varianta scrisă cu virgulă, e la
problema #121.
a) Pragul din enunț
„Mai mare de 40" = > 40, strict. Un film cu biletul exact 40 nu intră. Vezi tabelul de formulări de
la problema #130.
Greșeli frecvente
>= în loc de > — intră și filmul cu biletul exact 40, dacă există.
SELECT f.titlu, f.idc la b) — afișezi codul C01, nu denumirea cerută.
- Joncțiune fără
ON — 10 filme × 5 cinematografe = 50 de rânduri.
WHERE pret_bilet > '40' — se compară un număr cu un șir; într-un câmp text, '5' > '40' ar fi
adevărat.
LEFT JOIN la b) — ar arăta și filmele fără cinematograf, cu denumirea goală. Nu e cerut aici,
dar e obligatoriu la problema #148.
- Aliasuri amestecate —
FROM Filme f ... ON Filme.idc = c.idc: în Oracle, după ce ai dat un
alias, numele complet al tabelului nu mai poate fi folosit.