OVH Cloud OVH Cloud

Une requête compliquée pour rien ?

8 réponses
Avatar
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)

8 réponses

Avatar
Sylvain Lafontaine
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" wrote in message
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)



Avatar
TigrouMeow
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" wrote in message
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)







Avatar
Philippe T [MS]
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" wrote in message
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" wrote in message
> 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)
>>
>
>




Avatar
Fred BROUARD
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 :)



Avatar
Sylvain Lafontaine
Vous avez le goût de jouer à Don Quichotte?

S. L.

"Fred BROUARD" wrote in message
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 :)






Avatar
Philippe T [MS]
Bonjour,

C'est vrai que c'est décevant de la part d'un enseignant de ne pas enseigner
les bonnes bases de SQL Server (au moins SQL 92) !!!

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

"Sylvain Lafontaine" <sylvain aei ca (fill the blanks, no spam please)>
wrote in message news:
Vous avez le goût de jouer à Don Quichotte?

S. L.

"Fred BROUARD" wrote in message
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 :)
>>
>




Avatar
Sylvain Lafontaine
C'est vrai que c'est décevant mais combattre cette chose ne pourrait servir
qu'à envenimer les relations entre l'étudiant et le professeur et le prix à
en payer retomberait probablement sur le premier, pas le deuxième.

La meilleure chose à faire dans ces cas là est probablement de vivre -
laisser vivre. Une fois le cours terminé, il sera toujours temps pour
l'élève de laisser derrière lui le supplément de bagage inutile.

Quant à l'option de vouloir changer le professeur, s'il n'a pas réussit à
s'améliorer lui-même depuis ces nombreuses années, je doute fort qu'il en
ait la capacité; quoique cela n'est pas nécessairement impossible.

S. L.

"Philippe T [MS]" wrote in message
news:
Bonjour,

C'est vrai que c'est décevant de la part d'un enseignant de ne pas
enseigner
les bonnes bases de SQL Server (au moins SQL 92) !!!

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

"Sylvain Lafontaine" <sylvain aei ca (fill the blanks, no spam please)>
wrote in message news:
Vous avez le goût de jouer à Don Quichotte?

S. L.

"Fred BROUARD" wrote in message
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 :)
>>
>








Avatar
Philippe T [MS]
Bonjour,

C'est certainement vrai. Peut-être par le biais d'une question bètement posé
au professeur sur les jointures INNER JOIN ???

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

"Sylvain Lafontaine" <sylvain aei ca (fill the blanks, no spam please)>
wrote in message news:
C'est vrai que c'est décevant mais combattre cette chose ne pourrait


servir
qu'à envenimer les relations entre l'étudiant et le professeur et le prix


à
en payer retomberait probablement sur le premier, pas le deuxième.

La meilleure chose à faire dans ces cas là est probablement de vivre -
laisser vivre. Une fois le cours terminé, il sera toujours temps pour
l'élève de laisser derrière lui le supplément de bagage inutile.

Quant à l'option de vouloir changer le professeur, s'il n'a pas réussit à
s'améliorer lui-même depuis ces nombreuses années, je doute fort qu'il en
ait la capacité; quoique cela n'est pas nécessairement impossible.

S. L.

"Philippe T [MS]" wrote in message
news:
> Bonjour,
>
> C'est vrai que c'est décevant de la part d'un enseignant de ne pas
> enseigner
> les bonnes bases de SQL Server (au moins SQL 92) !!!
>
> ----------------------------------------------------------------------
> Philippe TROTIN - Microsoft Service France
>
> "Sylvain Lafontaine" <sylvain aei ca (fill the blanks, no spam please)>
> wrote in message news:
>> Vous avez le goût de jouer à Don Quichotte?
>>
>> S. L.
>>
>> "Fred BROUARD" wrote in message
>> 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 l


es
>> > 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 :)
>> >>
>> >
>>
>>
>
>