K1) 利用 studentsdb 数据库中的 curriculum 表创建一个新表c,再利用 grade 表创建一个新表g。 为表c的课程名称列添加唯一约束,约束名为uq_name.
时间: 2024-10-05 13:00:53 浏览: 447
首先,要在`studentsdb`数据库中创建两个新表,`c`表示课程表,`g`表示成绩表,我们需要使用SQL语句。假设`curriculum`表有课程ID(course_id)和其他基本信息,而`grade`表包含学生ID(student_id)、课程ID(同样取自`curriculum`表关联)以及成绩信息。
```sql
CREATE TABLE c AS
SELECT * FROM curriculum;
CREATE TABLE g AS
SELECT student_id, curriculum.course_id, score
FROM grade
JOIN curriculum ON grade.course_id = curriculum.course_id;
```
这里我们复制了`curriculum`表的所有数据到新表`c`,并从`grade`表中选择了需要的数据创建了`g`表。
接下来,我们需要为`c`表的课程名称(假设命名为`course_name`)列添加唯一约束`uq_name`:
```sql
ALTER TABLE c
ADD CONSTRAINT uq_name UNIQUE (course_name);
```
这条命令会确保`c`表中每一条记录的`course_name`都不重复,即每个课程名称在整个表中是唯一的。
相关问题
(1)使用Transact-SQL语句为studentsdb数据库的student_info表和curriculum表创建主键索引。 (3)使用Transact-SQL语句为studentsdb数据库的grade表的“分数”字段创建一个非聚集索引,命名为grade_index。 (7)使用Transact-SQL语句Drop index删除索引grade_index。 (9)在studentsdb数据库中,使用Transact-SQL语句CREATE VIEW建立一个名为v_stu_c的视图,显示学生的学号、姓名、所学课程的课程编号,并利用视图查询学号为0003的学生情况。
(1)为student_info表创建主键索引:
```
ALTER TABLE student_info ADD CONSTRAINT PK_student_info PRIMARY KEY (student_id);
```
为curriculum表创建主键索引:
```
ALTER TABLE curriculum ADD CONSTRAINT PK_curriculum PRIMARY KEY (course_id);
```
(3)为grade表的“分数”字段创建一个非聚集索引:
```
CREATE NONCLUSTERED INDEX grade_index ON grade (score);
```
(7)删除索引grade_index:
```
DROP INDEX grade_index ON grade;
```
(9)创建视图v_stu_c并查询学号为0003的学生情况:
```
CREATE VIEW v_stu_c
AS
SELECT student_info.student_id, student_info.student_name, curriculum.course_id
FROM student_info
INNER JOIN grade
ON student_info.student_id = grade.student_id
INNER JOIN curriculum
ON grade.course_id = curriculum.course_id;
SELECT *
FROM v_stu_c
WHERE student_id = '0003';
```
在MySQL中使用 studentsdb 数据库中的 curriculum 表、grade表。创建一个存储函数 avg_func,通过游标统计指定课程的平均分。
在MySQL中,你可以创建一个存储函数(Stored Procedure)来计算指定课程的平均成绩。首先,假设`curriculum`表有字段`course_id`表示课程ID,`grade`表有字段`course_id`和`score`分别表示课程ID和分数。下面是如何创建这个名为`avg_func`的存储函数:
```sql
DELIMITER //
CREATE FUNCTION avg_func(course_name VARCHAR(255))
RETURNS DECIMAL(10, 2)
BEGIN
DECLARE total_score DECIMAL(10, 2);
DECLARE count INT DEFAULT 0;
DECLARE @cursor CURSOR FOR
SELECT score FROM grade WHERE curriculum.course_id = (SELECT course_id FROM curriculum WHERE name = course_name);
OPEN @cursor;
CURSOR_LOOP: LOOP
FETCH @cursor INTO total_score;
IF FOUND THEN
SET total_score := total_score + NEW.score; -- 使用NEW关键字是为了处理游标变量
SET count = count + 1;
ELSE
LEAVE CURSOR_LOOP;
END IF;
END LOOP;
CLOSE @cursor;
RETURN total_score / COUNT_IF NOT NULL(count); -- 返回平均分,如果count为0,则返回NULL,所以使用COUNTIF来避免除零错误
END;
DELIMITER ;
```
现在你可以通过调用`avg_func('课程名')`来获取指定课程的平均分。比如:
```sql
SELECT avg_func('数学');
```
阅读全文
相关推荐
















