IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

DB2 Discussion :

SELECT imbriqué ou jointure reflexive


Sujet :

DB2

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Maroc

    Informations professionnelles :
    Activité : Freelancer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Par défaut SELECT imbriqué ou jointure reflexive
    Bonjour,
    je suis tombé dans le cas où j'ai besoin de faire une jointure sur la même table deux fois ( dans la même requête). ma question est: en matière de performance, est ce qu'il vaut mieux instancier la même table deux fois dans la clause FROM ou bien faire un SELECT imbriqué et de joindre ma table avec le SELECT imbriqué:
    du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    1ère solution:
     
    SELECT *
    FROM TABLE1 t1, TABLE1 t2
    WHERE t1.champ1=t2.champ2
    --AND CONDITIONS...
     
    2ème solution
    SELECT *
    FROM TABLE1 t1, ( SELECT champ2 FROM TABLE1 t2 WHERE --CONDITIONS)
    WHERE t1.champ1=t2.champ2
    --and CONDITIONS.....
    Merci pour vos réponses
    Mes articles, Mon Blog

    Rubrique Jasper/iReport :
    ------- Forum Jasper --------
    ----- FAQ Jasper/iReport -----


  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Par défaut Join
    J'utiliserais la clause JOIN sur les critères de rapprochement des 2 tables car le fait de placer les critères sur le prédicat WHERE relève d'une méthode ancienne et probablement moins performante.
    Sur le WHERE, et dans la mesure du possible, je ne placerais que les valeurs littérales de comparaison, par ex.
    WHERE SOCIETE = 10 AND DATEx = Date('20070130'), etc.

    En outre, un composant subselect est toujours pénalisant et j'essaierais de l'éviter.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT *
    FROM TABLE1 t1 JOIN TABLE1 t2
    ON t1.champ1=t2.champ2
    WHERE ...
    --AND CONDITIONS...

  3. #3
    jab
    jab est déconnecté
    Rédacteur
    Avatar de jab
    Homme Profil pro
    SharePoint developpeur
    Inscrit en
    Février 2004
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : SharePoint developpeur
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 1 173
    Par défaut
    D'accord avec Mercure je pense que la jointure est le moyen le plus rapide mais tu devrais malgré tout visualiser le ce qui se passe en interne en utilisant l'éditeur de commande. On est parfois très surpris. Jette un oeil sur mon article sur l'optimisation http://jab.developpez.com/tutoriels/db2/optimisation/

    L'utilisation de JOIN est plus clair bien que je pense que le moteur va traiter les 2 façon de faire le join de la même manière. Par contre si tu peux évite le * qui en définitive est souvant la cause de problème de performance. Sauf évidemment si tu as besoin de tout les champs.

    Citation Envoyé par Mercure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT *
    FROM TABLE1 t1 JOIN TABLE1 t2
    ON t1.champ1=t2.champ2
    WHERE ...
    --AND CONDITIONS...

  4. #4
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Maroc

    Informations professionnelles :
    Activité : Freelancer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Par défaut
    c'est quoi la différence entre JOIN et INNER JOIN?
    Mes articles, Mon Blog

    Rubrique Jasper/iReport :
    ------- Forum Jasper --------
    ----- FAQ Jasper/iReport -----


  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 133
    Par défaut
    Citation Envoyé par JauB
    c'est quoi la différence entre JOIN et INNER JOIN?
    Aucune, inner est facultatif, voir http://sql.developpez.com/sqlaz/jointures/#L2

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Par défaut
    Jaub,

    Sous quel OS travailles-tu ?

Discussions similaires

  1. [INSERT][SELECT] insert avec un select imbriqué
    Par narmataru dans le forum SQL
    Réponses: 11
    Dernier message: 06/03/2013, 03h04
  2. [MySQL] SELECT imbriqué et jointure
    Par tapi21 dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 01/03/2013, 20h49
  3. Jointure, index et select imbriqué
    Par Knonix dans le forum SQL
    Réponses: 8
    Dernier message: 03/07/2008, 18h25
  4. Requetes imbriquées et jointures
    Par Emile Le Tueur* dans le forum Requêtes
    Réponses: 4
    Dernier message: 31/03/2004, 23h12
  5. SYBASE SELECT imbriqué clause FROM
    Par Nicolas Martel dans le forum Sybase
    Réponses: 2
    Dernier message: 19/11/2003, 15h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo