Page 1 sur 1
Sortie des sentiers battus en SQL
Publié : 22 juin 2015 23:45
par RobinFrcd
Bonsoir,
Passant l'épreuve d'info X-ENS dans deux jours, je voulais vérifier un point du programme (PSI) en informatique par rapport à la jointure en SQL.
La syntaxe de base est :
Code : Tout sélectionner
SELECT ... FROM <table gauche> JOIN <table droite> ON <condition de jointure>
Mais voilà, je n'ai jamais été très fan des jointures avec cette syntaxe et j'utilise une autre syntaxe depuis longtemps, que j'ai d'ailleurs employée aux autres épreuves écrites des autres concours, la voici.
On considère donc deux tables, disons:
Films: id, categorie(int), titre, date
Categories: id, titre
Disons que je veuille les titres/date des films d'action :
Code : Tout sélectionner
SELECT Films.titre, Films.date FROM Films, Categories WHERE Films.categorie = Categories.id AND Categories.titre='Action'
Alors je n'utilise pas le JOIN du programme, mais cette syntaxe fonctionne. Pour autant, est-ce qu'on me comptera une telle requête comme fausse ? Faut-il nécessairement utiliser le JOIN ?
Quelqu'un de bien renseigné pourrait-il m'en dire plus ?
Merci d'avance,
Re: Sortie des sentiers battus en SQL
Publié : 23 juin 2015 00:15
par train epicycloidal
http://openclassrooms.com/courses/intro ... ntures-sql
Ta syntaxe ne sort pas réellement des sentiers battus et est couramment utilisée.
Il semblerait qu’il s’agisse d’une ancienne syntaxe, sans doute moins optimisée que la nouvelle.
Il est alors peu recommandable de ne pas se plier aux normes actuelles.
Re: Sortie des sentiers battus en SQL
Publié : 23 juin 2015 12:34
par babafou
RobinFrcd a écrit :Bonsoir,
Passant l'épreuve d'info X-ENS dans deux jours, je voulais vérifier un point du programme (PSI) en informatique par rapport à la jointure en SQL.
La syntaxe de base est :
Code : Tout sélectionner
SELECT ... FROM <table gauche> JOIN <table droite> ON <condition de jointure>
Mais voilà, je n'ai jamais été très fan des jointures avec cette syntaxe et j'utilise une autre syntaxe depuis longtemps, que j'ai d'ailleurs employée aux autres épreuves écrites des autres concours, la voici.
On considère donc deux tables, disons:
Films: id, categorie(int), titre, date
Categories: id, titre
Disons que je veuille les titres/date des films d'action :
Code : Tout sélectionner
SELECT Films.titre, Films.date FROM Films, Categories WHERE Films.categorie = Categories.id AND Categories.titre='Action'
Alors je n'utilise pas le JOIN du programme, mais cette syntaxe fonctionne. Pour autant, est-ce qu'on me comptera une telle requête comme fausse ? Faut-il nécessairement utiliser le JOIN ?
Quelqu'un de bien renseigné pourrait-il m'en dire plus ?
Merci d'avance,
Je ne saurais dire si l'utilisation de cette syntaxe est pénalisante mais il est trivial de la transformer en jointure propre :
Code : Tout sélectionner
SELECT Films.titre, Films.date
FROM Films
JOIN Categories ON Films.categorie = Categories.id
WHERE Categories.titre='Action'
L'avantage de cette syntaxe est de bien séparer la ou les conditions de jointure des conditions de sélection, ce qu'on voit bien dans cet exemple.
Re: Sortie des sentiers battus en SQL
Publié : 23 juin 2015 23:32
par CendreWapiti
Tout est dans la complexité de ta requête.
La solution naïve que tu utilise a une complexité en n² où n est la taille de ton tableau SQL. En fait c'est un produit cartésien.
La solution avec JOIN est plus efficace, complexité en n*log(n).
C'est radicalement différent. Dans le premier cas tu réalise un produit cartésien, alors que dans le deuxième c'est une vraie jointure.
Alors oui pour des tableaux de 100 entrées la différence est minime, mais lorsqu'il s'agit de traiter des tableaux de taille 10000 c'est crucial.
Après cela est-il pénalisable :
oui et non. La jointure est plus efficace et figure explicitement au programme, mais le produit cartésien aussi. Le fait est que ce n'est pas la même opération qui réellement réalisée. Si on te demande une solution efficace => JOIN
Re: Sortie des sentiers battus en SQL
Publié : 24 juin 2015 22:22
par RobinFrcd
Bonsoir et merci pour vos réponses.
Très bien, j'ignorais complètement la différence de complexité entre les deux requêtes !
Dans tous les cas, sans surprise, il n'y a pas eu de SQL à l'épreuve de l'X. Mais c'est toujours bon à savoir pour la suite.
Bonne soirée à tous.