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 :

Souci requête sql !


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 147
    Points : 61
    Points
    61
    Par défaut Souci requête sql !
    Bonjour,

    je débute en sql et j'ai un petit souci pour répondre à une requête alors si quelqu'un pourrait m'aider ca serait vraiment cool.

    Alors voila, j'ai les tables suivantes (je ne met pas les autres elle serait inutiles pour ma requete je pense) :
     Chercheur [ CodeCh, NomCh, CodeEq* ]
     Equipe [ CodeEq, NomEq, CodeResp*, CodeLabo* ]

    Je souhaiterai restituer les chercheurs travaillant dans la meme equipe que le chercheur eric.

    Voici ce que j'ai fais mais je ne comprends pas pourquoi ca ne me retourne pas ce que je voudrai.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT NomCh
    FROM Chercheur, Equipe
    WHERE Chercheur.CodeEq=Equipe.CodeEq
    AND NomCh='Eric' ;

  2. #2
    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
    Vous pouvez utiliser deux fois la même table dans la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT C2.NomCh
      FROM Chercheur C1
           INNER JOIN Chercheur C2
             ON C2.CodeEq = C1.CodeEq
     WHERE C1.NomCh = 'Eric';

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 147
    Points : 61
    Points
    61
    Par défaut
    Merci mais n'y aurait-il pas plus simple étant donné que je suis débutante en la matière.
    Une requête simple voire imbriquée m'irait

  4. #4
    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
    Plus simple qu'une jointure ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 147
    Points : 61
    Points
    61
    Par défaut
    J'aimerai ne pas utiliser le INNER JOIN ..... ON
    je ne connais pas du tout

    Comment faire plus simplement ?

  6. #6
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 450
    Points
    19 450
    Par défaut
    Bonsoir.

    Citation Envoyé par Lenou Voir le message
    J'aimerai ne pas utiliser le INNER JOIN ..... ON
    je ne connais pas du tout

    Comment faire plus simplement ?
    C'est pourtant recommandé depuis SQL 92 ... il n'y a rien de plus compliqué que dans la syntaxe SQL 89 que vous utilisez.

    Cordialement,
    Idriss

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Concernant ta méconnaissance des INNEr join regarde ici
    http://sqlpro.developpez.com/cours/sqlaz/jointures/

    La requete pourrait s'écrire comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT C2.NomCh
      FROM Chercheur C1,
    	Chercheur C2        
     WHERE 
     C2.CodeEq = C1.CodeEq
    AND C1.NomCh = 'Eric';
    mais je rejoins mes camarades, cela fait mal aux yeux.
    Donc en pratique, tu sépares tes tables par inner join à la place de,
    et ton critère de jointure C2.CodeEq = C1.CodeEq tu le mets derrière le ON.

    SQLPRO explique très bien les jointures, bonne lecture.
    Soazig

  8. #8
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    avec une requete imbriquée, ca donne :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT NomCH
    FROM Chercheur
    WHERE CodeEq = (
        SELECT CodeEq
        FROM Chercheur
        WHERE NomCh = 'Eric'
    )

    en supposant que deux chercheurs ne peuvent avoir le meme nom, et que donc vous avez une contrainte d'unicité sur NomCh
    sinon, il faudra remplacer le = par un IN pour ne pas vous faire insulter par votre SGBDR au cas ou la sous requete renvoi plusieurs resultats

  9. #9
    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
    La requête imbriquée est une moins bonne solution que la jointure car la jointure est l'opération la plus optimisée dans un SGBD.

  10. #10
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    La requête imbriquée est une moins bonne solution que la jointure car la jointure est l'opération la plus optimisée dans un SGBD.
    oui sur le plan théorique. mais je pense qu'il vaut mieux écrire une requete que l'on comprend, qu'une requete optimisée


    Citation Envoyé par Lenou Voir le message
    J'aimerai ne pas utiliser le INNER JOIN ..... ON
    je ne connais pas du tout

    Comment faire plus simplement ?
    surtout qu'a mon avis dans le cas présent, il n'y aura aucune différence notable de performance...

  11. #11
    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 moi je crois qu'il vaut mieux faire le petit effort de comprendre la jointure normalisée depuis 1992, surtout que je la trouve au moins aussi simple, voire plus simple à comprendre que l'ancienne syntaxe.

  12. #12
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Points : 19 450
    Points
    19 450
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    oui sur le plan théorique. mais je pense qu'il vaut mieux écrire une requete que l'on comprend, qu'une requete optimisée
    Les jointures sont une notion de base ... mieux vaut essayer de comprendre cette notion que de palier au problème avec une imbrication tordue je pense.

    On fait des imbrications quand on a pas d'autres choix (pour comparer des COUNT par exemple).

    Cordialement,
    Idriss

  13. #13
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Et moi je crois qu'il vaut mieux faire le petit effort de comprendre la jointure normalisée depuis 1992, surtout que je la trouve au moins aussi simple, voire plus simple à comprendre que l'ancienne syntaxe.
    tout à fait d'accord avec ca...

    cependant l'auto-jointure ne me semble pas la chose la plus simple pour apprendre... la jointure

    j'ai donc proposé ce code qui se rapproche de la requete originale de Lenou pour qu'il comprenne son erreur, car il y a une grosse erreur de logique dans sa requete.

    petit a petit l'oiseau fait son nid

    mais sinon je le redis, je suis tout a fait d'accord avec toi : ta requete est mieux écrite, plus optimisée...

    PS : Lenou, ta requete initiale avec une jointure s'ecrit :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT NomCh
    FROM Chercheur
    INNER JOIN Equipe ON Chercheur.CodeEq=Equipe.CodeEq
    WHERE NomCh='Eric' ;

    c'est donc effectivement pas très compliqué, plus lisible/comprehensible et optimisé...
    mais cela n'enlève pas l'erreur de logique dans le filtre et ne te donne donc pas ce que tu veux...

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 147
    Points : 61
    Points
    61
    Par défaut
    Merci beaucoup pour toutes vos explications, cela m'a bien aidéé.

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

Discussions similaires

  1. Souci requête SQL
    Par marime dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 16/06/2009, 19h46
  2. VB + Excel + SQL + Soucis requête avec des dates
    Par Invité dans le forum Excel
    Réponses: 2
    Dernier message: 12/03/2009, 09h15
  3. [SQL] Soucis requête SQl sur serveur Free
    Par Ryuuku dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 30/08/2007, 17h20
  4. [SQL] Soucis d'affichage de requête SQL
    Par kilkikou dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 06/06/2006, 17h25
  5. Soucis de création de requêtes sql
    Par Zebeber dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 26/05/2006, 12h13

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