已知选课管理系统Xkglxt包含如下数据表: 1)学生表: 学生id, 学号, 姓名, 专业, 年级, 姓名拼音缩写 2)课程表: 课程id, 课程名称, 学分 3)选课表: 选课id, 学生id, 课程id, 成绩 请完成如下操作的SQL语句,表名和列名必须和上面的一致: 1、创建以上三个表的SQL语句; 2、在课程表上创建一个触发器(名字自定)。,当删除课程信息时自动删除该课程的选课信息。 学生答案:
时间: 2023-06-11 18:04:23 浏览: 63
1、创建以上三个表的SQL语句:
CREATE TABLE 学生表(
学生id int NOT NULL PRIMARY KEY,
学号 varchar(10) NOT NULL,
姓名 varchar(50) NOT NULL,
专业 varchar(50) NOT NULL,
年级 varchar(10) NOT NULL,
姓名拼音缩写 varchar(50)
);
CREATE TABLE 课程表(
课程id int NOT NULL PRIMARY KEY,
课程名称 varchar(50) NOT NULL,
学分 int NOT NULL
);
CREATE TABLE 选课表(
选课id int NOT NULL PRIMARY KEY,
学生id int NOT NULL,
课程id int NOT NULL,
成绩 int,
FOREIGN KEY (学生id) REFERENCES 学生表 (学生id),
FOREIGN KEY (课程id) REFERENCES 课程表 (课程id)
);
2、在课程表上创建一个触发器(名字自定)。当删除课程信息时自动删除该课程的选课信息。
CREATE TRIGGER delete_course_trigger
AFTER DELETE ON 课程表
FOR EACH ROW
BEGIN
DELETE FROM 选课表 WHERE 选课表.课程id = OLD.课程id;
END;
相关问题
已知选课管理系统Xkglxt包含如下数据表: 1)学生表: 学生id, 学号, 姓名, 专业, 年级, 姓名拼音缩写 2)课程表: 课程id, 课程名称, 学分 3)选课表: 选课id, 学生id, 课程id, 成绩 请完成如下操作的SQL语句,表名
1. 查询所有学生的姓名、专业和年级信息:
```
SELECT 姓名, 专业, 年级 FROM 学生表;
```
2. 查询所有课程的名称和学分信息:
```
SELECT 课程名称, 学分 FROM 课程表;
```
3. 查询所有学生选修的课程及其成绩信息:
```
SELECT 学生表.姓名, 课程表.课程名称, 选课表.成绩
FROM 学生表, 课程表, 选课表
WHERE 学生表.学生id = 选课表.学生id AND 课程表.课程id = 选课表.课程id;
```
4. 查询某个学生选修的所有课程及其成绩信息:
```
SELECT 学生表.姓名, 课程表.课程名称, 选课表.成绩
FROM 学生表, 课程表, 选课表
WHERE 学生表.学号 = '学生学号' AND 学生表.学生id = 选课表.学生id AND 课程表.课程id = 选课表.课程id;
```
其中,'学生学号'需要替换为具体的学生学号。
5. 查询某门课程的所有学生及其成绩信息:
```
SELECT 学生表.姓名, 选课表.成绩
FROM 学生表, 选课表
WHERE 选课表.课程id = '课程id' AND 学生表.学生id = 选课表.学生id;
```
其中,'课程id'需要替换为具体的课程id。
已知选课管理系统Xkglxt包含如下数据表: 1)学生表: 学生id, 学号, 姓名, 专业, 年级, 姓名拼音缩写 2)课程表: 课程id, 课程名称, 学分 3)选课表: 选课id, 学生id, 课程id, 成绩 请完成如下操作的SQL语句,表名和列名必须和上面的一致: 1、创建以上三个表的SQL语句; 2、创建一个存储过程(名字自定),实现选课表的插入,需要判断当前课程id和学生id是否存在。
1、创建表的SQL语句如下:
-- 学生表
CREATE TABLE 学生表 (
学生id INT PRIMARY KEY AUTO_INCREMENT,
学号 VARCHAR(20) NOT NULL,
姓名 VARCHAR(20) NOT NULL,
专业 VARCHAR(20) NOT NULL,
年级 VARCHAR(4) NOT NULL,
姓名拼音缩写 VARCHAR(20) NOT NULL
);
-- 课程表
CREATE TABLE 课程表 (
课程id INT PRIMARY KEY AUTO_INCREMENT,
课程名称 VARCHAR(20) NOT NULL,
学分 FLOAT NOT NULL
);
-- 选课表
CREATE TABLE 选课表 (
选课id INT PRIMARY KEY AUTO_INCREMENT,
学生id INT NOT NULL,
课程id INT NOT NULL,
成绩 FLOAT,
CONSTRAINT FOREIGN KEY (学生id) REFERENCES 学生表(学生id),
CONSTRAINT FOREIGN KEY (课程id) REFERENCES 课程表(课程id)
);
2、创建存储过程的SQL语句如下:
DELIMITER //
CREATE PROCEDURE insert_course(
IN pid INT,
IN sid INT,
IN sc FLOAT
)
BEGIN
DECLARE count_1 INT;
DECLARE count_2 INT;
SELECT COUNT(*) INTO count_1 FROM 学生表 WHERE 学生id = sid;
SELECT COUNT(*) INTO count_2 FROM 课程表 WHERE 课程id = pid;
IF count_1 = 0 THEN
SELECT "学生不存在" AS MESSAGE;
ELSEIF count_2 = 0 THEN
SELECT "课程不存在" AS MESSAGE;
ELSE
INSERT INTO 选课表 (学生id, 课程id, 成绩) VALUES (sid, pid, sc);
SELECT "选课成功" AS MESSAGE;
END IF;
END//
DELIMITER ;
说明:此存储过程的功能是向选课表中插入数据,但在插入之前需要进行学生id和课程id的验证,以确保学生和课程都是存在的。如果存在,则插入数据,否则返回错误信息。