B’soir ! :hello:
Je passe mon concours dans deux jours, du coup je me recoltine les annales.
J’ai essayé de faire ce que je pouvais mais j’aimerais bien un coup de main pour rendre les requêtes plus propres, plus efficaces, etc.
Je redonne le lien vers l’énoncé[/url] ainsi qu’un lien vers le [url=http://mandarzzz.free.fr/upload/archidur.sql]dump de la base que j’ai créée sous MySQL pour faire mes tests.
Je poste aussi ce que j’ai fait (il s’agit de la première partie de l’exercice 1) :
– Donner les projets (CodeProjet, NomClient) de chacun des architectes du cabinet
[color=blue;font-weight:bold]SELECT[/color] CodeProjet, NomClient, a.CodeArchi
FROM PROJET p, CLIENT c, ARCHITECTE a
WHERE p.CodeArchi = a.CodeArchi AND p.NumClient = c.CodeClient
ORDER BY CodeArchi;
– Question 2
– Donner le code du projet de plus haut budget
[color=blue;font-weight:bold]SELECT[/color] CodeProjet
FROM PROJET WHERE MtBudget IN ([color=blue;font-weight:bold]SELECT[/color] MAX(MtBudget) FROM PROJET); – Question 3
– Donner le nombre de clients par architecte
[color=blue;font-weight:bold]SELECT[/color] CodeArchi, COUNT(DISTINCT NumClient)
FROM PROJET GROUP BY CodeArchi;
– Question 4 modifiée pour pouvoir être testée
– Donner les projets (CodeProjet, MtBudget) ayant plus de 2 critères d’optimisation renseignés et ayant une moyenne de coefficients supérieurs à 6
[color=blue;font-weight:bold]SELECT[/color] p.CodeProjet, MtBudget
FROM PROJET p, OPTIMISATION o
WHERE p.CodeProjet = o.CodeProjet
GROUP BY o.CodeProjet
HAVING COUNT(CodeCritere) >= 2 AND AVG(Coeff) >= 6;
– Question 5
– Donner les critères d’optimisation communs aux projets de codes A13 et B25
[color=blue;font-weight:bold]SELECT[/color] NomCritere
FROM CRITERE WHERE CodeCritere IN ( [color=blue;font-weight:bold]SELECT[/color] CodeCritere
FROM Optimisation WHERE CodeProjet = ‘A13’
INTERSECT
[color=blue;font-weight:bold]SELECT[/color] CodeCritere
FROM Optimisation WHERE CodeProjet = ‘B25’
);
– Le problème c’est que INTERSECT fonctionne pas sous MySQL donc c’est mort pour mes tests…
– Question 6
– Donner les clients qui n’ont été suivis que par l’architecte numéro 3
[color=blue;font-weight:bold]SELECT[/color] PrenomClient, NomClient
FROM CLIENT, PROJET
WHERE CodeClient = NumClient AND CodeArchi = 3 AND NumClient NOT IN ( [color=blue;font-weight:bold]SELECT[/color] NumClient
FROM PROJET WHERE CodeArchi <> 3
);
– Question 7
– Donner les requêtes qui sont concernés par tous les critères d’optimisation
[color=blue;font-weight:bold]SELECT[/color] CodeProjet
FROM OPTIMISATION HAVING COUNT(DISTINCT CodeCritere) IN ( [color=blue;font-weight:bold]SELECT[/color] COUNT(CodeCritere)
FROM CRITERE );
Merci beaaaaucoup d’avance à ceux qui jetteront un coup d’oeil.
C’est assez important pour moi (le temps imparti pour ces requêtes le jour du concours, l’année dernière était de 1 heure).
Précisions :
Alors j’ai continué à y réfléchir et quelques points précis m’intéressent :
- (Q1) Le "ORDER BY" est-il nécessaire selon vous ?
- (Q2) Y-a-t’il un moyen de remplacer le “IN” par une égalité ou quelque chose d’équivalent puisque je suis sûr qu’il n’y aura qu’un seul résultat ?
- (Q5) La syntaxe d’INTERSECT est-elle bonne ? {il me faut du SQL standard}
- (Q6) Est-ce qu’un MINUS ne pourrait pas être utile ?
- (Q7) Il n’y a pas un mot clé adapté ?Bien-sûr, toute remarque à propos de ma syntaxe me sera utile. N’hésitez pas à critiquer quitte à lancer une discussion, le but c’est que je reprenne un petit peu mes marques afin de pouvoir être efficace en SQL ANSI.