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 :

jointure renvois pas tous les enregistrements


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Inscrit en
    août 2002
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : août 2002
    Messages : 4
    Points : 2
    Points
    2
    Par défaut [resolu] jointure renvois pas tous les enregistrements
    une requete ne renvoit pas d'enregistrements si une des tables de Select est vide?
    je suis entrain de devenir fou !!!

    si j'execute

    SELECT a.Prénom, l.Titre , ab.ville
    FROM livre AS l, auteur AS a, adressbibli AS ab
    WHERE l.numa=a.numa And ab.numab=l.numab And a.nom = [tapez le nom de l'auteur];

    selon le MLD

    auteur(numa, prénom)
    livre(numl, titre, numa#, numab#)
    adressbibli(numab, ville)

    -la requete ne me renvois aucun enregistrements si je ne rentre aucune valeur dans adressbibli.ville

    -D'une manière générale est-il normal que les requetes ne renvois rien du tout si une des tables de Select est vide ???

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    août 2002
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : août 2002
    Messages : 24
    Points : 21
    Points
    21
    Par défaut
    Dans l'hypothèse ou c'est ab qui est vide

    SELECT a.Prénom, l.Titre , ab.ville
    FROM (a INNER JOIN l ON a.numa = l.numa) LEFT JOIN ab ON ab.numab = l.numab
    WHERE a.nom = ' ';

    dans l'hypothèse ou c'est a

    SELECT a.Prénom, l.Titre , ab.ville
    FROM (l INNER JOIN ab ON ab.numa = l.numab) LEFT JOIN a ON a.numa = l.numa
    WHERE a.nom = ' ';

    dans l'hypothèse ou c'est l, vu qu'elle fait la liaison entre ab et a, là t'auras rien c'est clair, bien que tu puisse toujours faire un CROSS JOIN.

    Attention quand même aux différence entre = et LIKE
    On ne peut comprendre un processus en l'interrompant. La compréhension doit rejoindre le cheminement du processus et cheminer avec lui

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    juillet 2002
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : juillet 2002
    Messages : 40
    Points : 1 850
    Points
    1 850
    Par défaut
    L'utilisation du LEFT ou du RIGHT JOIN te permet de récupérer un flux de données en sortie même s'il n'existe pas de correspondance dans l'une des tables satellites.

    Voici de la documentation MS complémentaire sur les jointures

    Utilisation des jointures :
    Les conditions de jointure peuvent être spécifiées dans les clauses FROM ou WHERE, mais il est recommandé de le faire dans les clauses FROM. Les clauses WHERE et HAVING peuvent également contenir des conditions de recherche afin de filtrer par la suite les lignes sélectionnées par les conditions de jointure.

    Les jointures peuvent être classées en catégories de la manière suivante :

    Jointures internes (opération de jointure typique qui utilise certains opérateurs de comparaison tels que = ou <>). Ces jointures comprennent les équi-jointures et les jointures naturelles.
    Les jointures internes utilisent un opérateur de comparaison afin de faire correspondre les lignes de deux tables basées sur des valeurs dans les colonnes communes de chaque table. Par exemple, l'extraction de toutes les lignes dont le numéro d'identification des étudiants est identique dans les tables students et courses.

    Jointures externes. Les jointures externes peuvent être des jointures externes gauche, droite ou complète.
    Les jointures externes sont spécifiées à l'aide d'un des ensembles de mots clés suivants lorsqu'ils sont spécifiés dans la clause FROM :

    LEFT JOIN ou LEFT OUTER JOIN
    Le jeu de résultats d'une jointure externe gauche comprend toutes les lignes de la table gauche spécifiée dans la clause LEFT OUTER et pas uniquement celles qui correspondent dans les colonnes jointes. Lorsqu'une ligne de la table gauche n'a pas de correspondant dans la table de droite, la ligne du jeu de résultats associée comprend des valeurs NULL pour toutes les colonnes de la liste de sélection provenant de la table droite.

    RIGHT JOIN ou RIGHT OUTER JOIN
    Une jointure externe droite est le contraire de la jointure externe gauche. Toutes les lignes de la table de droite sont renvoyées. Des valeurs NULL sont renvoyées pour la table de gauche chaque fois qu'une ligne de la table de droite n'a pas de ligne correspondante dans la table de gauche.

    FULL JOIN ou FULL OUTER JOIN
    Une jointure externe complète renvoie toutes les lignes des tables de gauche et de droite. Chaque fois qu'une ligne n'a pas de correspondance dans une autre table, les colonnes de la liste de sélection de l'autre table comportent des valeurs NULL. Lorsqu'il existe une correspondance entre les tables, la ligne de tout le jeu de résultats contient des valeurs de données des tables de base.

    Jointures croisées
    Les jointures croisées renvoient toutes les lignes de la table de gauche, chaque ligne de celle-ci étant combinée à toutes les lignes de la table de droite. Les jointures croisées sont également appelées produits cartésiens.

    L'exemple illustre une jointure interne qui extrait les auteurs habitant le même État et la même ville qu'un éditeur :

    USE pubs

    SELECT a.au_fname, a.au_lname, p.pub_name

    FROM authors AS a INNER JOIN publishers AS p

    ON a.city = p.city

    AND a.state = p.state

    ORDER BY a.au_lname ASC, a.au_fname ASC



    Les tables ou vues de la clause FROM peuvent être spécifiées dans n'importe quel ordre pour les jointures internes ou externes complètes. En revanche, l'ordre est pertinent dans le cas des jointures externes gauche ou droite. Pour plus d'informations sur l'ordre des tables dans les jointures externes gauche ou droite, voir ‹« Utilisation de jointures externes » dans ce volume.›Utilisation de jointures externes.
    Pour tout savoir sur .Net :
    http://dotnet.developpez.com/FAQ.NET/

    Pour les débutants en ADO .Net :
    http://dotnet.developpez.com/tutoriels/ado1/
    http://dotnet.developpez.com/tutoriels/ado2/

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    mai 2002
    Messages
    20 952
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : mai 2002
    Messages : 20 952
    Points : 49 777
    Points
    49 777
    Billets dans le blog
    1
    Par défaut
    La syntaxe SQL normalisée depouis 1992 (10 ans) veut que l'on utilise des clauses de jointure pour joindre les tables.

    Lire à ce propos, sur mon site SQLpro :
    http://membres.lycos.fr/sqlpro/SQL_AZ_3.html#JOIN_syntaxe

    SELECT a.Prénom, l.Titre , ab.ville
    FROM livre l
    INNER JOIN auteur a
    ON l.numa=a.numa
    INNER JOIN adressbibli ab
    ON ab.numab=l.numab
    WHERE a.nom = [tapez le nom de l'auteur]

    Si l'adresse n'existe pas, il n'y a donc pas jointure.
    Dans ce cas il faut utiliser une jointure externe :

    SELECT a.Prénom, l.Titre , ab.ville
    FROM livre l
    INNER JOIN auteur a
    ON l.numa=a.numa
    LEFT OUTER adressbibli ab
    ON ab.numab=l.numab
    WHERE a.nom = [tapez le nom de l'auteur]

    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/ * * * * *

  5. #5
    Candidat au Club
    Inscrit en
    août 2002
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : août 2002
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    houla merci beaucoup de votre aide !!! je bois un café je me réveille un peu mieux et je me plonge dans vos explications...

  6. #6
    Candidat au Club
    Inscrit en
    août 2002
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : août 2002
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    si j'utilise la requete de senke ça marche :

    SELECT a.Prénom, l.Titre, ab.ville
    FROM (auteur AS a INNER JOIN livre AS l ON a.numa = l.numa) LEFT Join adressbibli AS ab ON ab.numab = l.numab
    WHERE a.nom = [tapez le nom de l'auteur];

    mais si j'utilise :

    SELECT a.Prénom, l.Titre , ab.ville
    FROM livre l
    INNER JOIN auteur a
    ON l.numa=a.numa
    LEFT OUTER adressbibli ab
    ON ab.numab=l.numab
    WHERE a.nom = [tapez le nom de l'auteur];

    access 2000 me renvoit l'erreur suivante : "erreur de syntaxe (opérateur absent) dans l'expression "l.numa=a.numa LEFT OUTER adressbibli ab ON ab.numab=l.numab"

    pourquoi ?

  7. #7
    Membre éprouvé
    Avatar de Gandalf24
    Homme Profil pro
    Integrateur Odoo
    Inscrit en
    mai 2002
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : mai 2002
    Messages : 481
    Points : 1 013
    Points
    1 013
    Par défaut
    Hug

    En fait, il me semble que access ne gère pas le ... D'ou ton pb...
    Le nom d'un bomerang qui ne revient pas quand on le lance ?
    Un Baton...

  8. #8
    Candidat au Club
    Inscrit en
    août 2002
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : août 2002
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    access commence vraiment à me gaver sérieusement...

    Sql pro, ton site est probablement ce que j'ai vu de mieux dans le genre !!! bravo et surtout merci...

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

Discussions similaires

  1. [MySQL] mon select ne renvoie pas tous les champs
    Par dhonore dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 25/07/2011, 17h00
  2. [AC-2003] Mon état n'affiche pas tous les enregistrements
    Par yael44 dans le forum IHM
    Réponses: 1
    Dernier message: 01/11/2009, 21h04
  3. jointure en gardant tous les enregistrements d'une table
    Par jeandadaf dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/06/2009, 20h00
  4. Réponses: 3
    Dernier message: 18/11/2008, 16h31
  5. [MySQL] Requete en Php: Ne lit pas tous les enregistrements d'une table
    Par smooncef dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 08/08/2008, 11h16

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