实验需要利用学生关系模式Student、Course和Score三个基本表及相关数据。 要求:建立通信工程系选修了“计算机基础”课程且成绩在80分以上的学生的视图,视图中包括sno,sname,cname,grade。用select命令显示视图中所有数据。
时间: 2024-10-22 18:23:36 浏览: 72
首先,我们需要假设学生关系模式Student包含`sno`(学号)、`sname`(姓名),而Course包含`cname`(课程名)。Score表则连接这三个表,用于存储学生对课程的成绩,其结构可能有`sno`, `course_id`(关联Course的外键)和`grade`(成绩)等字段。
为了满足你的需求,我们可以创建一个视图,该视图将过滤出通信工程系(假设dept字段表示院系)的学生,他们选择了"计算机基础"(假设为特定的course_id或cname)并且成绩在80分以上。视图的定义语句如下:
```sql
CREATE VIEW HighGradeComEngView AS
SELECT Student.sno, Student.sname, Course.cname, Score.grade
FROM Student
JOIN Score ON Student.sno = Score.sno
JOIN Course ON Score.course_id = Course.course_id
WHERE Student.dept = '通信工程' AND Course.cname = '计算机基础' AND Score.grade > 80;
```
现在你可以通过`SELECT`语句从这个视图中获取所有符合条件的数据:
```sql
SELECT sno, sname, cname, grade
FROM HighGradeComEngView;
```
这将展示通信工程系且计算机基础课程分数超过80分的学生的学号、姓名、课程名称和成绩。
相关问题
1. 创建关系表student、course、sc表,具体的属性见课本,要求第一、用可视化的界面创建 第二,用SQL语言来创建基本表,并修改student表插入新的属性列address(地址),然后删除新的属性列address; 2. 创建关系表并插入3条以上的元组,注意外码和主码的取值。 3. 练习使用select实现的单表查询; (1)查询计算系姓“王”的所有学生的信息; (2)查询考试成绩有不及格的学生的学号; (3)查询课程名称为“DB_design”的课程信息; (4)查询选修了3号课程的学生姓名,并按照学号降序排列 (5)统计每个系的男生总人数 (6)分别统计每个系的男生和女生总人数、男生最大年龄、女生最大年龄,并按照系降序排序
好的,您的问题我已经收到了!以下是对您的问题的回答:
1.
(1)使用可视化界面创建表:
- 学生表student:id、name、sex、birthday、address、department
- 课程表course:id、name、teacher、credit
- 成绩表sc:id、student_id、course_id、score
(2)使用SQL语言创建基本表:
- 学生表student:
```
CREATE TABLE student (
id INT PRIMARY KEY,
name VARCHAR(20),
sex VARCHAR(10),
birthday DATE,
address VARCHAR(100),
department VARCHAR(20)
);
```
- 课程表course:
```
CREATE TABLE course (
id INT PRIMARY KEY,
name VARCHAR(50),
teacher VARCHAR(20),
credit INT
);
```
- 成绩表sc:
```
CREATE TABLE sc (
id INT PRIMARY KEY,
student_id INT,
course_id INT,
score INT,
FOREIGN KEY (student_id) REFERENCES student(id),
FOREIGN KEY (course_id) REFERENCES course(id)
);
```
- 修改student表插入新的属性列address(地址):
```
ALTER TABLE student ADD COLUMN address VARCHAR(100);
```
- 删除新的属性列address:
```
ALTER TABLE student DROP COLUMN address;
```
2. 创建关系表并插入3条以上的元组,注意外码和主码的取值。
以学生表student为例,创建并插入3条以上的元组:
```
CREATE TABLE student (
id INT PRIMARY KEY,
name VARCHAR(20),
sex VARCHAR(10),
birthday DATE,
department VARCHAR(20)
);
INSERT INTO student VALUES (1, '张三', '男', '2000-01-01', '计算机科学与技术');
INSERT INTO student VALUES (2, '李四', '女', '2001-02-02', '软件工程');
INSERT INTO student VALUES (3, '王五', '男', '2002-03-03', '数据科学与大数据技术');
```
3. 练习使用select实现的单表查询:
(1)查询计算系姓“王”的所有学生的信息:
```
SELECT * FROM student WHERE department = '计算机科学与技术' AND name LIKE '王%';
```
(2)查询考试成绩有不及格的学生的学号:
```
SELECT DISTINCT student_id FROM sc WHERE score < 60;
```
(3)查询课程名称为“DB_design”的课程信息:
```
SELECT * FROM course WHERE name = 'DB_design';
```
(4)查询选修了3号课程的学生姓名,并按照学号降序排列:
```
SELECT s.name FROM student s
INNER JOIN sc ON s.id = sc.student_id
WHERE sc.course_id = 3
ORDER BY s.id DESC;
```
(5)统计每个系的男生总人数:
```
SELECT department, COUNT(*) FROM student WHERE sex = '男' GROUP BY department;
```
(6)分别统计每个系的男生和女生总人数、男生最大年龄、女生最大年龄,并按照系降序排序:
```
SELECT department,
SUM(CASE WHEN sex='男' THEN 1 ELSE 0 END) AS male_count,
SUM(CASE WHEN sex='女' THEN 1 ELSE 0 END) AS female_count,
MAX(CASE WHEN sex='男' THEN YEAR(NOW()) - YEAR(birthday) ELSE 0 END) AS male_max_age,
MAX(CASE WHEN sex='女' THEN YEAR(NOW()) - YEAR(birthday) ELSE 0 END) AS female_max_age
FROM student
GROUP BY department
ORDER BY department DESC;
```
打开查询分析器,在查询窗格中输入下列SQL语句,然后运行,输出结果。 CREATEVIEWCS_Student AS SELECTSno,Sname,Ssex,Sage FROMStudent WHERESdept='CS' WITHCHECKOPTION 以下操作只需写出查询分析器方法的SQL操作语句。 (2)建立计算机系选修了1号课程的学生的视图CS_S1。(注:使用上题建立的视图 CS_Student。) (3)删除视图CS_S1。 (4)在计算机系学生视图CS_Student中找出选修了“数据库”课程且成绩在90分以上 的学生。 (5)向计算机系学生视图CS_Student中插入一个新生记录,其中学号为95030,姓名为 张三,年龄为20,男生。 (6)在计算机系学生视图CS_Student中,将学号为95030的学生姓名改为“李四”。 (7)删除计算机系学生视图CS_Student中学号为95030的学生记录。 2.在供应系统GYXT数据库中进行如下操作: (1)创建视图VSJ,它记录了给“三建”工程项目的供应零件的情况,包括供应商号、零 件号和零件数量。 (2)对VSJ视图查询S1供应商的供货情况。
(2) 建立计算机系选修了1号课程的学生的视图CS_S1。
```
CREATE VIEW CS_S1 AS
SELECT S.Sno, S.Sname, S.Ssex, S.Sage
FROM CS_Student S, SC C
WHERE S.Sno = C.Sno AND C.Cno = '1';
```
(3) 删除视图CS_S1。
```
DROP VIEW CS_S1;
```
(4) 在计算机系学生视图CS_Student中找出选修了“数据库”课程且成绩在90分以上的学生。
```
SELECT S.Sno, S.Sname, S.Ssex, S.Sage, C.Score
FROM CS_Student S, SC C, Course R
WHERE S.Sno = C.Sno AND C.Cno = R.Cno AND R.Cname = '数据库' AND C.Score >= 90;
```
(5) 向计算机系学生视图CS_Student中插入一个新生记录,其中学号为95030,姓名为张三,年龄为20,男生。
```
INSERT INTO CS_Student (Sno, Sname, Ssex, Sage) VALUES ('95030', '张三', '男', 20);
```
(6) 在计算机系学生视图CS_Student中,将学号为95030的学生姓名改为“李四”。
```
UPDATE CS_Student SET Sname = '李四' WHERE Sno = '95030';
```
(7) 删除计算机系学生视图CS_Student中学号为95030的学生记录。
```
DELETE FROM CS_Student WHERE Sno = '95030';
```
(1) 创建视图VSJ,它记录了给“三建”工程项目的供应零件的情况,包括供应商号、零件号和零件数量。
```
CREATE VIEW VSJ AS
SELECT S.SupplierNo, P.PartNo, SP.Quantity
FROM Supplier S, Part P, SP
WHERE S.SupplierNo = SP.SupplierNo AND P.PartNo = SP.PartNo AND SP.ProjectName = '三建';
```
(2) 对VSJ视图查询S1供应商的供货情况。
```
SELECT P.PartNo, SP.Quantity, S.SupplierName
FROM Supplier S, Part P, SP, VSJ
WHERE S.SupplierNo = VSJ.SupplierNo AND P.PartNo = VSJ.PartNo AND SP.PartNo = P.PartNo AND S.SupplierName = 'S1';
```
阅读全文