|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : février 2011 Messages : 13 ![]() |
Bonsoir à tous !
J'ai repris récemment mes études et on a des exercices sur les bases de données... Sauf que... Je n'ai jamais fait de requete SQL auparavant ! Alors j'ai lu, relu les cours, lu plein de sites, trouvé plein d'infos surtout sur developpez et j'ai tenté de faire l'exercice ! L'un d'entre vous (ou plusieurs) pourrait-til me donner son avis ! J'ai trouvé la requete suivante : Code :
Quelle est l’intensité de pluie les jours où l’action Renault a augmenté ? L'intitulé est le suivant : On considère la base de données relationnelle en 3ième forme normale ci-dessous : ACTIONS(nomaction, secteur) COURSACTIONS(nomaction, jour, valeurouverture, valeurfermeture, valeurmin, valeurmax) METEO(jour, tempmin, tempmax, pluie) La table ACTIONS recense les actions cotées en bourse et le secteur d‘activité de leur entreprise. La table COURSACTIONS recense, pour chaque jour et pour chaque action, la valeur de l’action à l’ouverture, la valeur à la fermeture, la valeur la plus basse de l’action ce jour et la valeur la plus haute atteinte par l’action le même jour. La table METEO donne pour chaque jour la température minimale, la température maximale et l’intensité de la pluie à PARIS (‘sans’, ‘faible’, ‘moyen’, ‘forte’). On suppose que la bourse est ouverte tous les jours de l’année. Merci de m'éclairer ! Me suis-je complètement planté ? Ou ai je oublié des données ? Merci d'avance ! Merci beaucoup ! Et bonne soirée ! |
||
|
|
00
|
|
|
#2 |
![]() ![]() |
Oui effectivement vous vous êtes planté, si vous essayez d'exécuter votre requête vous allez récupérer une erreur.
N'avez-vous pas essayé votre code ? UNION permet en effet de réunir les résultats de deux requêtes. La première partie de votre requête me paraît correcte. Pour récupérer les informations liées à la METEO, c'est une jointure qu'il faut faire.
__________________
Email : http://scr.im/waldar |
|
00
|
|
|
#3 | |||||
|
Membre chevronné
![]() Administrateur de base de données Inscription : août 2009 Messages : 404 ![]() |
Bonsoir,
Votre requête ne répond pas à la question. Avant de répondre il faut bien comprendre la question, et y aller étape par étape. Citation:
On vous demande "Quelle est l'intensité de pluie....". Ce morceau de phrase c'est le résultat attendu de la requête, l'information que l'on cherche. C'est la clause SELECT principale. La requête commencera donc certainement par: La première étape se résume à cela. Pour la troisième, il faut que l'on identifie les jours où l'action Renault a augmenté: Code :
Il ne reste plus que l'étape intermédiaire, il faut traduire ".les jours où.." Pour cela j'utilise une sous-requête, avec IN: Code :
Il ne faut pas hésiter à découper les énoncés en petites étapes pour simplifier le travail. PS: Si vous n'avez pas étudié les sous-requêtes (avec IN), décrivez-nous les opérateurs que vous avez étudié, il est certainement possible de l'écrire d'une autre manière. Pour ce genre d'exercice il y a souvent plusieurs réponse possible. |
|||||
|
|
00
|
|
|
#4 |
|
Invité de passage
![]() Inscription : février 2011 Messages : 13 ![]() |
Merci pour votre aide !!!
Je n'ai effectivement pas étudié les sous-requetes. J'étais en train de recherche la partie du cours sur les jointures mais seule la jointure entre deux colonnes d' une même table est expliquée... ! Concernant les opérateurs étudiés il y a : EXISTS Les opérateurs logique : AND, OR, NOT les comparateurs de chaines : BETWEEN, IN, IS NULL, LIKE et les comparateurs arithmétiques : égal, différent, inférieur, etc Il y a également les tris avec ORDER BY Groupe BY aussi J'avais eu une hypothèse en utilisant EXISTS, toujours pour la même requete, à savoir : Code :
SELECT Jour, Pluie FROM METEO WHERE EXISTS (SELECT Jour FROM COURACTIONS WHERE Nomaction = Renault AND Valeur ouverture < Valeur fermeture) Merci encore ! |
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : février 2011 Messages : 13 ![]() |
Et merci encore Oishiiii !
Les 3 grandes étapes colorisée me font paraître la question plus claire ! |
|
|
00
|
|
|
#6 | ||
|
Membre chevronné
![]() Administrateur de base de données Inscription : août 2009 Messages : 404 ![]() |
L'opérateur EXISTS ressemble beaucoup à l'opérateur IN, mais celui-ci n'a vraiment de sens que lorsqu'il est utilisé avec une sous-requête corrélée.
Il faut créer un "lien" entre la requête principale et la sous-requête. C'est au niveau de la clause WHERE, ici sur la colonne jour. Code :
PS: lorsqu'on utilise l'opérateur EXISTS, les colonnes de la clause SELECT de la sous-requête n'ont pas d'importance, on écrit souvent simplement SELECT *. |
||
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : février 2011 Messages : 13 ![]() |
D'accord, donc a faire une sous requete, autant vaut peut etre utiliser IN. La première solution me "parle" plus. Mais j'essaie de comprendre la seconde.
Si je comprend bien la dernière partie du code "AND meteo.jour = coursactions.jour équivaut à une sous requete qui lie " en langage humain" les jours de pluie avec l'action "précédemment choisie "Renault" Peut on choisir indifféremment une requete par rapport à une autre ? Y a t il des préférences d'écriture ? Dans les deux cas, il y a apparemment une sous requete à faire ? Petit à petit je vais comprendre, j'espère, du moins j'essaie. Merci encore ! |
|
|
00
|
|
|
#8 | ||
|
Membre chevronné
![]() Administrateur de base de données Inscription : août 2009 Messages : 404 ![]() |
Peu-importe la syntaxe ou les opérateurs utilisés tant que le résultat est correct.
D'ailleurs lorsque j'étais en BTS, si on avait des difficultés avec les sous-requêtes, notre professeur nous autorisait à créer une vue, ce qui permettait de faire une simple jointure comme ceci: Code :
|
||
|
|
00
|
|
|
#9 | |||||
![]() ![]() |
Citation:
Code :
"Sélectionner la colonne "pluie" de la table "meteo", jointe à la table "coursaction" sur l'égalité des colonnes "jour" des deux tables, où le nom de l'action est "Renault" et ou la valeur de fermeture est supérieure à la valeur d'ouverture.
__________________
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 ! |
|||||
|
00
|
|
|
#10 |
|
Membre éprouvé
![]() Inscription : avril 2008 Messages : 554 ![]() |
Merci pour ces traductions sql en français
![]() C'est si clair pour les débutants comme moi, vu comme ceci |
|
|
00
|
|
|
#11 | ||
|
Invité de passage
![]() Inscription : février 2011 Messages : 13 ![]() |
Je vais tenter de reessayer sur ce modèle.
Peut on formaliser la question "Quelle est la liste des actions qui montent chaque jour de forte pluie ?" par : Code :
Merci ! |
||
|
|
00
|
|
|
#12 | |
![]() ![]() |
Citation:
[Jeopardy] Votre requête répond à la question suivante : "Quelle est la liste des actions qui baissent les jours de forte pluie ?" [/Jeopardy] Attention aussi à la syntaxe des requêtes ! Comme vous n'avez pas mis la valeur textuelle entre apostrophes, le SGBD va vouloir comparer la colonne m.jour à une colonne nommée "forte", ne va pas la trouver et vous renverra un message d'erreur ! Je viens de voir d'ailleurs que j'avais glissé une erreur de syntaxe dans ma requête en collant l'alias "c" aux noms des colonnes "valeurouverture" et "valeurfermeture", erreur que vous avez reproduites ! J'ai corrigé mon message précédent.
__________________
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 ! |
|
|
00
|
|
|
#13 | |||||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour,
Citation:
par exemple : sur 20 jour, il a plu 10 jours Sur ces dix jours, l'action renault a monté 8 fois, les deux autres jours, elle a baissé. Votre requete vous donnera 8 lignes 'renault'... pour repondre à la question Citation:
Citation:
|
|||||
|
|
00
|
|
|
#14 | ||
|
Invité de passage
![]() Inscription : février 2011 Messages : 13 ![]() |
ok, pour la syntaxe, je vais faire gaffe !
Donc si je reprend : Code :
je m'arrache les cheveux !!!! Merci à vous ! |
||
|
|
00
|
|
|
#15 | |||||||
![]() ![]() |
Code :
"Sélectionner les actions du jour "forte" Si tu veux les actions qui ont monté les jours où il y a eu de la pluie forte, il faut faire cette requête : Code :
Citation:
Un exemple de ce que j'ai fait récemment : "Sélectionner les stages où il reste de la place et dont l'une des disciplines couvertes par le stage correspond à la discipline du concours qu'a obtenu l'étudiant connecté." 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 ! |
|||||||
|
00
|
|
|
#16 |
|
Invité de passage
![]() Inscription : février 2011 Messages : 13 ![]() |
Ok,
je pense que j'ai pas l'esprit assez logique ! Pourtant je me creuse la tete ! Mais entre se souvenir des opérateurs et des nom de table et colonnes ! Pffff ! Effectivement, en comparaison de la tienne ca parait rien ! Et pourtant ! Allez je continue ! Peut etre qu'un jour ca me paraitra évident !!!! Merci encore ! |
|
|
00
|
|
|
#17 | ||
|
Invité de passage
![]() Inscription : février 2011 Messages : 13 ![]() |
A la question :Quelle est la liste des actions qui montent chaque jour de forte pluie ?
sur cette requete : Code :
Je me complique peut etre mais la j ai un doute ! |
||
|
|
00
|
|
|
#18 | |
![]() ![]() |
Citation:
S'il y a eu forte pluie les 20 et 21 janvier et que l'action X a monté le 20 mais pas le 21, ta requête va retourner quand même l'action X parce qu'il y a au moins un jour de forte pluie où elle a monté. Si tu ne veux que les actions qui ont monté systématiquement lors de chaque jour où il y a eu une forte pluie, cela veut dire qu'il faut compter pour chaque action le nombre de fois où elle a monté quand il y avait forte pluie, puis ne garder que les actions pour lesquelles ce comptage est égal au nombre total de jours de forte pluie. Une piste, il faut utiliser COUNT, GROUP BY et HAVING. Ça commence à se compliquer mais il y a des exemples sur le forum ou dans les tutos de SQLPro.
__________________
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 ! |
|
|
00
|
|
|
#19 | |
|
Membre chevronné
![]() Administrateur de base de données Inscription : août 2009 Messages : 404 ![]() |
Citation:
|
|
|
|
00
|
|
|
#20 | ||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
ou comme je disais, chercher les actions pour lesquelles il n'existe aucun jour de forte pluie ou elle a baissé...
quelque chose comme : Code sql :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com