EMPLOYEE (fmane, minit, lname, ssn, birthdate, address, sex, salary, superssn, dno) KEY: ssn
DEPARTMENT (dname, dnumber, mgrssn, mgrstartdate) KEY: dnumber.
PROJECT (pname, pnumber, plocation, dnum) KEY: pnumber.
WORKS_ON (essn, pno, hours) KEY: (essn, pno)
DEPENDENT (essn, dependent-name, sex, bdate, relationship) KEY: (essn, dependent-name
我想使用外连接和分组来查找以下信息,这可能吗?
获取SS和姓氏
员工的姓氏1)担任部门经理
OR
2)担任任何员工的主管
到目前为止我所拥有的是:
Select e.ssn, e.lname, e.fname
From employee e, department d
where d.mgrssn = e.ssn
union(?)
select s.ssn, s.lname, s.fname
From employee e2, employee s
where e.superssn = s.ssn;
1)我认为我的工会是错的,无论如何我可以改变它,比如使用外连接和分组来获得我需要的东西。
2)此外,由于我使用了两个empoyees,一位导师告诉我,我可以使用employee1和employee2来区分它们,是吗?反正有没有使用两名员工身份证明?
答案 0 :(得分:0)
1)。你的UNION
是正确的!但你错过了:
From employee e2, employee s
where e.superssn = s.ssn;
更改为:
From employee e, employee s -- replace e2 to e
where e.superssn = s.ssn;
2)。是的你可以!对我来说,要区分2个人,你可以使用ssn,因为它是独一无二的!
答案 1 :(得分:0)
SELECT DISTINCT e.ssn, e.lname, e.fname
FROM employee e,
(SELECT mgrssn AS mgrssn
FROM department
UNION
SELECT superssn AS mgrssn
FROM employee) m
WHERE e.ssn = m.mgrssn;
应该有用。
我不确定外部联接或GROUP BY如何为您提供服务;一个表返回一个表中的行,第二个表中有 no 对应的行,而另一个表用于通过聚合函数将多行压缩为一个。
我也不确定是什么
2)此外,由于我使用了两个empoyees,一位导师告诉我,我可以使用employee1和employee2来区分它们,是吗?反正有没有使用两名员工身份证明?
装置。您可以使用employee1
和employee2
作为employee
的别名,这样您就可以对同一个表进行多次独立引用,但是您使用了多个别名,数据库中只有一个employee
表。