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

Requêtes MySQL Discussion :

aide pour requete sur 2 tables avec clé étranere


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 192
    Points : 86
    Points
    86
    Par défaut aide pour requete sur 2 tables avec clé étranere
    Bonjour,

    je cherche à effectuer une requete assez facile mais je cherche depuis quelques temps et je ne trouve pas

    - j'ai une table employe et une table ordinateur, avec matricule utilisateur en clé étrangère dans table ordinateur.

    - je souhaiterais afficher les nom d'utilisateurss de la tables employé qui ne se trouvent pas dans la table ordinateur. voicis ce que j' ai éssayé mais ca ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT nom_emp
    FROM employe, ordinateur
    WHERE employe.mat_emp = ordinateur.mat_emp;
    AND employe.mat_emp NOT IN (SELECT mat_emp FROM ordinateur);
    Merci pour votre aide

  2. #2
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut Re: aide pour requete sur 2 tables avec clé étranere
    Voila ce qu'il faut faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT nom_emp
    FROM employe
    LEFT OUTER JOIN ordinateur ON employe.mat_emp = ordinateur.mat_emp
    WHERE ordinateur.mat_emp IS NULL;
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 192
    Points : 86
    Points
    86
    Par défaut
    Merci la requete marche bien, mais je n'ai pas compris vraiment le mode de fonctionnement de la requete INNER JOIN, même après avoir trouvé des explications cela reste confus, pourrais tum'éclairer.
    Merci

  4. #4
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Pas de problème !

    La jointure INNER JOIN fait une jointure en se basant sur la condition de jointure.

    Sa syntaxe est la suivante:

    table1 INNER JOIN table2 ON Condition_de_jointure
    Elle est à préférer par rapport à ça :

    SELECT *
    FROM table1, table2
    WHERE Condition_de_jointure
    Le plus souvent, l'expression qui apparait en condition du ON est une comparaison entre la clef primaire d'une des tables et la clef étrangère de l'autre (ex: employe.mat_emp = ordinateur.mat_emp), mais il y a des exceptions.


    Maintenant, la jointure LEFT [OUTER] JOIN:

    La jointure LEFT OUTER JOIN renverra potentiellement plus de résultats que la jointure INNER JOIN, car si il n'y a pas de correspondance dans la table2, alors les champs de cette table seront positionnés à NULL.

    C'est assez pratique dans de nombreux domaines (dans ton cas, chercher les éléments qui n'ont pas de correspondance dans la table2).


    Tu l'auras compris, LEFT OUTER JOIN est non-commutative alors que INNER JOIN est commutative (ça peut être utile pour certaines optimisations).

    Par ailleurs, le mot-clef "OUTER" est facultatif, mais j'aime bien le mettre pour bien faire la différence avec une jointure de type INNER.


    Bon, j'ai essayé de faire court. Alors si il y a un point qui reste obscur, n'hésite pas à me demander.
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 192
    Points : 86
    Points
    86
    Par défaut
    Oui merci je comprend déja mieux ;-)

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/04/2008, 00h02
  2. Réponses: 4
    Dernier message: 23/10/2006, 09h09
  3. [MySQL] Requete sur 2 tables avec champs commun
    Par marcd dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 20/04/2006, 16h14
  4. Besoin d'aide pour requête sur grosse table
    Par Fabouney dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/01/2006, 09h01
  5. besoin d'aide -> requete sur 2 tables avec count()
    Par parksto dans le forum Requêtes
    Réponses: 3
    Dernier message: 20/10/2005, 19h06

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