Bonjour,
Je suis en plein exo de requête SQL, chapitre finale sur les requêtes de sélection.
Je dois sélectionner dans la base les client ayant fais ou ayant en cours au moins 5 réservations, marqué “R” dans le champ Etat de la table Transaction. Le cours me semble demander la seconde methode, mais j’irais naturellement vers la première :
Requête n°1 :
select NumCl as [Numéro Client], NomCl as [Nom]
from Client C
where
(select count(*)
from Transaction T
where T.État = “R” and C.NumCl = T.NumCl) >= 5;
Requête n°2
select NomCl as [Nom du Client], count()
from Transaction T, Client C
where C.NumCl = T.NumCl and T.État = "R"
group by NumCl, NomCl
having count() >= 5
Ma question est assez simple : Est-ce que la première est juste ?
Je n’ai pas les moyens de tester (je n’ai pas de base à disposition), et bien que logiquement je n’y trouve rien à redire, ce ne serait pas la première fois que le lexique SQL irait contre ma logique.
Question subsidiaire : Je trouve la première plus élégante, enfin plus logique pour moi, mais elle fais faire deux requêtes. Laquelle serait la plus optimisée ? (dans l’optique où la première est juste). Si la mémoire utilisée est en fonction du produit cartésien induit par la requête, les deux seraient équivalentes ?