Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2959 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Question sur NATURAL JOIN

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Question sur NATURAL JOIN

n°959838
Chronoklaz​m
Posté le 23-01-2005 à 12:42:27  profilanswer
 

Voila, en fait j'aimerais savoir la difference entre NATURAL JOIN et LEFT OUTER JOIN, et aussi un autre truc: là j'ai trouvé un cas ou on ne peut pas fremplacer une requete à base de sous-interrogation par une requete utilisant la jointure, est-ce qu'il y a des cas ou on ne peut pas remplacer une requete avec jointure par une requete à base de sous-interrogations ?

mood
Publicité
Posté le 23-01-2005 à 12:42:27  profilanswer
 

n°959856
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 23-01-2005 à 13:10:58  profilanswer
 

Chronoklazm a écrit :

Voila, en fait j'aimerais savoir la difference entre NATURAL JOIN et LEFT OUTER JOIN


NATURAL JOIN te permet d'omettre la condition de jointure (ON table1.id = table2.id...) si les 2 tables jointes possèdent un champ dont le nom est le même sur chacune d'entre elles. LEFT OUTER JOIN t'oblige à spécifier cette condition
 

Chronoklazm a écrit :


et aussi un autre truc: là j'ai trouvé un cas ou on ne peut pas fremplacer une requete à base de sous-interrogation par une requete utilisant la jointure, est-ce qu'il y a des cas ou on ne peut pas remplacer une requete avec jointure par une requete à base de sous-interrogations ?


la question est plutot : quelle genre de requete ne permet uniquement d'utiliser que la sous requete au lieu de la jointure


Message édité par Harkonnen le 23-01-2005 à 13:35:08

---------------
J'ai un string dans l'array (Paris Hilton)
n°959899
Chronoklaz​m
Posté le 23-01-2005 à 14:07:31  profilanswer
 

OK merci pour JOIN :)
 
Non, en fait c'était l'inverse: ma question était simplement dans quel cas on ne peut pas remplacer une jointure par une sous requete.
 
Sinon pour la sous-requete qu'on ne peut remplacer par une jointure j'ai un exemple :
 
Un truc tout bete ... On a un tableau d'employé (clé prim : matricule) et un tableau de departement (clé prim num_dept).
 
Si on veut les noms et lieux des départements dans lesquels il n'y a pas d'ingénieur. On peut le faire uniquement avec une sous interrogation:

Code :
  1. select nomd, lieu from dept
  2. where dept not in
  3.   (select dept from emp
  4.    where poste = 'INGENIEUR');


 
C'est pas faisable avec une jointure ...
 
Sinon j'ai l'impression que des qu'il y a une jointure possible on peut la remplacer par une sous-interro (enfin un truc avec des SELECT dans les WHERE à gogo...)


Message édité par Chronoklazm le 23-01-2005 à 14:08:25

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°959960
ToxicAveng​er
Posté le 23-01-2005 à 15:10:08  profilanswer
 

Chronoklazm a écrit :

OK merci pour JOIN :)
 
Non, en fait c'était l'inverse: ma question était simplement dans quel cas on ne peut pas remplacer une jointure par une sous requete.
 
Sinon pour la sous-requete qu'on ne peut remplacer par une jointure j'ai un exemple :
 
Un truc tout bete ... On a un tableau d'employé (clé prim : matricule) et un tableau de departement (clé prim num_dept).
 
Si on veut les noms et lieux des départements dans lesquels il n'y a pas d'ingénieur. On peut le faire uniquement avec une sous interrogation:

Code :
  1. select nomd, lieu from dept
  2. where dept not in
  3.   (select dept from emp
  4.    where poste = 'INGENIEUR');


 
C'est pas faisable avec une jointure ...
 


 
Euh bien sur que si...
 

Code :
  1. select nomd, lieu from dept
  2. inner join emp on emp.dept = dept.dept
  3. where emp.poste <> 'INGENIEUR'


 
 

n°959972
Chronoklaz​m
Posté le 23-01-2005 à 15:20:49  profilanswer
 

Pourtant ca me donne pas la meme chose :(


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°959983
ToxicAveng​er
Posté le 23-01-2005 à 15:40:12  profilanswer
 

ah oui j'ai pas lu ton post en entier, j'ai fait que lire la requete. En remplacant le "inner join" par un "left outer join" ca va renovyer en plus les departements n'ayant pas d'employé (donc pas d'ingénieur). Ca correspondra ptet plus à ce que tu veux :o

n°959993
Chronoklaz​m
Posté le 23-01-2005 à 16:01:02  profilanswer
 

Code :
  1. select distinct nomd, lieu from dept
  2. left outer join emp on emp.dept = dept.dept
  3. where emp.poste != 'INGENIEUR'


 
Ca me zappe un nom de departement (par rapport a la version de sous-interro) en plus de donner les dept n'ayant pas d'employé ...


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°959998
Beegee
Posté le 23-01-2005 à 16:04:19  profilanswer
 

Essaye ça :
 

Code :
  1. select distinct nomd, lieu from dept
  2. left join emp on emp.dept = dept.dept
  3. where emp.poste = 'INGENIEUR'
  4. and emp.dept is null;

n°960001
Chronoklaz​m
Posté le 23-01-2005 à 16:12:52  profilanswer
 

J'ai testé  

Code :
  1. select distinct nomd, lieu from dept 
  2. left join emp on emp.dept = dept.dept 
  3. where emp.poste = 'INGENIEUR'
  4. and emp.dept is not null;


 
Sans le not il me renvoyé rien. Sinon s'est toujours pareil.
 


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Question sur NATURAL JOIN

 

Sujets relatifs
[C] Question tte conne sur une recursivité !question sur le stockage des fichiers pour un site web
matlab: petite question mais qui commence à m'enerver..question sur visual basic !
[MFC] Questions de débutant... (1 question résolue sur 2)Question de code php
Question sur les fonctions??Question divers pour débutant
question toute bete[C/Linux]Question sur les pthread
Plus de sujets relatifs à : Question sur NATURAL JOIN


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR