SELECT FROM plusieurs tables?

Statut
N'est pas ouverte pour d'autres réponses.

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
 

La Poubelle

Pou'r allé Danché
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
 

guslinux

Gamerz'ien
=> PHP debutant !!
 
1er
OP
S

Styleman

Touriste
guslinux a dit:
=> PHP debutant !!
la y'a pour alimenter plusieur, mais pas interroge, je ne savais pas ke ct la meme chose...

Merci AGain
 
N

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
 

[J J]

Fan à Toc
Le plus simple est de créer un vue (et pour rester assez propre)

CREATE VIEW machin
AS
...
 
1er
OP
S

Styleman

Touriste
niafron a dit:
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
ok merci bcp!!!
 
niafron a dit:
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

Clair ;)
 

La Poubelle

Pou'r allé Danché
TITM4v3rick a dit:
niafron a dit:
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

Clair ;)
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.
 

SUEd

Touriste
niafron a dit:
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
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';
 
N

niafron

ex membre
SUEd a dit:
niafron a dit:
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
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';
avec un peu de rigueur ds la programmation ben tu c la gere comme un grand la FK ;)
 
N

niafron

ex membre
AGain a dit:
TITM4v3rick a dit:
niafron a dit:
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

Clair ;)
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.
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
 

SUEd

Touriste
niafron a dit:
avec un peu de rigueur ds la programmation ben tu c la gere comme un grand la FK ;)
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 ;)
 
Fnac -> SQL "Frédéric Brouard"
 

La Poubelle

Pou'r allé Danché
niafron a dit:
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
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.
 
N

niafron

ex membre
AGain a dit:
niafron a dit:
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
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.
oups g confondu les jointure

mais bon un de tes anciens post etait pas clair aussi

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.

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
 

titloup

Elite
[J-J a dit:
]Le plus simple est de créer un vue (et pour rester assez propre)

CREATE VIEW machin
AS
...
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:
 

La Poubelle

Pou'r allé Danché
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.
 
N

niafron

ex membre
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 .

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

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
:shock:

Il est plus facile de programmer (par faineantise) toujours de la même façon pour s'y retrouver plus facilement.
tout a fait d accord ( de mon cote c avec des condition de jointure que je travaille le plus souvent ;) )

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.
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
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut