使用outer join和group by解决查询
Using outer join and group by to solve the query
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
我想用outer join和group by找出下面的信息,可以吗?
获取以下任一员工的 SS 和姓氏
1) 担任部门经理
或
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)我觉得我的union不对,有没有办法改,比如用outer join和group by来得到我需要的
2)另外因为我用了两个empoyees,一个导师告诉我可以用employee1和employee2来区分他们,对吗?无论如何不使用两个员工身份证明?
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个empls,你可以使用ssn,因为它是唯一的!
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 在这里如何为您服务;一个 table 中的一个 returns 行在第二个 table 中有 没有 对应的行,而另一个用于将多行压缩成一个聚合函数。
我也不清楚
2) Also since I use two empoyees, one tutor told me I can use employee1 and employee2 to differentiate them, is that right? Are there anyways not using two employees identification?
表示。您可以使用 employee1
和 employee2
作为 employee
的 别名 ,这将允许您对同一个 table 进行多个独立引用,但是无论您使用多少别名,数据库中仍然只有一个 employee
table。
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
我想用outer join和group by找出下面的信息,可以吗?
获取以下任一员工的 SS 和姓氏
1) 担任部门经理
或
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)我觉得我的union不对,有没有办法改,比如用outer join和group by来得到我需要的
2)另外因为我用了两个empoyees,一个导师告诉我可以用employee1和employee2来区分他们,对吗?无论如何不使用两个员工身份证明?
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个empls,你可以使用ssn,因为它是唯一的!
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 在这里如何为您服务;一个 table 中的一个 returns 行在第二个 table 中有 没有 对应的行,而另一个用于将多行压缩成一个聚合函数。
我也不清楚
2) Also since I use two empoyees, one tutor told me I can use employee1 and employee2 to differentiate them, is that right? Are there anyways not using two employees identification?
表示。您可以使用 employee1
和 employee2
作为 employee
的 别名 ,这将允许您对同一个 table 进行多个独立引用,但是无论您使用多少别名,数据库中仍然只有一个 employee
table。