Partage
  • Partager sur Facebook
  • Partager sur Twitter

demande d'aide

Recherchez des données à l'aide de requêtes SQL

28 février 2019 à 18:28:43

Bonjour tout le monde,

je suis entrain de faire l'activité sur le cours : initiez vous à l'algèbre relationnelle avec langage SQL

je bloque sur les questions suivantes :

  1. Afficher les différents salaires qu'a eu l'employé dont l'identifiant est 499593 grâce à une jointure.
  2. Grâce à une jointure, produisez une table indiquant le ou les départements dans lesquels a travaillé l'employé dont l'identifiant est 499902 (la table doit contenir également les dates de début et de fin d'embauche dans chacun des départements).
  3. En utilisant une agrégation, trouver combien de personnes ont pour nom de famille "Gewali" (le nom de famille est donné dans la colonne last_name de la table "employees").


Ces tables sont résumées dans ce schéma :

Schéma de la base de donnée de l'entreprise

question 1:

je voudrais savoir si on doit utiliser une jointure externe totale ou non?

j'ai pondu ceci:

SELECT * FROM employees emp_no '499593' WHERE '499593'.emp_no = salaries.'499593';

je sais qu'il y a une erreur à partir de WHERE

en vous remerciant pour votre aide,

Indiyan

-
Edité par A/M 1 mars 2019 à 11:03:35

  • Partager sur Facebook
  • Partager sur Twitter
1 mars 2019 à 8:56:23

Bonjour,

La requête présentée est ... loufoque ...

Si tu tentes de répondre à la question 1, il faut vraiment (ré)apprendre le langage SQL ...

Pour récupérer les informations concernant l'employé 499593, il faut simplement faire :

SELECT *
FROM employees
WHERE emp_no = 499593

Ensuite pour la jointure vers la table salaries ... et bien revois vite le cours SQL ...

  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
1 mars 2019 à 11:02:29

hello merci déjà pour vos commentaires,

j'essaye de faire mon max pour comprendre correctement.

explication de ma requête: select de la table employees l'employé 499593 (WHERE =sous la condition) = tous les salaires de l'employé 499593

je comprend que j'ai besoin de faire une jointure pour associer table employees et salaries

Qu'en pensez vous de cette requête svp:

SELECT * FROM employees WHERE emp_no = '499593' LEFT JOIN salaries ON employees.emp_no = salaries.emp_no = '499593' ;

traduction ==> select de la table employees quand le n° employé= 499593 et associer par une jointure gauche  la table salaries dans la table employees concernant l'employé n° 499593

  • Partager sur Facebook
  • Partager sur Twitter
1 mars 2019 à 11:36:30

Non ... toujours pas ...

Dans le cours en question : https://openclassrooms.com/fr/courses/4449026-initiez-vous-a-lalgebre-relationnelle-avec-le-langage-sql/4519671-joignez-dans-tous-les-sens-avec-join

Tout est écris, expliqué, avec des exemples ... donc (re)lis le cours ...

Essaye de bien comprendre la structure d'une requête SQL, l'ordre des clauses SELECT, FROM (+jointures), WHERE ...

Après pour la question 1, pas besoin de jointure, tout se trouve dans la même table salaries ...

SELECT *
FROM salaries
WHERE emp_no = 499593

Pour faire une jointure vers la table employees :

SELECT *
FROM
    salaries
        JOIN employees
            ON salaries.emp_no = employees.emp_no
WHERE salaries.emp_no = 499593

-
Edité par Benzouye 1 mars 2019 à 11:36:56

  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
8 avril 2019 à 18:12:52

Bonjour,

je me permet de réutiliser ce sujet pour poser ma question (je m'excuse si l'endroit ne correspond pas, dans ce cas je reposterai sur la bonne partie)

sans spoiler l'exercice en donnant la réponse, j'ai une question de fond :

je comprends bien la consigne suivante qui est très claire : En utilisant une agrégation, trouver combien de personnes ont pour nom de famille "Gewali" (le nom de famille est donné dans la colonne last_name de la table "employees")

MAIS, dois-je considérer que des homonymes sont possibles ? ou (s'il y a des doublons) que ce sont des erreurs et que les employés ont été saisies plusieurs fois par erreur ?

ce n'est pas précisé dans la consigne mais je préfère m'en assurer avant de poster ma réponse.

Cordialement,

Alexandre HULOT

-
Edité par AlexandreHulot 8 avril 2019 à 18:14:02

  • Partager sur Facebook
  • Partager sur Twitter

Apprendre c'est bien... Comprendre c'est mieux !

8 avril 2019 à 19:40:59

Bonjour,

La question est justement d'identifier les homonymes ... "Combien de personnes ont pour nom de famille Gewali" sous entend que plusieurs personnes ont pour nom de famille Gewali, et qu'il faut les compter (count en anglais) avec une fonction d'agrégation ...

Il peut y avoir dans la base un mari et sa femme, deux cousins, trois frères et soeurs, etc. portant le nom Gewali ... ce ne serait pas une erreur de saisie (même si cela reste possible dans la vraie vie) ...

  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
8 avril 2019 à 21:20:41

Bonjour,

je vous remercie pour cette réponse.

Je pense que je me suis mal exprimé (bien que votre réponse puisse répondre partiellement a ce que j'avais en tête)

Quand je parle d'homonyme, je parle de l'association [nom (last_name) / prénom (first_name)]

il est possible que le résultat soit différent si j'applique mon [COUNT()] sur la colonne [emp_no], que si je fais un [COUNT(DISTINCT first_name)]... et je n'oubli pas mon WHERE() pour que le last_name recherché soit bien celui de la consigne.

sachant que je n’utilise que la table de la consigne (pas besoin des autres pour cet exercice). La différence de résultats m'a fait douter, et la question de savoir si cela était un piège m'est venu à l'esprit.

Après, en y réfléchissant, je trouve un nombre impressionnant d'individus portant ce nom avec mes requêtes (>200 si je me souviens bien)... je vais donc d'abord vérifier la véracité de mes résultats...

Merci encore d'avoir pris le temps de me répondre.

Petite MAJ car je viens de me rendre compte que cette question n'est pas intéressante pour la raison suivante : Il suffit de rajouter un paramètre (exemple : date de naissance) pour se rendre compte que ce sont bien des individus uniques... donc l'association NOM/PRÉNOM/DATE DE NAISSANCE me permet d'affirmer que j'ai ma réponse en m'excusant pour le dérangement.

Cordialement,

Alexandre HULOT   

-
Edité par AlexandreHulot 8 avril 2019 à 21:35:52

  • Partager sur Facebook
  • Partager sur Twitter

Apprendre c'est bien... Comprendre c'est mieux !

9 avril 2019 à 14:13:23

L'énoncé porte sur des homonymes sur la colonne last_name ... point ... pas besoin de se prendre la tête avec les autres colonnes ...

  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
14 août 2019 à 22:32:23

Bonjour, 

Je pense avoir bien compris le cours. Mais je comprends pas pourquoi ma requête ne fonctionne pas. 

Pourtant j'ai noté les 2 clés présentes dans chaque table que j'ai utilisé pour ma jointure.

Voici la question : 

  1. Grâce à une jointure, produisez une table indiquant le ou les départements dans lesquels a travaillé l'employé dont l'identifiant est 499902 (la table doit contenir également les dates de début et de fin d'embauche dans chacun des départements).
Voici mon code : 

SELECT *

FROM dept_emp, dept_manager

WHERE (dept_emp.emp_no = dept_manager.emp_no AND dept_emp.dept_no = dept_manager.dept_no AND dept_manager.emp_no = '499593');

Cordialement

  • Partager sur Facebook
  • Partager sur Twitter
21 août 2019 à 9:45:10

thomastripodi a écrit: je comprends pas pourquoi ma requête ne fonctionne pas

C'est à dire ? Tu as une erreur ?

thomastripodi a écrit: le ou les départements dans lesquels a travaillé l'employé dont l'identifiant est 499902 (la table doit contenir également les dates de début et de fin d'embauche dans chacun des départements)

Ta requête ne réponds pas vraiment à cette question ... déjà tu ne précises pas les colonnes demandées, ensuite tu ne traites que la partie "manager". Si l'employé 499593 n'est pas manager rien ne sort ... Il faudrait faire une UNION des deux possibilités

-
Edité par Benzouye 21 août 2019 à 9:45:37

  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
2 novembre 2019 à 13:57:37

Bonjour à tous, 

-Pour la question 2 voici ma requête: 

 SELECT *

FROM employees

WHERE employees.hire_date > 1999-08-01

Cette requête affiche toutes les dates et ne prend pas en compte ma restriction de date 

Bizarre non ? 

Concernant la Q4, je block toujours et ne sais pas ou poser ma restriction pour avoir seulement le compte du 499593.

Pouvez vous préciser quelle partie du cours explique ceci.

SELECT salary, to_date

FROM salaries, employees

WHERE salaries.emp_no = employees.emp_no

AND salaries.emp_no = 499593

GROUP BY salary, to_date;

-
Edité par NB-1 2 novembre 2019 à 14:09:51

  • Partager sur Facebook
  • Partager sur Twitter
2 novembre 2019 à 15:03:30

Tu déterres encore un sujet pour poser ta propre question ... cela fait 2 fois que je te signale de créer ton propre sujet : 1 question = 1 sujet ...

AlexandreVero a écrit:

Cette requête affiche toutes les dates et ne prend pas en compte ma restriction de date

Lis les réponses des autres membres sur les messages que tu as déjà posté ...

https://openclassrooms.com/forum/sujet/recherchez-des-donnees-a-laide-de-requete-sql#message-93493869

Il faut mettre la date entre quotes ...

Et toujours la même remarque sur ta syntaxe SQL ... relis le cours, là c'est encore farfelu ...

Je ferme ce sujet pour déterrage.

  • Partager sur Facebook
  • Partager sur Twitter
Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL