Cum funcționează
a) MIN întoarce valoarea, nu rândul
MIN(pret_bilet) dă cât e cel mai mic preț, nu care film îl are. Dacă enunțul ar fi cerut și
titlul, ar fi fost nevoie de tiparul cu subinterogare de la
problema #127:
SELECT titlu, pret_bilet FROM Filme
WHERE pret_bilet = (SELECT MIN(pret_bilet) FROM Filme);
Diferența dintre cele două cerințe („afișați prețul minim" vs. „afișați filmul cu prețul minim") e
exact diferența dintre o agregare simplă și o subinterogare.
b) Un oraș poate avea mai multe cinematografe
„Cinematografele din București", la plural. Condiția WHERE c.oras = 'Bucuresti' prinde toate
cinematografele orașului, iar joncțiunea aduce filmele tuturor. Pe datele de test sunt două
(CineGold și Happy Cinema), cu patru filme în total.
Am adăugat c.denumire în SELECT, deși nu e cerută: fără ea, rezultatul e o listă de filme din care
nu se vede la care cinematograf e fiecare.
„București” scris fără diacritice
În enunț, orașul apare „București". În tabel poate fi Bucuresti. Comparația cu = cere potrivire
caracter cu caracter, deci 'București' nu găsește Bucuresti — zero rânduri, fără nicio eroare.
Regula, aceeași de la problema #132:
condiția se scrie ca valoarea din tabel. Varianta imună la diacritice:
WHERE c.oras LIKE 'Bucure%'
Greșeli frecvente
'București' cu diacritice, când în tabel e Bucuresti — zero rânduri, fără eroare.
SELECT titlu, MIN(pret_bilet) — eroare în Oracle; în MySQL/SQLite, minimul lângă un titlu
arbitrar.
- Filtrare pe
f.idc = 'C02' — codul nu apare în enunț; l-ai citit din date.
MIN(durata) în loc de MIN(pret_bilet) — se cere prețul minim, nu filmul cel mai scurt.
- Joncțiune uitată la b) —
oras nu există în Filme.
SELECT * după joncțiune — 10 coloane, în loc de cele două cerute.