GNT sans publicité, site mobile, fonctionnalitées exclusives...

Une requête compliquée pour rien ?

Le
TigrouMeow
Bonjour,

J'ai eu un exam de SQL, et dans le corrigé la requète me parait plus
complexe qu'elle ne pourrait l'être. Je voudrais qu'on m'explique la
différence entre la mienne et celle du corrigée

Je pense pas que ça soit nécessaire de vous fournir le MLD vu
que la structure de la base est assez simple, vous devriez pas avoir
de problème à voir la réelle différence :)

Voici celle du corrigée :

select e.identif, nom
from etudiants e, est_affecter ea, matieres m, peut_assurer pa, professeurs
p
where e.identif = ea.identif and ea.code_mat = m.code_mat
and m.code_mat = pa.code_mat and pa.code_prof = p.code_prof
and p.code_prof = (select code_prof from professeurs where prenom_prof like
'j%');

Voici la mienne :

SELECT etudiants.identif, etudiants.nom
FROM etudiants, est_affecter, peut_assurer, professeurs
WHERE etudiants.identif = est_affecter.identif
AND est_affecter.code_mat = peut_assurer.code_mat
AND peut_assurer.code_prof = professeurs.code_prof
AND professeurs.nom_prof LIKE 'j%';

Ca fait quand même une requête de moins, une table de moins et une
condition de moins, pourtant le résultat est le même non ? Peut-être y'a
t-il un risque dans la mienne ?

Bref il doit bien y avoir une raison pour compliquer cette requète,
merci de m'éclaircir là dessus :)

--
Meow ;o)


--
Meow ;o)
Lire les 8 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Sylvain Lafontaine
Le #11417821
Non, vous avez raison, le corrigé de votre professeur est erroné pour ce qui
est de l'ajout de la table « matieres ». Il s'agit là d'une erreur très
fréquente que d'ailleurs il m'arrive de faire moi-même, par distraction,
dans les requêtes complexes.

Il a toutefois raison pour ce qui est du remplacement de la sous-requête sur
code_prof: votre code ne fonctionnera pas s'il y a plusieurs professeurs qui
correspondent au critère « like 'j%' ».

S. L.

"TigrouMeow" news:423c4bcc$0$22779$
Bonjour,

J'ai eu un exam de SQL, et dans le corrigé la requète me parait plus
complexe qu'elle ne pourrait l'être. Je voudrais qu'on m'explique la
différence entre la mienne et celle du corrigée...

Je pense pas que ça soit nécessaire de vous fournir le MLD vu
que la structure de la base est assez simple, vous devriez pas avoir
de problème à voir la réelle différence :)

Voici celle du corrigée :

select e.identif, nom
from etudiants e, est_affecter ea, matieres m, peut_assurer pa,
professeurs p
where e.identif = ea.identif and ea.code_mat = m.code_mat
and m.code_mat = pa.code_mat and pa.code_prof = p.code_prof
and p.code_prof = (select code_prof from professeurs where prenom_prof
like
'j%');

Voici la mienne :

SELECT etudiants.identif, etudiants.nom
FROM etudiants, est_affecter, peut_assurer, professeurs
WHERE etudiants.identif = est_affecter.identif
AND est_affecter.code_mat = peut_assurer.code_mat
AND peut_assurer.code_prof = professeurs.code_prof
AND professeurs.nom_prof LIKE 'j%';

Ca fait quand même une requête de moins, une table de moins et une
condition de moins, pourtant le résultat est le même non ? Peut-être y'a
t-il un risque dans la mienne ?

Bref il doit bien y avoir une raison pour compliquer cette requète,
merci de m'éclaircir là dessus :)

--
Meow ;o)


--
Meow ;o)



TigrouMeow
Le #11417811
Merci beaucoup pour cette réponse :)

"Sylvain Lafontaine" <sylvain aei ca (fill the blanks, no spam please)> a
écrit dans le message de news:
Non, vous avez raison, le corrigé de votre professeur est erroné pour ce
qui est de l'ajout de la table « matieres ». Il s'agit là d'une erreur
très fréquente que d'ailleurs il m'arrive de faire moi-même, par
distraction, dans les requêtes complexes.

Il a toutefois raison pour ce qui est du remplacement de la sous-requête
sur code_prof: votre code ne fonctionnera pas s'il y a plusieurs
professeurs qui correspondent au critère « like 'j%' ».

S. L.

"TigrouMeow" news:423c4bcc$0$22779$
Bonjour,

J'ai eu un exam de SQL, et dans le corrigé la requète me parait plus
complexe qu'elle ne pourrait l'être. Je voudrais qu'on m'explique la
différence entre la mienne et celle du corrigée...

Je pense pas que ça soit nécessaire de vous fournir le MLD vu
que la structure de la base est assez simple, vous devriez pas avoir
de problème à voir la réelle différence :)

Voici celle du corrigée :

select e.identif, nom
from etudiants e, est_affecter ea, matieres m, peut_assurer pa,
professeurs p
where e.identif = ea.identif and ea.code_mat = m.code_mat
and m.code_mat = pa.code_mat and pa.code_prof = p.code_prof
and p.code_prof = (select code_prof from professeurs where prenom_prof
like
'j%');

Voici la mienne :

SELECT etudiants.identif, etudiants.nom
FROM etudiants, est_affecter, peut_assurer, professeurs
WHERE etudiants.identif = est_affecter.identif
AND est_affecter.code_mat = peut_assurer.code_mat
AND peut_assurer.code_prof = professeurs.code_prof
AND professeurs.nom_prof LIKE 'j%';

Ca fait quand même une requête de moins, une table de moins et une
condition de moins, pourtant le résultat est le même non ? Peut-être y'a
t-il un risque dans la mienne ?

Bref il doit bien y avoir une raison pour compliquer cette requète,
merci de m'éclaircir là dessus :)

--
Meow ;o)


--
Meow ;o)







Philippe T [MS]
Le #11417781
Bonjour,

De plus, pour compléter la syntaxe SQL a utiliser pour des jointures entre
tables est plutôt comme ceci :

SELECT etudiants.identif, etudiants.nom
FROM etudiants
INNER JOIN est_affecter ON etudiants.identif = est_affecter.identif
INNER JOIN peut_assurer ON est_affecter.code_mat = peut_assurer.code_mat
INNER JOIN professeurs ON peut_assurer.code_prof = professeurs.code_prof
WHERE professeurs.nom_prof LIKE 'j%';

Attention la claus LIKE peut être relativement consommatrice (mais bon
lorsque l'on ne peut pas faire autrement, on s'en contente !!! :-) )

----------------------------------------------------------------------
Philippe TROTIN - Microsoft Service France

"TigrouMeow" news:423c5abb$0$16915$
Merci beaucoup pour cette réponse :)

"Sylvain Lafontaine" <sylvain aei ca (fill the blanks, no spam please)> a
écrit dans le message de news:
> Non, vous avez raison, le corrigé de votre professeur est erroné pour ce
> qui est de l'ajout de la table « matieres ». Il s'agit là d'une erreur
> très fréquente que d'ailleurs il m'arrive de faire moi-même, par
> distraction, dans les requêtes complexes.
>
> Il a toutefois raison pour ce qui est du remplacement de la sous-requête
> sur code_prof: votre code ne fonctionnera pas s'il y a plusieurs
> professeurs qui correspondent au critère « like 'j%' ».
>
> S. L.
>
> "TigrouMeow" > news:423c4bcc$0$22779$
>> Bonjour,
>>
>> J'ai eu un exam de SQL, et dans le corrigé la requète me parait plus
>> complexe qu'elle ne pourrait l'être. Je voudrais qu'on m'explique la
>> différence entre la mienne et celle du corrigée...
>>
>> Je pense pas que ça soit nécessaire de vous fournir le MLD vu
>> que la structure de la base est assez simple, vous devriez pas avoir
>> de problème à voir la réelle différence :)
>>
>> Voici celle du corrigée :
>>
>> select e.identif, nom
>> from etudiants e, est_affecter ea, matieres m, peut_assurer pa,
>> professeurs p
>> where e.identif = ea.identif and ea.code_mat = m.code_mat
>> and m.code_mat = pa.code_mat and pa.code_prof = p.code_prof
>> and p.code_prof = (select code_prof from professeurs where prenom_prof
>> like
>> 'j%');
>>
>> Voici la mienne :
>>
>> SELECT etudiants.identif, etudiants.nom
>> FROM etudiants, est_affecter, peut_assurer, professeurs
>> WHERE etudiants.identif = est_affecter.identif
>> AND est_affecter.code_mat = peut_assurer.code_mat
>> AND peut_assurer.code_prof = professeurs.code_prof
>> AND professeurs.nom_prof LIKE 'j%';
>>
>> Ca fait quand même une requête de moins, une table de moins et une
>> condition de moins, pourtant le résultat est le même non ? Peut-être


y'a
>> t-il un risque dans la mienne ?
>>
>> Bref il doit bien y avoir une raison pour compliquer cette requète,
>> merci de m'éclaircir là dessus :)
>>
>> --
>> Meow ;o)
>>
>>
>> --
>> Meow ;o)
>>
>
>




Fred BROUARD
Le #11416281
C'est assez lamentable de voir des professeurs continuer à enseigner les
jointures dans le WHERE !
Cette syntaxe a été bannie à partir de la norme de 1992 qui précise les INNER et
OUTER join entre autres. Cela fait donc plus de 13 ans...
Quel âge à votre prof ? Est-il a ce point gâteux que dans les années 90 il n'a
pas réussit à se mettre à niveau ?

Je suis vivement intéressé de connaître l'établissement que vous fréquentez à
défaut du nom du prof, ce qui pourrait passer pour une délation.

A +


--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************

TigrouMeow a écrit:
Bonjour,

J'ai eu un exam de SQL, et dans le corrigé la requète me parait plus
complexe qu'elle ne pourrait l'être. Je voudrais qu'on m'explique la
différence entre la mienne et celle du corrigée...

Je pense pas que ça soit nécessaire de vous fournir le MLD vu
que la structure de la base est assez simple, vous devriez pas avoir
de problème à voir la réelle différence :)

Voici celle du corrigée :

select e.identif, nom
from etudiants e, est_affecter ea, matieres m, peut_assurer pa, professeurs
p
where e.identif = ea.identif and ea.code_mat = m.code_mat
and m.code_mat = pa.code_mat and pa.code_prof = p.code_prof
and p.code_prof = (select code_prof from professeurs where prenom_prof like
'j%');

Voici la mienne :

SELECT etudiants.identif, etudiants.nom
FROM etudiants, est_affecter, peut_assurer, professeurs
WHERE etudiants.identif = est_affecter.identif
AND est_affecter.code_mat = peut_assurer.code_mat
AND peut_assurer.code_prof = professeurs.code_prof
AND professeurs.nom_prof LIKE 'j%';

Ca fait quand même une requête de moins, une table de moins et une
condition de moins, pourtant le résultat est le même non ? Peut-être y'a
t-il un risque dans la mienne ?

Bref il doit bien y avoir une raison pour compliquer cette requète,
merci de m'éclaircir là dessus :)



Sylvain Lafontaine
Le #11416241
Vous avez le goût de jouer à Don Quichotte?

S. L.

"Fred BROUARD" news:
C'est assez lamentable de voir des professeurs continuer à enseigner les
jointures dans le WHERE !
Cette syntaxe a été bannie à partir de la norme de 1992 qui précise les
INNER et OUTER join entre autres. Cela fait donc plus de 13 ans...
Quel âge à votre prof ? Est-il a ce point gâteux que dans les années 90 il
n'a pas réussit à se mettre à niveau ?

Je suis vivement intéressé de connaître l'établissement que vous
fréquentez à défaut du nom du prof, ce qui pourrait passer pour une
délation.

A +


--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************

TigrouMeow a écrit:
Bonjour,

J'ai eu un exam de SQL, et dans le corrigé la requète me parait plus
complexe qu'elle ne pourrait l'être. Je voudrais qu'on m'explique la
différence entre la mienne et celle du corrigée...

Je pense pas que ça soit nécessaire de vous fournir le MLD vu
que la structure de la base est assez simple, vous devriez pas avoir
de problème à voir la réelle différence :)

Voici celle du corrigée :

select e.identif, nom
from etudiants e, est_affecter ea, matieres m, peut_assurer pa,
professeurs p
where e.identif = ea.identif and ea.code_mat = m.code_mat
and m.code_mat = pa.code_mat and pa.code_prof = p.code_prof
and p.code_prof = (select code_prof from professeurs where prenom_prof
like
'j%');

Voici la mienne :

SELECT etudiants.identif, etudiants.nom
FROM etudiants, est_affecter, peut_assurer, professeurs
WHERE etudiants.identif = est_affecter.identif
AND est_affecter.code_mat = peut_assurer.code_mat
AND peut_assurer.code_prof = professeurs.code_prof
AND professeurs.nom_prof LIKE 'j%';

Ca fait quand même une requête de moins, une table de moins et une
condition de moins, pourtant le résultat est le même non ? Peut-être y'a
t-il un risque dans la mienne ?

Bref il doit bien y avoir une raison pour compliquer cette requète,
merci de m'éclaircir là dessus :)






Publicité
Suivre les réponses
Poster une réponse
Anonyme