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 :

Sélectionner les valeurs de plusieurs tables différentes ?


Sujet :

Langage SQL

  1. #1
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut Sélectionner les valeurs de plusieurs tables différentes ?
    Bonjour tout le monde,

    Je me pose une question (bête).

    J'utilise ce genre de requête en PHP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $sql_annee = "SELECT Nom_complet FROM annees WHERE NOM_ANNEE = '".$_SESSION['choix_annee']."'";
     
    $req_annee = mysql_query($sql_annee);
     
    $annee = mysql_fetch_array($req_annee);
    je me demandais si je pouvais sélectionner plusieurs champs venant de plusieurs tables mais dans une seule requête ?

    Le but serait de limiter le nombre de requête.

    Lors de l'utilisation, je récupère les valeurs comment ?

    Merci d'avance.

    beegees

  2. #2
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Bien sûr ! Et heureusement même (le R de SGBDR signifie Relationnel) !

    Imaginons cette structure avec tes années et une table des événements, chaque événement étant lié à une année:

    Table: Annee (id_annee, libelle)
    Table: Evenement(id_evenement, evenement, id_annee)

    La colonne id_annee de la table Evenement correspond à l'année considérée

    Pour obtenir la liste des événement avec les informations sur l'année:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select a.libelle, e.evenement
    from annee a, evenement e
    where a.id_annee = e.id_annee
    la correspondance se fait à l'aide du where (il existe aussi une autre possiblité d'écriture qu'on appelle une jointure).

    ERE

  3. #3
    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
    Et avec la syntaxe normalisée (depuis 1992) des jointures, c'est encore mieux !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT a.libelle, e.evenement
    FROM annee a
    INNER JOIN evenement e ON a.id_annee = e.id_annee
    Pour plus d'infos sur les jointures, leur bonne utilisation et leur bonne écriture, voir le tutoriel de SQLPro.

  4. #4
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Et avec la syntaxe normalisée (depuis 1992) des jointures, c'est encore mieux !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT a.libelle, e.evenement
    FROM annee a
    INNER JOIN evenement e ON a.id_annee = e.id_annee
    Pour plus d'infos sur les jointures, leur bonne utilisation et leur bonne écriture, voir le tutoriel de SQLPro.
    Alors là t'es dur !

    J'ai hésité un moment avant de choisir ou pas de proposer une jointure, mais pour beegees qui ne savait même pas qu'on pouvait faire une requête sur plusieurs tables, j'ai pensé que ce serait une syntaxe plus... abordable et compréhensible !

    Vraiment t'es IMPITOYABLE !

    ERE

  5. #5
    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
    Oui, on apprend d'abord à conduire mal avant d'apprendre à conduire bien car c'est plus simple de mal conduire

    De surcroît je ne vois pas en quoi une virgule serait plus compréhensible qu'un JOIN.

  6. #6
    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
    Citation Envoyé par emmanuel.remy Voir le message
    Alors là t'es dur !

    J'ai hésité un moment avant de choisir ou pas de proposer une jointure, mais pour beegees qui ne savait même pas qu'on pouvait faire une requête sur plusieurs tables, j'ai pensé que ce serait une syntaxe plus... abordable et compréhensible !

    Vraiment t'es IMPITOYABLE !

    ERE
    JOIN est pourtant une syntaxe simple à comprendre !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT a.colA, b.colB
    FROM tableA
    INNER JOIN tableB ON a.A_Id = b.B_IdA
    Je joins la table A à la table B de manière interne (INNER) sur (ON) la condition de jointure (a.A_Id = b.B_IdA) qui fait correspondre deux colonnes.

  7. #7
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    JOIN est pourtant une syntaxe simple à comprendre !
    Désolé de revenir à la charge, mais je peux t'assurer que quand tu dois expliquer une requête multitables (disons 4 ou 5) à des personnes qui n'en ont jamais fait, et bien ils comprennent très vite la syntaxe sans jointure... Et le passage aux jointures est toujours vécu comme un supplice (verbeux, ...), même si une fois bien décrypté c'est limpide (sqlpro est pour cela très intéressant )

    Et je ne parle même pas des developpeurs confrontés à Oracle... qui te mettent toujours aujourd'hui des += et =+ à la place de jointures droite ou gauche !

    Je ne cautionne pas du tout mais je constate la réalité du monde de la formation et des développements en entreprise (et pas spécialement les petites).

    ERE

  8. #8
    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
    Je dirais au contraire que c'est justement quand il y a une requête avec plus de deux tables à joindre que celle-ci devient illisible, surtout s'il y a en plus des conditions de restriction sur les données !

    En plus cette (mauvaise) syntaxe fait facilement écrire des requêtes fausses. Je ne compte plus le nombre de messages sur developpez.com que j'ai résolus en montrant où était l'erreur juste avec la syntaxe normalisée à partir d'une requête (mal) écrite avec des jointures FROM... WHERE !

    Apprendre encore aujourd'hui la (mauvaise et obsolète) syntaxe FROM... WHERE, c'est comme si un instituteur ne caurijé pa les fotes de ces élève en se disant qu'ils orait le tant de voir sa plut tart !

    (j'ai dû mettre deux fois plus de temps à écrire la fin de la dernière phrase que si je l'avais correctement écrite !)

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

Discussions similaires

  1. [MySQL] recuperer les valeurs de plusieurs tables
    Par IVIedia dans le forum PHP & Base de données
    Réponses: 27
    Dernier message: 18/03/2012, 13h41
  2. Insérer les mêmes valeurs dans plusieurs tables
    Par hsoussou dans le forum SQL*Loader
    Réponses: 8
    Dernier message: 29/03/2010, 18h14
  3. Réponses: 2
    Dernier message: 16/04/2008, 09h04
  4. Réponses: 7
    Dernier message: 30/01/2008, 18h39
  5. [Débutant] Parcourir les données de plusieurs tables.
    Par SmokE dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 13/01/2006, 17h55

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