设有数据库包括以下关系模式: 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,包括系代码、系名、系教师 平均薪资三列属性 。
时间: 2023-11-27 21:53:24 浏览: 476
1. (1)查询工资超过 5000 的教师代码及年龄的关系代数表达式为:$$\pi_{Tno, Tage}(\sigma_{Salary>5000}(Work)\bowtie Teacher)$$ (2)查找不在计算机系工作的教师代码的关系代数表达式为:$$\pi_{Tno} (Teacher - \pi_{Tno}(\sigma_{Dname='计算机系'}(Department \bowtie Work)))$$
2. (1)查询计算机系的系主任代码的 SQL 语句为:
```sql
SELECT Tno
FROM Department
WHERE Dname = '计算机系'
```
(2)对工作表的内容进行修改,若入职年份在 2020 年之前,将其工资上调 10% 的 SQL 语句为:
```sql
UPDATE Work
SET Salary = Salary * 1.1
WHERE Year < 2020
```
(3)按年份统计每年入职的教师有多少位,结果按照入职年份降序排列的 SQL 语句为:
```sql
SELECT Year, COUNT(Tno) AS '教师数量'
FROM Work
GROUP BY Year
ORDER BY Year DESC
```
(4)查询计算机系姓张的老师信息的 SQL 语句为:
```sql
SELECT Teacher.Tno, Teacher.Tname, Teacher.Tage, Teacher.Tsex
FROM Teacher, Department, Work
WHERE Teacher.Tno = Work.Tno
AND Department.Dno = Work.Dno
AND Department.Dname = '计算机系'
AND Teacher.Tname LIKE '张%'
```
(5)建立各系教师的平均薪资视图的 SQL 语句为:
```sql
CREATE VIEW D_T_Salary AS
SELECT Department.Dno, Department.Dname, AVG(Work.Salary) AS '平均薪资'
FROM Department, Work
WHERE Department.Dno = Work.Dno
GROUP BY Department.Dno, Department.Dname
```
阅读全文