question de l'algèbre relationnelle
-
16-10-2019 - |
Question
Voici le schéma relationnel donné:
employee (person-name , street, city)
works (person-name, company-name, salary)
company (company-name, city)
manages (person-name, manager-name)
Q:. Trouver les noms de tous les employés qui vivent dans la même ville et sur la même rue que faire leurs gestionnaires
Je trouve la solution quelque part:
mais la solution semble erronée qui est juste après la deuxième bécarre-join il n'y a pas de sélection signe de déclaration et juste après ce signe, un apparaît sous-jacentes 0_o, en ce sens, d'où vient cet attribut manager-name
vient ?. Je suis complètement perdu.
Ma solution semble être depuis longtemps je le produit cartésien, et la requête est un peu longue (dont je ne suis même pas sûr qu'il est bon ou mauvais) :(
La solution
AVERTISSEMENT: Ne jamais Learned L'algèbre relationnelle, mais il semble intéressant
A partir du schéma et votre question, voici ce que le SQL doit être:
SELECT
emp_mgr.person_name
FROM
manages emp_mgr
INNER JOIN employee emp ON emp_mgr.person_name = emp.person_name
INNER JOIN employee mgr ON emp_mgr.manager_name = mgr.person_name
WHERE
emp.street = mgr.street AND
emp.city = mgr.city
;
Voici une autre requête que seules les utilisations JOIN, aucune clause WHERE:
SELECT
emp.person_name
FROM
(SELECT A.person_name,B.street,B.city FROM manages A
INNER JOIN employee B ON A.person_name = B.person_name) emp
NATURAL JOIN
(SELECT A.manager_name,B.street,B.city FROM manages A
INNER JOIN employee B ON A.manager_name = B.person_name) mgr
;
La première requête obtient tous les employés qui sont gérés et leurs gestionnaires sous la forme d'un produit cartésien. Il cherche ensuite une rue commune et de la ville.
Le second recueille les dossiers du personnel requête (nom, rue, ville) des employés et de leurs gestionnaires et effectue une jointure naturelle entre les employess et leurs gestionnaires à l'aide (rue, ville).
Si vous pouvez transalate les deux requêtes retour à l'algèbre relationnelle, je pense que vous aurez ce que vous recherchez. Je crois que le second peut être de meilleure aide.