|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Étudiant Inscription : juillet 2011 Messages : 46 ![]() |
Bonjour à tous,
je dois réaliser des requêtes sur une base de données oracle express. Cependant, je sèche complètement sur une question. Voici ma base de données : DRAGONS :
REPAS:
La requête doit retourner le nom des dragons timides ayant des relations avec tous les dragons macho. (Ayant des relations = est aimé ou aime) Bien évidemment nous voyons en relationnel qu'il s'agit d'une division. J'avais penser à du count( ) dans la requête mais je ne vois pas du tout comment m'y prendre. Je ne vous demande pas forcement de me donner la solution, mais des petites indications ? Merci à tous
__________________
Exoskull vaincra |
|
00
|
|
|
#2 | |
![]() ![]() |
Indice qui devrait t'aider à construire ta requête :
Citation:
Les dragons timides dont le nombre de relations avec des dragons machos est égal au nombre de dragons machos. Il faut effectivement COUNT et GROUP BY ainsi que HAVING. Il y a des exemples dans le forum mais je ne saurais pas trop te dire sur quels critères les chercher. Peut-être avec ces trois mots du langage SQL que je viens de citer ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
|
10
|
|
|
#3 | ||||||
|
Membre du Club
![]() Étudiant Inscription : juillet 2011 Messages : 46 ![]() |
Oui, j'étais parti sur les mêmes idées.
Pour ce qui est du nombre de dragon macho, j'ai la requête : Code :
Ce que je souhaiterai, c'est savoir comment je peux lister les dragons avec qui les dragons timide ont des relations. Ensuite, je mets un group by dragon, et ensuite un having sur le count. j'avais pensé à un truc du genre : Code :
![]() EDIT : En fait j'ai peut-être trouvé la bonne requête : Code :
__________________
Exoskull vaincra |
||||||
|
00
|
|
|
#4 | |||||||
![]() ![]() |
Reprenons ce que j'ai dit tout à l'heure :
Citation:
Code :
Code :
3) On ne retient que les dragons timides qui ont autant de relations que le nombre de dragons machos : Code :
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|||||||
|
10
|
|
|
#5 |
![]() ![]() Inscription : octobre 2008 Messages : 1 508 ![]() |
La requête UNION ne serait pas un peu lourdingue par rapport au besoin?
Il paraitrait plus naturel et plus simple de faire un OR dans la condition de jointure (aimant OR aimé). |
|
|
00
|
|
|
#6 |
|
Membre du Club
![]() Étudiant Inscription : juillet 2011 Messages : 46 ![]() |
Merci beaucoup à toi CinePhil ! Tes explications sont très clairs.
Pour enlever l'union, et le remplacer par une condition OR. Je ne vois pas comment faire, j'ai réfléchis un peu sans trouver de réponse.
__________________
Exoskull vaincra |
|
00
|
|
|
#7 |
![]() ![]() |
J'avais pensé le faire sans UNION au début mais comme c'est une condition double et sur deux instances de la table dragons, je n'ai pas trouvé comment faire (sans chercher des heures non plus).
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
10
|
|
|
#8 | ||
![]() ![]() Inscription : octobre 2008 Messages : 1 508 ![]() |
Avec le OR, je voyais une condition de ce style:
Code :
|
||
|
|
00
|
|
|
#9 |
|
Membre du Club
![]() Étudiant Inscription : juillet 2011 Messages : 46 ![]() |
Je ne comprends pas la requête.
Car la jointure va se faire de quelle manière ? Comment le OR dans le inner join va fonctionner ?
__________________
Exoskull vaincra |
|
00
|
|
|
#10 |
![]() ![]() Inscription : octobre 2008 Messages : 1 508 ![]() |
Conceptuellement, le "OU" vient de l'énoncé qui dit que "être en relation c'est est aimé ou aime", c.a.d que le 1er dragon doit être dans la colonne dragon_aimant ou dans la colonne dragon_aime, sachant que l'autre dragon doit figurer dans l'autre colonne.
Le souci avec cette formulation vient peut-être du fait que tu n'as pratiqué jusqu'ici que du JOIN ou le ON serait limité à une équijointure (c.a.d une colonne de la table de gauche=une autre colonne de la table droite), mais en réalité on peut mettre n'importe quelle condition dans la clause ON. Quand la condition est vraie, l'exécuteur garde les lignes et quand elle est fausse il les élimine, peu importe la complexité de la condition. |
|
|
00
|
|
|
#11 |
|
Membre du Club
![]() Étudiant Inscription : juillet 2011 Messages : 46 ![]() |
En fait on a vu les jointures avec des conditions mais que en relationnel. En SQL, tu as raison, c'est la première fois que je vois ça.
Merci, c'est vrai que ta requête est beaucoup plus courte, et je la trouve très compréhensible maintenant. Bonne journée à tous
__________________
Exoskull vaincra |
|
00
|
Copyright © 2000-2012 - www.developpez.com