SELECT FROM plusieurs tables?

Discussion dans 'Web, design' créé par Styleman, 22 Octobre 2003.

Statut de la discussion:
Fermée.
  1. Offline
    Styleman Touriste
    Bonjour,

    Voila juste une question, il y a t'il moyen de slectionner a partir de plusieur table? par exemple:

    SELECT * FROM news AND dossiers


    est-ce possible?


    Merci beaucoup
    Styleman, 22 Octobre 2003
    #1
  2. Offline
    La Poubelle Elite
    SELECT * FROM table1 INNER JOIN table2 ON table1.numero =table2.numero;

    Il faut un element pour les joindre.
    INNER JOIN
    LEFT JOIN
    RIGHT JOIN

    un petit google avec ces mots t'aideront
    La Poubelle, 22 Octobre 2003
    #2
  3. Offline
    guslinux Gamerz'ien
    => PHP debutant !!
    guslinux, 22 Octobre 2003
    #3
  4. Offline
    Styleman Touriste
    la y'a pour alimenter plusieur, mais pas interroge, je ne savais pas ke ct la meme chose...

    Merci AGain
    Styleman, 22 Octobre 2003
    #4
  5. Offline
    niafron ex membre
    pas oblige le inner join

    entre autre pour la gestion avec les foreign key

    SELECT * FROM table1, table2 WHERE table1.PK_ID = table2.FK_ID
    niafron, 22 Octobre 2003
    #5
  6. Offline
    [J J] Fan à Toc
    Le plus simple est de créer un vue (et pour rester assez propre)

    CREATE VIEW machin
    AS
    ...
    [J J], 22 Octobre 2003
    #6
  7. Offline
    Styleman Touriste
    ok merci bcp!!!
    Styleman, 22 Octobre 2003
    #7
  8. Offline

    Clair ;)
    TITM4v3rick, 22 Octobre 2003
    #8
  9. Offline
    La Poubelle Elite
    Au contraire, INNER permet beaucoup plus qu'une simple clause where.

    Et que se passe-t-il quand la clé n'existe pas dans la TABLE2, oups l'info n'apparait pas.

    Une simple jointure avec la clause where est faite uniquement pour les liaisons plus que simple.

    Autant travaillé directement correctement qu'avec des bidouillages cochons.
    La Poubelle, 22 Octobre 2003
    #9
  10. Offline
    SUEd Touriste
    A priori, pour les foreign key dans MySQL, il est clairement recommandé de passer par une jointure...

    Exemple :
    SELECT t1.xxx, t2.yyy from t1 left join t2 on t1.id = t2.id where t1.xxx = 'zzz';
    SUEd, 22 Octobre 2003
    #10
  11. Offline
    niafron ex membre
    avec un peu de rigueur ds la programmation ben tu c la gere comme un grand la FK ;)
    niafron, 22 Octobre 2003
    #11
  12. Offline
    niafron ex membre
    lol et si on veut pas kelle apparaisse cette ligne ki nest pas reprise ds les 2 tables ( oui cfr Foreign Key les gars ) ben le inner join on est bien embete apres
    niafron, 22 Octobre 2003
    #12
  13. Offline
    SUEd Touriste
    Pour moi, ca reste une méthode non recommandable ;)

    A priori, ta clause WHERE va faire full comparaisons (comparer chaque enreg de table1 avec chaque enreg de table2), alors que la jointure ne le fera pas, car c'est optimisé pour ne pas le faire :)


    C'est comme quand tu veux savoir le nombre d'enregistrements dans une table... Tu ne vas pas faire un select de tous les enreg et ensuite un mysql_num_rows() :)
    Ca fonctionne, c'est clair, mais tu vas plutot faire appel à la fonction COUNT() qui le fait directement dans la requête et qui est optimisée pour ça :)

    Bah, c un peu le meme... si ya des "outils" développés pour faire un truc, fo les utiliser, car c optimisé pour ;)
    SUEd, 22 Octobre 2003
    #13
  14. Offline
    Fnac -> SQL "Frédéric Brouard"
    TITM4v3rick, 22 Octobre 2003
    #14
  15. Offline
    niafron ex membre
    ;)
    niafron, 22 Octobre 2003
    #15
  16. Offline
    La Poubelle Elite
    Justement, avec INNER JOIN, seul les champs égal apparaîtront.

    Avec LEFT JOIN tous les champs de la première table apparaîtront => Tres pratique quand on désire connaître les nouveaux enregistrement en comparant deux table (une petite clause WHERE qui selectionne uniquement les champs null dans la cle de comparaison de la deuxième table).

    Avec RIGHT JOIN tous les champs de la première table apparaîtront => Idem que l'exemple précedent, sauf qu'on connaitra les champs qu'il faut supprimer.
    La Poubelle, 23 Octobre 2003
    #16
  17. Offline
    niafron ex membre
    oups g confondu les jointure

    mais bon un de tes anciens post etait pas clair aussi


    bon les gars le trip jointure de fou c sympa mais c un peu idem a une belle condition de jointure sur un bete select de plusieurs tables

    bon je n'ai pas la science infuse du SQL :p mais j aimerais bien ( Sued si tu m'entends ) qu'on me montre qu'un inner est plus rapide qu'une condition de jointure ou vice et versa

    SELECT l.Nom, c.Quantite, cl.Nom, c.Prenom
    FROM Logiciel AS l
    INNER JOIN Commande AS c INNER JOIN Client AS cl
    ON c.Num_Client = cl.Num_Client
    ON l.Num_Logiciel = c.Num_Logiciel

    et

    SELECT l.Nom, c.Quantite, cl.Nom, c.Prenom
    FROM Logiciel AS l, Client AS cl, Commande AS c
    WHERE c.Num_Client = cl.Num_Client
    AND l.Num_Logiciel = c.Num_Logiciel

    pcq partout ou je look on ne favorise pas l une par rapport a l autre

    - elle est pas belle ma ptite condition de jointure taper vite fait comme ca, en plus elle a de beaux grands yeux -


    ici ca papote des jointures de toute sorte et pour les jointures d'egalité, les 2 possibilités sont montrées
    niafron, 23 Octobre 2003
    #17
  18. Offline
    titloup Elite
    Ouais... une VUE c'est plus rapide et tu peux l'utiliser comme une table... donc faire des requêtes dessus par la suite... :wink:
    titloup, 23 Octobre 2003
    #18
  19. Offline
    La Poubelle Elite
    Niafron,

    Moi pas clair ... jamais :p (te plains pas j'essaye de pas parler en binaire )

    Je peux pas te mettre le code sql de requetes SQL que j'ai déjà fait pour une gestion assez complexe, mais bon je vais t'expliquer le fonctionnement.

    Il y a plus ou moins 5 tables imbriquées avec des jolis sommes et des moyennes avec un tas de joli comparaison. Et la seul solution est d'utiliser les JOIN .

    Qu'importe la vitesse entre JOIN et WHERE, JOIN est juste plus malléable (parametrablee) que WHERE (Left, right, et inner). De plus, si tu as plusieurs condition dans ton where, tes comparaisons de clé seront plus facile (évidente) qu'avec un where.Il est plus facile de programmer (par faineantise) toujours de la même façon pour s'y retrouver plus facilement.

    Imagine (c'est du vécu et c'est chiant) que tu dois restructurer les données d'un site et que dans les commandes SQL tu tombes une fois sur un where avec les champs primaires et de temps en temps des JOIN. T'as envie de balancer l'ecran par la fenetre.
    La Poubelle, 23 Octobre 2003
    #19
  20. Offline
    niafron ex membre

    oui mais ca le choix ce fait suivant le contexte, ici on parle de truc tout bete avec ptite gestion de FK

    :shock:

    tout a fait d accord ( de mon cote c avec des condition de jointure que je travaille le plus souvent ;) )

    je comprend mais ca si un pgm code comme un porc sans une ligne de commentaire ou de clarete ds ke code ben ca fo flageler le codeur :p


    mais je comprend tout a fait que des fois un inner join peut etre + easy mais bon ds la plupart des cas une bonne condition de jointure et fait peter simone
    niafron, 23 Octobre 2003
    #20
Statut de la discussion:
Fermée.