使用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?

表示。您可以使用 employee1employee2 作为 employee 别名 ,这将允许您对同一个 table 进行多个独立引用,但是无论您使用多少别名,数据库中仍然只有一个 employee table。