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 :

left join + is not null


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Femme Profil pro
    PL/SQL
    Inscrit en
    Septembre 2016
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : Arabie Saoudite

    Informations professionnelles :
    Activité : PL/SQL
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 190
    Par défaut left join + is not null
    bonjour a toutes et a tous

    Question d'une débutante en TSQL

    Est ce que un left join suivi d'une condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     where colone is not NULL
    ce ci est équivalent a inner join

    même question d'une autre façon peut on avoir un left join sans avoir des résultat avec des valeur NULL pour le non correspondant entre les deux tables

    N'hésitez pas à me corriger si je me trompe.

    et merci pour vos éclaircissement

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Sans préciser dans quelle table se trouve la colonne testée, ta question est incomplète.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT  a.*, b*
    FROM    a
        LEFT JOIN
            b
            ON  a.id = b.id
    WHERE   b.col   IS NOT NULL
    est bien équivalent à un INNER JOIN, ne retournant que les lignes où B.COL n'est pas NULL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT  a.*, b*
    FROM    a
        LEFT JOIN
            b
            ON  a.id = b.id
    WHERE   a.col   IS NOT NULL
    est bien un LEFT JOIN, ne retournant que les lignes de A où A.COL n'est pas NULL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT  a.*, b*
    FROM    a
        LEFT JOIN
            b
            ON  a.id    = b.id
            AND a.col   IS NOT NULL
    est bien un LEFT JOIN, retournant toutes les lignes de A et seulement celles de B où B.COL n'est pas NULL
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 251
    Par défaut
    Et l'erreur que font beaucoup, beaucoup de monde

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT  a.*, b*
    FROM    a
        LEFT JOIN
            b
            ON  a.id    = b.id
            WHERE b.col = UneValeur
    Est bien équivalent à un INNER JOIN, car pour pouvoir tester si b.col est égal à quelque chose, b.col doit être au départ (intrinsèquement) non nul

    Pour rétablir le LEFT JOIN, il faut faire dans ce cas là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT  a.*, b*
    FROM    a
        LEFT JOIN
            b
            ON  a.id    = b.id
            WHERE (b.col is null or b.col = UneValeur)
    EDIT : Correction des requêtes, parce que sinon, ce que j'ai dit est faux

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

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 442
    Par défaut
    Sevyc64: je ne suis pas d'accord.
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT  a.*, b*
    FROM    a
        LEFT JOIN
            b
            ON  a.id    = b.id
            AND b.col = UneValeur
    C'est bien une jointure externe !
    La requête renvoie toutes les lignes de a, et celles de b qui respectent les deux critères SI ELLES EXISTENT (et null dans les autres cas).
    C'est d'ailleurs une construction que j'utilise fréquemment.
    Ta description est plutôt pour cette requête:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT  a.*, b*
    FROM    a
        LEFT JOIN
            b
            ON  a.id    = b.id
            WHERE b.col = UneValeur
    Là, effectivement, on se retrouve avec un INNER JOIN.

    Tatayo.

  5. #5
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 251
    Par défaut
    Oh zut ! Tu as raison, je n'avais pas vu que la condition sur b était dans le ON, j'y avais vu un Where.

    Comme quoi, trop pressé de répondre, on dit des c*****

  6. #6
    Invité de passage Avatar de technicgang
    Homme Profil pro
    database
    Inscrit en
    Janvier 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Inde

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

    Informations forums :
    Inscription : Janvier 2017
    Messages : 1
    Par défaut Hello
    La jointure à gauche affichera tous les enregistrements de la première table et seulement les enregistrements correspondants de la deuxième table.
    par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select * from table1 as t
    left join table2 as t2
    on t1.c=t2.c
    Il affichera tous les enregistrements de la table t1 et les enregistrements correspondants de la table t2.

    Si vous utilisez
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select * from table1 as t
    left join table2 as t2
    on t1.c=t2.c
    where t1.c is not null
    Alors pas de sens. Et si vous allez pour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select * from table1 as t
    left join table2 as t2
    on t1.c=t2.c
    where t2.c is not null
    Ensuite, utilisez simplement jointure interne plutôt que jointure gauche.

Discussions similaires

  1. left join pour les nulls
    Par yojo_yojo dans le forum Linq
    Réponses: 0
    Dernier message: 19/04/2011, 14h48
  2. LEFT JOIN ou NOT EXISTS ?
    Par popy67 dans le forum Requêtes
    Réponses: 4
    Dernier message: 24/06/2010, 16h15
  3. Réponses: 6
    Dernier message: 23/01/2007, 10h17
  4. LEFT JOIN à la placede NOT iN
    Par cari dans le forum Requêtes
    Réponses: 4
    Dernier message: 08/08/2006, 16h32
  5. Left join, champ null et affichage dans etat
    Par catoucat dans le forum Access
    Réponses: 3
    Dernier message: 03/07/2006, 02h58

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