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 :

Différence de calcul entre deux techniques de jointure


Sujet :

Langage SQL

  1. #1
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 039
    Points
    6 039
    Par défaut Différence de calcul entre deux techniques de jointure
    Bonjour,
    J'aurais voulu savoir si dans Sybase ces deux requêtes équivalent en terme de résultat sont traité de la même manière.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT * FROM maTable1, maTable2
    WHERE maTable1.monChamp = maTable2.monChamp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM maTable1
      INNER JOIN maTable2
        ON maTable1.monChamp = maTable2.monChamp
    En faite, je cherche les arguments béton.

    Merci
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    C'est pareil.
    Pour les arguments bétons, se référer à la norme SQL-92.

  3. #3
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 039
    Points
    6 039
    Par défaut
    Citation Envoyé par Waldar Voir le message
    C'est pareil.
    Pour les arguments bétons, se référer à la norme SQL-92.
    Merci
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  4. #4
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 039
    Points
    6 039
    Par défaut
    Bonjour,
    Je reviens sur ça parce que je suis tombé sur un cas ou ces deux types de jointure ne donne pas forcément le même résultat.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * T_1 AS T1
      LEFT JOIN T_2 AS T2
        ON T1.C1 = T2.C1
    Dans le cas si dessus, si dans T_1.C1 il y a une valeur null alors elle ramene aucune ligne. Alors que la requette c-dessous oui.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT * FROM T1,T2
    WHERE T1.C1 *= T2.C1
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bah c'est normal c'est une jointure externe vs jointure interne.
    http://sqlpro.developpez.com/cours/sqlaz/jointures/

  6. #6
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    La syntaxe pour les jointures externes c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *
    FROM A
        LEFT OUTER JOIN B
        ON A.id = B.id
    ~ Lola ~

  7. #7
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 039
    Points
    6 039
    Par défaut
    Citation Envoyé par lola06 Voir le message
    La syntaxe pour les jointures externes c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *
    FROM A
        LEFT OUTER JOIN B
        ON A.id = B.id
    il me semble que LEFT JOIN et LEFT OUTER JOIN soit la même chose.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  8. #8
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 039
    Points
    6 039
    Par défaut
    Citation Envoyé par punkoff Voir le message
    bah c'est normal c'est une jointure externe vs jointure interne.
    http://sqlpro.developpez.com/cours/sqlaz/jointures/
    Non, j'ai placé une étoile dans la jointure.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  9. #9
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    La syntaxe LEFT JOIN n'est pas du tout normalisée, je ne l'ai vu sur aucun cours.

    Pour info j'utilise régulièrement LEFT OUTER JOIN et mes requêtes me renvoient bien mes lignes avec des valeurs nulles.
    ~ Lola ~

  10. #10
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    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 772
    Points : 52 732
    Points
    52 732
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par lola06 Voir le message
    La syntaxe LEFT JOIN n'est pas du tout normalisée, je ne l'ai vu sur aucun cours.

    Pour info j'utilise régulièrement LEFT OUTER JOIN et mes requêtes me renvoient bien mes lignes avec des valeurs nulles.
    Alors vous avez lus des mauvais cours, et eut des mauvais professeurs, car le mot clef OUTER, comme le mot clef INNER est facultatif dans la clause de jointure.
    Offre-vous donc mon bouquin !
    Cela dit je suis contre la simplification par élision du type de JOIN.


    Citation Envoyé par berceker united Voir le message
    Bonjour,
    Je reviens sur ça parce que je suis tombé sur un cas ou ces deux types de jointure ne donne pas forcément le même résultat.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * T_1 AS T1
      LEFT JOIN T_2 AS T2
        ON T1.C1 = T2.C1
    Dans le cas si dessus, si dans T_1.C1 il y a une valeur null alors elle ramene aucune ligne. Alors que la requette c-dessous oui.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT * FROM T1,T2
    WHERE T1.C1 *= T2.C1
    Normal, la jointure externe Sybase est mathématiquement fausse. J'ai donné une explication :
    http://blog.developpez.com/sqlpro/p5...-et-le-nouvea/

    Pour une conversion des jointures externes Sybase vers la norme SL, lire l'article d'Arian Papillon:
    http://blog.datafly.pro/post/2011/06...ntures-ANSI-89

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  11. #11
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 488
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 488
    Points : 6 039
    Points
    6 039
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Alors vous avez lus des mauvais cours, et eut des mauvais professeurs, car le mot clef OUTER, comme le mot clef INNER est facultatif dans la clause de jointure.
    Offre-vous donc mon bouquin !
    Cela dit je suis contre la simplification par élision du type de JOIN.




    Normal, la jointure externe Sybase est mathématiquement fausse. J'ai donné une explication :
    http://blog.developpez.com/sqlpro/p5...-et-le-nouvea/

    Pour une conversion des jointures externes Sybase vers la norme SL, lire l'article d'Arian Papillon:
    http://blog.datafly.pro/post/2011/06...ntures-ANSI-89

    A +
    Merci pour cette information. Actuellement, je modifie parfois les requêtes pour le mettre à la norme, mais je me rend compte que ce n'est pas aussi simple. (Sybase 12.5)
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

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

Discussions similaires

  1. calculer la différence en pourcentage entre deux champs sql
    Par sihammaster dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 05/07/2011, 17h48
  2. Réponses: 2
    Dernier message: 14/04/2011, 15h23
  3. Calcule la différence de jours entre deux dates
    Par clement106 dans le forum Langage
    Réponses: 2
    Dernier message: 15/04/2010, 21h13
  4. [Dates] Calculer différence en jours entre deux dates
    Par looping2b2a dans le forum Langage
    Réponses: 4
    Dernier message: 29/12/2006, 23h32

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