mysql创建一个存储过程.根据学生学号查询某学生选修了的课程的名称及成绩,以学号为参数输入
时间: 2024-03-01 14:49:55 浏览: 25
好的,以下是创建存储过程的 SQL 代码:
```
CREATE PROCEDURE getCourseAndScore(IN stu_id INT)
BEGIN
SELECT course_name, score
FROM course c
INNER JOIN score s ON c.course_id = s.course_id
WHERE s.stu_id = stu_id;
END;
```
这个存储过程的作用是根据输入的学号 `stu_id`,查询该学生选修的课程名称和成绩。具体实现是通过联表查询,将 `course` 表和 `score` 表连接起来,然后筛选出 `stu_id` 对应的记录,返回查询结果。
相关问题
用mysql创建存储过程,当输入学生学号时,通过返回输出参数获取该学生选修课程门数
好的,以下是一个示例存储过程,可以实现输入学生学号,返回该学生选修课程门数的功能:
```sql
DELIMITER //
CREATE PROCEDURE get_course_count(IN student_id INT, OUT course_count INT)
BEGIN
SELECT COUNT(*) INTO course_count
FROM course_selection
WHERE student_id = student_id;
END //
DELIMITER ;
```
存储过程接受一个输入参数 `student_id`,表示要查询的学生学号;同时还定义了一个输出参数 `course_count`,用于返回该学生选修课程的门数。
在存储过程的实现中,我们使用了一个 SQL 查询语句,通过统计选修表中该学生的记录数来计算选修课程的门数,并将结果赋值给输出参数 `course_count`。
要使用这个存储过程,可以按照以下方式调用:
```sql
CALL get_course_count(123456, @count);
SELECT @count AS course_count;
```
其中,第一个参数 `123456` 是要查询的学生学号,第二个参数 `@count` 是一个用户变量,用于存储输出参数 `course_count` 的值。调用存储过程后,我们可以通过查询用户变量的方式获取返回结果。
mysql查询出只选修两门课程的学生学号和姓名(排除选修课程无成绩)
为了查询只选修两门课程的学生学号和姓名,我们需要使用多个表连接和聚合函数。以下是查询语句:
```sql
SELECT s.学号, s.姓名
FROM 学生表 s
JOIN 选课表 c ON s.学号 = c.学号
JOIN (SELECT 学号, COUNT(*) AS cnt FROM 选课表 WHERE 成绩 IS NOT NULL GROUP BY 学号 HAVING cnt = 2) t ON s.学号 = t.学号
WHERE c.成绩 IS NOT NULL;
```
这个查询语句中,我们首先连接了学生表和选课表,然后使用子查询和聚合函数找到只选修了两门课程的学生学号,最后再通过WHERE子句排除选修课程无成绩的情况。请注意,这个查询语句假设学生表的主键是学号,选课表的外键是学号。