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

Langage SQL Discussion :

Jointures naturelles (Question)


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2011
    Messages : 9
    Points : 16
    Points
    16
    Par défaut Jointures naturelles (Question)
    Bonjour,

    Peut-on combiner une jointure naturelle avec une jointure externe? Du genre: <Table1> LEFT JOIN <Table 2> ON <condition> NATURAL JOIN <Table 3>.

    Merci!

  2. #2
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    D'une manière générale, évite le NATURAL JOIN. Il est bien plus clair pour celui qui reprend le code plus tard de lire la condition de jointure en clair :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FROM table1 t1
    INNER JOIN table2 t2 ON t2.col2 = t1.col1

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 920
    Points : 51 712
    Points
    51 712
    Billets dans le blog
    6
    Par défaut
    Le NATURAL JOIN est une vaste connerie que seul MySQL a implémenté.
    Evitez-le absolument si vous ne voulez pas voir votre appli se planter un jour ou l'autre !

    Voici ce que je dit dans mon livre sur SQL :
    "
    Remarque
    Si vous n’avez pas respecté les règles de la modélisation de données, notamment en faisant en sorte que chaque information au sein du système d’information ait un nom unique, alors il vous sera impossible d’utiliser la jointure naturelle.
    En outre, la jointure naturelle n’est pas toujours adéquate. Elle ne peut être proprement mise en œuvre que s’il n’existe toujours qu’une seule possibilité de jointure entre deux tables, alors que la réalité nous montre que cela n’est pas systématiquement vrai.
    "

    Je rajouterais qu'en sus :
    1) elle s=ne sait faire que de l'équi jointure alors qu'il existe de nombreuses autres possibilité de jointure (thêta jointures)
    2) l'ajout d'une colonne dans une table avec un nom identique à une autre colonne d'une table peut provoquer des erreurs de jointures dans des requêtes déjà écrite !

    Notez que seul MySQL cet ersatz de SGBDR a implémenté le NATURAL JOIN, ce que les tous les grands éditeurs ont fuit ! À lire : http://blog.developpez.com/sqlpro/p9...oudre_aux_yeux

    A +

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 286
    Points : 12 991
    Points
    12 991
    Par défaut
    Bonjour,
    Citation Envoyé par SQLpro Voir le message
    Le NATURAL JOIN est une vaste connerie que seul MySQL a implémenté.
    Je l'ai vu aussi dans PostGresQL, comme quoi c'est contagieux !

    Tatayo.

  5. #5
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 170
    Points : 7 422
    Points
    7 422
    Billets dans le blog
    1
    Par défaut
    Il me semble d'ailleurs que PostGre l'a implémenté en premier.

    Mais en effet, le jour où tu te dis "tiens, je vais ajouter un horodatage dans mes tables"
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    alter table table1 add datmod datetime getdate();
    alter table table2 add datmod datetime getdate();
    alter table table3 add datmod datetime getdate();
    ...
    alter table tableX add datmod datetime getdate();

    Bouh ! Y'a plus une seule requête qui marche !

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    C'est aussi implémenté chez Oracle, mais je partage l'avis de SQLPro quant à leur utilisation plus piégeuse que bénéfique.

Discussions similaires

  1. Jointure Naturelle (Champs null)
    Par BloodH dans le forum Langage SQL
    Réponses: 9
    Dernier message: 13/02/2013, 15h50
  2. [VxiR2] Lier 2 fournisseurs comme jointure naturelle ?
    Par ctobini dans le forum Deski
    Réponses: 5
    Dernier message: 27/01/2011, 16h22
  3. composant tMap et jointure naturelle ( NATURAL JOIN)
    Par jeanphi45 dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 25/03/2010, 18h51
  4. jointure naturelle en sql
    Par vbnetnet dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/05/2009, 18h08
  5. requête avec jointure naturelle, ou un truc comme ça.
    Par JackBeauregard dans le forum Requêtes
    Réponses: 2
    Dernier message: 30/06/2006, 13h51

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