查找具有特定字母的员工姓名
Find the name of the employees with a particular letter
我有这样的模式:
Employee (Empno, Empname, City)
Project (Pno, Pname)
Part (Partno, Partname, Color)
Use (Pno, Partno)
Works (Empno, Pno)
根据这些模式,我创建了一个示例表:
目标是找到没有员工工作且名称以 'S'
开头的项目的名称
我使用的是 ORACLE 11g 快捷版。
在这里我使用了这个查询:
对于名称:
Select DISTINCT Pname FROM
(
SELECT w.Empno, p.Pno, p.Pname, e.Empname
FROM Works w
LEFT JOIN Project p ON w.Pno=p.Pno
LEFT JOIN Employee e ON e.Empno=w.Empno
)
WHERE Empname not like 'S%';
如果你想想怎么解释这个过程。有几种方法可以解决这个问题,包括:
- 您将从每个
Projects
开始,找出 Employees
名称以 S
开头的项目中是否不存在 Works
的人.您可以使用 NOT EXISTS
. 执行此操作
或
- 同样,从
Project
开始,如果有的话,使用 LEFT OUTER JOIN
查找项目中的 Works
人员及其相应的 Employees
详细信息(但从Project
) 并在 JOIN
条件下过滤以 S
开头的员工姓名。然后 GROUP BY
项目的主键并找到那些项目 HAVING
a COUNT
零个匹配的员工。
由于这似乎是一道作业题,所以我会把剩下的留给你完成。
我有这样的模式:
Employee (Empno, Empname, City)
Project (Pno, Pname)
Part (Partno, Partname, Color)
Use (Pno, Partno)
Works (Empno, Pno)
根据这些模式,我创建了一个示例表:
目标是找到没有员工工作且名称以 'S'
开头的项目的名称我使用的是 ORACLE 11g 快捷版。 在这里我使用了这个查询: 对于名称:
Select DISTINCT Pname FROM
(
SELECT w.Empno, p.Pno, p.Pname, e.Empname
FROM Works w
LEFT JOIN Project p ON w.Pno=p.Pno
LEFT JOIN Employee e ON e.Empno=w.Empno
)
WHERE Empname not like 'S%';
如果你想想怎么解释这个过程。有几种方法可以解决这个问题,包括:
- 您将从每个
Projects
开始,找出Employees
名称以S
开头的项目中是否不存在Works
的人.您可以使用NOT EXISTS
. 执行此操作
或
- 同样,从
Project
开始,如果有的话,使用LEFT OUTER JOIN
查找项目中的Works
人员及其相应的Employees
详细信息(但从Project
) 并在JOIN
条件下过滤以S
开头的员工姓名。然后GROUP BY
项目的主键并找到那些项目HAVING
aCOUNT
零个匹配的员工。
由于这似乎是一道作业题,所以我会把剩下的留给你完成。