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 :

Requête SELECT sur deux tables


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2011
    Messages : 4
    Par défaut Requête SELECT sur deux tables
    Bonjour à tous.
    Nouveau sur le forum et débutant en SQL, j'ai eu beau faire des recherches je n'ai pas trouvé la réponse à mon soucis que doivent pourtant rencontrer tous les développeurs...
    Je vous prie de m'excuser si le sujet a déjà été traité.

    2 Tables

    CLIENTS
    IDCLIENTS mediumint(9) AUTO_INCREMENT
    NOMCLI char(100)
    CODFAMI char(5)

    FAMILLES
    IDFAMILLE mediumint(9) AUTO_INCREMENT
    CODFAMI char(5)
    LIBFAMILLE char(100)

    Afin d'obtenir la liste des clients avec le libellé de la famille de chacun d'eux je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CLIENTS.NOMCLI, FAMILLES.LIBELLE, CLIENTS.IDCLIENTS FROM CLIENTS, FAMILLES WHERE FAMILLES.CODFAMI = CLIENTS.CODFAMI
    J'obtiens bien la liste des clients dont le code famille figure dans le fichier FAMILLES or deux enregistrements de la table CLIENTS possèdent un CODFAMI (non NULL) qui n'existe pas dans la table FAMILLES et donc ces deux clients ne ressortent pas dans le résultat de ma requête.

    Comment dois-je m'y prendre pour faire apparaitre aussi ces deux enregistrements ?

    Je remercie par avance les âmes charitables qui sauront m'instruire

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Faites une petite recherche sur les jointures externes !

  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
    22 010
    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 : 22 010
    Billets dans le blog
    6
    Par défaut
    Commencez aussi par faire de vraies jointures et non un salmigondis de projection, produit cartésien et restrictions.
    les jointures se font avec JOIN suivi d'un prédicat introduit par ON.
    A lire : http://sqlpro.developpez.com/cours/s...ointures/#LIII
    Commencez donc pas apprendre SQL. mon livre, comme mon site web est fait pour vous aider !

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

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2011
    Messages : 4
    Par défaut
    Merci pour cette aide.

    Etes-vous toujours aussi gais et chaleureux ?
    Heureusement que je me suis préalablement excusé d'être nul en SQL...

    Excusez-moi cette fois-ci pour le bruit.

  5. #5
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Salut !

    On n'est pas tous comme ça, t'inquiète

    Et puis tu peux lui mettre un pouce vers le bas (en bas à droite) si tu trouve son attitude discourtoise ou autre... (non pas que ça serve à grand chose, mais ça défoule)


    Quoi qu'il en soit, courage pour l'apprentissage du SQL !

  6. #6
    Membre éprouvé Avatar de tfc3146
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Février 2009
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Février 2009
    Messages : 79
    Par défaut
    Bonjour,

    La requête que vous avez écrit est de la norme SQL1, alors que le JOIN ... ON c'est du SQL2 (arrêtez moi si je me trompe).

    Donc, les 2 requêtes sont possibles c'est en tout cas ce que l'on m'a toujours dit.

    Avez-vous trouvez la solution ?

  7. #7
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par tfc3146 Voir le message
    La requête que vous avez écrit est de la norme SQL1, alors que le JOIN ... ON c'est du SQL2 (arrêtez moi si je me trompe).

    Donc, les 2 requêtes sont possibles c'est en tout cas ce que l'on m'a toujours dit.
    Les deux syntaxes sont encore acceptées par les SGBD mais la syntaxe de jointure avec FROM WHERE est obsolète depuis 1992, soit près de 20 ans ! Il serait temps de se mettre à la page, non ?

    Hélas, certains n'ayant pas cet âge apprennent encore en premier une syntaxe révolue depuis avant leur naissance !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 90
    Par défaut
    Au risque de passer pour un vieux (j'ai que 32 ans ), si vous tenez absolument à utiliser l'ancienne norme, la syntaxe est de remplace le "=" dans le where par soit "*=", soit "=*" en fonction du coté vers lequel on souhaite avoir toutes les lignes.

    Dans votre exemple ca donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE FAMILLES.CODFAMI =* CLIENTS.CODFAMI
    pour avoir tous les clients, même ceux qui n'ont pas de famille.

    PS : je tiens à préciser que ce n'est pas parce que je connais cette syntaxe que je l'utilise encore

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

Discussions similaires

  1. Requête Select sur deux tables. need help
    Par Ma2x. dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/12/2009, 15h10
  2. Requête "select" sur deux tables dont une vide
    Par Torgar dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/10/2009, 09h27
  3. SELECT sur deux tables
    Par Gaetch dans le forum Langage SQL
    Réponses: 1
    Dernier message: 13/07/2007, 15h40
  4. Select sur deux tables
    Par DJuL- dans le forum Requêtes
    Réponses: 2
    Dernier message: 01/03/2007, 14h40
  5. [SQL] Problème avec script de pagination et requête sql sur deux tables
    Par psychoBob dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/06/2006, 14h06

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