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

Requêtes MySQL Discussion :

INNER JOIN ou WHERE


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 300
    Par défaut INNER JOIN ou WHERE
    Bonjour,

    je souhaiterai savoir dans le cas ou les deux choix sont possibles, quel est la solution à adopter ?

    INNER JOIN ou WHERE

    Pour quels raisons ?
    Est-ce valable pour tout type d'action ? (SELECT, DELETE, etc..)

    Merci de votre aide.


    EDIT:
    Est-il possible d'avoir un INNER JOIN dans un delete ?
    Car j'ai voulue le faire avec cette requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM zones_informations, jointure_gz_informations USING zones_informations, jointure_gz_informations WHERE id=id_z_info AND ordre=4 AND id_g_info=1
    Par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM zones_informations z_i INNER JOIN jointure_gz_informations j_z_i ON z_i.id=j_z_i.id_z_info WHERE j_z_i.ordre=4 AND j_z_i.id_z_info=1
    Sans succès.

  2. #2
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Bonjour,

    INNER JOIN et WHERE (en algèbre relationnelle jointure et sélection) sont des opérateurs différents.

    Cf ftp://ftp2.developpez.be/developps/php/mysql.pdf (chapitre Théorie des bases relationnelles), http://sqlpro.developpez.com/cours/sqlaz/jointures/ et http://sqlpro.developpez.com/cours/sqlaz/select/#L3

    En ce qui concerne la syntaxe du DELETE multi-tables tout est dans le manuel MySQL.

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 300
    Par défaut
    En cours j'ai appris que cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT champ FROM table1 INNER JOIN table2 ON table1.id=table2.id
    =
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT champ FROM table1, table2 WHERE table1.id=table2.id
    Est-ce faut ?

  4. #4
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Par défaut
    Au niveau résultat, c'est exactement la même chose. Au niveau propreté, il est préférable d'avoir recours au INNER JOIN (pour des requêtes complexes, on voit clairement comment sont faites les jointures).

    Cette question revient souvent, il faudrait peut-être la rajouter à une FAQ. Qu'est-ce que t'en penses Maximilian?
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 300
    Par défaut
    Merci pour l'info.
    Donc je n'avais pas tout faut. Sauf que pour le DELETE ce n'est pas possible.
    Merci

  6. #6
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    OK, j'avais mal compris la question.

    Les deux requêtes que tu cites sont deux jointures et oui, elles renvoient le même résultat.

    En effet, il vaut mieux utiliser la syntaxe normalisée INNER JOIN (voir http://sqlpro.developpez.com/cours/s...ntures/#L1.2).

    Citation Envoyé par pcaboche
    Cette question revient souvent, il faudrait peut-être la rajouter à une FAQ. Qu'est-ce que t'en penses Maximilian?
    Bonne idée, tu t'y colles pour la rédaction de la Q/R ?

    Citation Envoyé par Thierry8
    Sauf que pour le DELETE ce n'est pas possible.
    Merci
    Si, comme précisé dans la doc il suffit de préciser après le DELETE la table sur laquelle va porter la suppression.

  7. #7
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    300
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 300
    Par défaut
    Citation Envoyé par Maximilian
    Citation Envoyé par Thierry8
    Sauf que pour le DELETE ce n'est pas possible.
    Merci
    Si, comme précisé dans la doc il suffit de préciser après le DELETE la table sur laquelle va porter la suppression.
    Oui j'ai bien lu la doc. (avant d'avoir posté d'ailleurs) mais je n'ai pas réussi à transformer ma requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM zones_informations, jointure_gz_informations USING zones_informations, jointure_gz_informations WHERE id=id_z_info AND ordre=4 AND id_g_info=1
    sous forme INNER JOIN (comme indiqué tout en haut)

    C'est pour cela que j'ai demandé, si c'était possible car j'ai une erreur pas très explicite à chaque foi. En revanche la requete que j'ai indiqué fonctionne.

  8. #8
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Par défaut
    Citation Envoyé par Thierry8
    C'est pour cela que j'ai demandé, si c'était possible car j'ai une erreur pas très explicite à chaque foi. En revanche la requete que j'ai indiqué fonctionne.
    Tu t'es trompé en essayant d'utiliser USING. USING te permet de faire des jointures en se basant sur les noms des colonnes, mais dans ton cas, ce n'est pas ce qu'il faut faire.

    Utilise simplement un INNER JOIN ... ON ... :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DELETE FROM zones_informations
     
    INNER JOIN jointure_gz_informations 
    ON zones_informations.id = jointure_gz_informations.id_z_info
     
    WHERE <conditions de restriction>


    Citation Envoyé par Maximilian
    Bonne idée, tu t'y colles pour la rédaction de la Q/R ?
    Pas de problème: je prendrai quelques minutes prochainement pour t'écrire ça et je t'enverrai le tout pour que tu l'intègres à la FAQ.
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Performances : INNER JOIN vs WHERE
    Par zeclubbeur dans le forum Débuter
    Réponses: 2
    Dernier message: 12/02/2012, 17h52
  2. inner join ou where ?
    Par csszzen dans le forum Langage SQL
    Réponses: 14
    Dernier message: 15/03/2007, 16h53
  3. Jointures : INNER JOIN vs WHERE
    Par vic dans le forum Langage SQL
    Réponses: 4
    Dernier message: 09/02/2006, 11h05
  4. INNER JOIN et WHERE...=
    Par say dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/06/2005, 15h34
  5. INNER JOIN ou WHERE ...
    Par maitrebn dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 19/10/2004, 13h14

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