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 :
Afficher les différents salaires qu'a eu l'employé dont l'identifiant est 499593 grâce à une jointure.
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).
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 :
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';
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
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
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) ...
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
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 :
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');
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
N'oubliez pas d'activer les erreurs PDO.
Apprendre c'est bien... Comprendre c'est mieux !
Apprendre c'est bien... Comprendre c'est mieux !