设有数据库包括以下关系模式: Teacher(Tno, Tname, Tage, Tsex),教师表,其属性列依次是:教师代码、名字、年龄和性 别。 Department(Dno, Dname, Tno),系表,其属性列依次是:系代码、系名、系主任代码。 Work(Tno, Dno, Year, Salary),工作表,其属性列依次是:教师代码、系代码、入职年份、 工资。 按要求完成下题。注:关系代数和 SQL 语句中出现的表名或属性名均使用英文,不必区分 大小写。 1. 试写出下列查询语句的关系代数表达式: (1)查询工资超过 5000 的教师代码及年龄(3 分) (2)查找不在计算机系工作的教师代码(3 分) 2. 试用 SQL 语句写出下列语句: (1)查询计算机系的系主任代码(2 分) (2)对工作表的内容进行修改,若入职年份在 2020 年之前,将其工资上调 10%(3 分) (3)按年份统计每年入职的教师有多少位,结果按照入职年份降序排列(结果列包括: 入 职年份、教师数量)(3 分) (4)查询计算机系姓张的老师信息(结果列包括: 教师代码、名字、年龄和性别)(3 分) (5)建立各系教师的平均薪资视图,视图命名为 D_T_Salary,包括系代码、系名、系教师 平均薪资三列属性。(3 分)
时间: 2024-01-17 20:04:18 浏览: 46
1. (1)查询工资超过 5000 的教师代码及年龄的关系代数表达式为:
$$\sigma_{Salary>5000}(Teacher\bowtie Work) \bowtie_{Teacher.Tno=Work.Tno} \pi_{Teacher.Tno, Teacher.Tage}(Teacher)$$
(2)查找不在计算机系工作的教师代码的关系代数表达式为:
$$Teacher- (\pi_{Tno}(Department\bowtie Work))$$
2. (1)查询计算机系的系主任代码的 SQL 语句为:
```sql
SELECT D.Tno
FROM Department D
WHERE D.Dname = '计算机系'
```
(2)对工作表的内容进行修改,若入职年份在 2020 年之前,将其工资上调 10% 的 SQL 语句为:
```sql
UPDATE Work
SET Salary = Salary * 1.1
WHERE Year < 2020
```
(3)按年份统计每年入职的教师有多少位,结果按照入职年份降序排列(结果列包括: 入职年份、教师数量)的 SQL 语句为:
```sql
SELECT Year, COUNT(*) AS '教师数量'
FROM Work
GROUP BY Year
ORDER BY Year DESC
```
(4)查询计算机系姓张的老师信息(结果列包括: 教师代码、名字、年龄和性别)的 SQL 语句为:
```sql
SELECT T.Tno, T.Tname, T.Tage, T.Tsex
FROM Teacher T, Department D, Work W
WHERE T.Tname LIKE '张%' AND T.Tno = W.Tno AND W.Dno = D.Dno AND D.Dname = '计算机系'
```
(5)建立各系教师的平均薪资视图,视图命名为 D_T_Salary,包括系代码、系名、系教师平均薪资三列属性的 SQL 语句为:
```sql
CREATE VIEW D_T_Salary AS
SELECT D.Dno, D.Dname, AVG(W.Salary) AS '系教师平均薪资'
FROM Department D, Work W
WHERE D.Dno = W.Dno
GROUP BY D.Dno, D.Dname
```