WHERE EXISTS (SQL)

WHERE EXISTS (SQL) - SQL/NoSQL - Programmation

Marsh Posté le 03-03-2016 à 19:07:08    

Bonjour,
 
Je me permets de vous solliciter afin de m'aider à comprendre la fonction "where exists" en SQL.
 
Dans ma compréhension des choses, il est indispensable de faire une jointure.
 
Mais...un ami m'a mis le doute.
 
Est-ce que quelque chose comme ça, ça peut passer?
 
Select Colonne A, Colonne B  
from TABLE A  
where exists  (select * from TABLE B where Colonne A > 2)
;
 
Sachant que la colonne A des deux tables a le même nom et le même genre de données.
 
Merci de votre aide ! :bounce:  
 

Reply

Marsh Posté le 03-03-2016 à 19:07:08   

Reply

Marsh Posté le 03-03-2016 à 20:49:10    

SI tu as un doute, utilise le nom complet

Code :
  1. SELECT A.ColonneA, A.ColonneB
  2. FROM A
  3. WHERE EXISTS(SELECT * FROM  B WHERE B.ColonneA > 2)


Au passage, c'est assez déguelasse comme requête : tu retournes toutes les lignes de A , à condiion que V ait au moins une ligne > 2  
Mais j'imagine qu' c'est juste un exemple


---------------

Reply

Marsh Posté le 03-03-2016 à 22:51:52    

Merci Flo mais je ne suis pas sûr de bien comprendre...

 

Car du coup y a aucune jointure entre la table A et la table B.

 

Cela fonctionne tout de même? Le "matching" se fait entre la colonne A de la table B et la colonne A de la table A ?

 


Moi j'aurais ajouté la jointure "a.colonne A = b.colonne" mais si je comprends ce que tu me dis, ce n'est pas nécessaire?

 
Code :
  1. SELECT A.ColonneA, A.ColonneB
  2. FROM A
  3. WHERE EXISTS(SELECT * FROM  B WHERE a.colonne A = b.colonne A AND B.ColonneA > 2)


Message édité par Sugoy le 03-03-2016 à 23:00:19
Reply

Marsh Posté le 03-03-2016 à 22:59:08    

a ben non, si tu veux qu'il y aune jointure, faut lui dire. Tu peux décrire ce que tu veux en français ?  
 
Tu utilise quel sql : mysql (mouais) ? sql server (bof)  ? oracle (beurk)? postgresql (bien)?


---------------

Reply

Marsh Posté le 03-03-2016 à 23:01:31    

Alors je t'explique le contexte.
C'est un "examen" sur papier.

 

Il y a des formules SQL et je dois dire si c'est bon ou mauvais.

 

Et la requête qui est proposée est

 
Code :
  1. SELECT  ColonneA, ColonneB
  2. FROM TABLE A Alias
  3. WHERE EXISTS(SELECT * FROM  TABLE B WHERE ColonneB > 2)
 

Alors déjà je trouve bizarre que la tabvle A soit associée à un alias alors qu'il ne sert à rien.

 

Ensuite je trouve bizarre la colonne B liée à deux tables différentes.

 

Si on ne fait pas la jointure ça marche tout de même?
Le requêteur va juste regarder les valeurs de la colonneB (table B) sans se soucier du matching avec la table A?

 

EDIT : bon, je crois que j'ai compris. La sous requête n'est pas obligée d'avoir un rapport...C'est juste une condition pour savoir si la requête ramène quelque chose...

 

En gros : Select * from TABLE A where exist (select * from table B where colonne A >2) ça veut dire que si dans la table B, il y a au moins une ligne dans la colonne A > 2, alors la requête sortira quelque chose.

 

Ca ne veut pas dire que y aura un matching entre la table A et la table B.

 

J'ai bon?

 


Message édité par Sugoy le 03-03-2016 à 23:11:18
Reply

Marsh Posté le 03-03-2016 à 23:09:29    

J'en profite pour une autre question sur le SQL.
 
http://sql.sh/cours/case
 
CASE
WHEN
WHEN
ELSE
END
 
 
C'est toujours la structure? Le ELSE est indispensable?
On ne peut pas faire un  
 
CASE
WHEN
WHEN
WHEN
END
 
?
 
Exemple :
 

Code :
  1. SELECT champ 1,
  2. CASE WHEN champ 2 = 'A' THEN 1
  3.        WHEN champ 2 = 'B' THEN 2
  4.        WHEN champ 2 = 'C' THEN 3
  5. END
  6. FROM table X
  7. GROUP BY champ 1


 
 
Merci ! :bounce:

Reply

Marsh Posté le 04-03-2016 à 08:07:23    

1/ c est ca. Si tu veux tu peux ajouter des conditions genre where a.colonneb >b.colonneb
2/ pas obligatoire


---------------

Reply

Marsh Posté le 04-03-2016 à 08:18:55    

Merci d'avoir pris le temps de me répondre ! :hello:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed