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 :

Question théorique (facile) sur les jointures


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2004
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 44
    Points : 31
    Points
    31
    Par défaut Question théorique (facile) sur les jointures
    Salut,

    Déjà, j'espère être dans la bonne section.

    Alors, j'ai une question toute bête, ca fait un moment que j'ai lâché le développement et les BDD, et je me demandais subitement si c'était possible de faire une jointure de deux table en prenant comme critère l'égalité entre 2 attributs non-identifiants ?

    Je crois me souvenirs que mes cours m'ont appris à ne jamais faire ca, une jointure avec un attribut non-identifiants, toujours chercher une clef...

    Est-ce que je délire ou pas ?


    Ensuite, admettons que je ne délire pas, quel est le risque de ce genre de jointure ?


    Un exemple, deux tables toutes simples :

    Homme(Id, nom, age) et Femme(Id,nom,mari,age). Je veux les hommes et femmes qui ont le même age admettons.
    Si je fais une jointure avec comme critère H.age=F.age c'est pareil que de joindre mes 2 tables via H.id et F.mari et de faire une sélection des lignes où les ages sont égaux ?

    Ca mène forcement au même résultat ou pas ?

    Merci !

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 115
    Points : 28 493
    Points
    28 493
    Par défaut
    Citation Envoyé par chateau_dur Voir le message
    je me demandais subitement si c'était possible de faire une jointure de deux table en prenant comme critère l'égalité entre 2 attributs non-identifiants ?
    Je crois me souvenirs que mes cours m'ont appris à ne jamais faire ca, une jointure avec un attribut non-identifiants, toujours chercher une clef...
    Rien n'interdit de faire une jointure sur 2 attributs non-identifiants.
    Tout dépend du résultat que l'on recherche...

    Citation Envoyé par chateau_dur Voir le message
    Ensuite, admettons que je ne délire pas, quel est le risque de ce genre de jointure ?
    Un exemple, deux tables toutes simples :
    Homme(Id, nom, age) et Femme(Id,nom,mari,age). Je veux les hommes et femmes qui ont le même age admettons.
    Si je fais une jointure avec comme critère H.age=F.age c'est pareil que de joindre mes 2 tables via H.id et F.mari et de faire une sélection des lignes où les ages sont égaux ?
    Ca mène forcement au même résultat ou pas ?
    Je vais me limiter à quelques enregistrements :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    homme
    id  nom     age
    1   andré   20
    2   bernard 22
    3   charles 22
    4   denis   25
     
    femme
    id  nom         age mari
    1   estelle     20  1
    2   francine    22  3
    3   gertrude    25  2       
    4   isabelle    25  4
    Première requête, identifiant et age
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    SELECT  h.nom   AS lui
        ,   f.nom   AS elle
        ,   h.age   AS age
    FROM    homme   AS h
        INNER JOIN
            femme   AS f
        ON  h.id    = f.mari
        AND h.age   = f.age 
    ;
     
    lui     elle        age
    ------- ----------- ---
    andré   estelle     20
    bernard francine    22
    denis   isabelle    25
    Deuxième requête, sans identifiant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    SELECT  h.nom
        ,   f.nom
        ,   h.age   AS age
    FROM    homme   AS h
        INNER JOIN
            femme   AS f
        ON  h.age   = f.age 
    ;
     
    lui     elle        age
    ------- ----------- ---
    andré   estelle     20
    bernard francine    22
    charles francine    22
    denis   gertrude    25
    denis   isabelle    25
    Je t'encourage à consulter le Cours sur les Jointures

  3. #3
    Nouveau membre du Club
    Inscrit en
    Septembre 2004
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 44
    Points : 31
    Points
    31
    Par défaut
    ok, il me semblait pourtant qu'on risquait des pertes de données à jouer à faire des jointures sans clefs...

  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
    21 920
    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 : 21 920
    Points : 51 712
    Points
    51 712
    Billets dans le blog
    6
    Par défaut
    vous pouvez faire des jointures sur ce que vous voulez y compris mettre en relation les caractères de position 6 et 7 d'une colonne CHAR(13) avec les 2 premiers caractères d'une colonne CHAR(5).

    Par exemple savoir quelles sont les bureaux postal ditributeurs associé au code département d'un NNI.

    En effet les caractère 6 et 7 du NNI sont le code département.
    les caratères 1 et 2 du coe postal sont le code département.

    A +

  5. #5
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 286
    Points
    3 286
    Par défaut
    Citation Envoyé par chateau_dur Voir le message
    ok, il me semblait pourtant qu'on risquait des pertes de données à jouer à faire des jointures sans clefs...
    Absolument pas ... le seul problème avec les jointures ne portant pas sur des clés (que je vais supposer équivalentes à des INDEX ici) c'est la performance sur des tables de cardinalité élevée, bien sûr ...

    Votre SGBD favori vous donnera toujours un résultat, le seul problème c'est le temps qu'il va mettre pour le produire ...

Discussions similaires

  1. Question sur les jointures
    Par neufgirl dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/02/2009, 18h30
  2. Une question aux Grands du Sql, sur les jointures externes
    Par tonton67 dans le forum Développement
    Réponses: 3
    Dernier message: 26/01/2009, 10h08
  3. [EJB] [debutant] Question théorique simple sur les ejb
    Par Sylario dans le forum Java EE
    Réponses: 4
    Dernier message: 13/09/2006, 23h16
  4. Question sur les jointures
    Par richard038 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/06/2006, 12h46
  5. question de débutant sur les jointures
    Par dreamcocktail dans le forum Langage SQL
    Réponses: 6
    Dernier message: 27/03/2006, 16h24

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