创建一个名为stu_proc1的存储过程,查询某系、某姓名的学生的学号、姓名、年龄,选修课程名和成绩。系名和姓名在调用该存储过程时输入。
时间: 2024-03-12 13:45:47 浏览: 22
可以使用如下的 SQL 语句创建一个名为stu_proc1的存储过程:
```
CREATE PROCEDURE stu_proc1
@dept_name VARCHAR(20),
@stu_name VARCHAR(20)
AS
BEGIN
SELECT s.stu_id, s.stu_name, s.stu_age, c.course_name, sc.score
FROM student s
JOIN score sc ON s.stu_id = sc.stu_id
JOIN course c ON sc.course_id = c.course_id
WHERE s.dept_name = @dept_name AND s.stu_name = @stu_name
END
```
该存储过程接受两个参数:@dept_name和@stu_name,分别表示系名和姓名。在存储过程内部,使用JOIN语句联结了student、score和course这三个表,然后根据输入的系名和姓名筛选出符合条件的记录,并返回学号、姓名、年龄、选修课程名和成绩这些字段的值。
相关问题
创建一个名为stu_proc1的存储过程:查询某系、某姓名的学生的学号、姓名、年龄,选修课程名、成绩。系名和姓名在调用该存储过程时输入,其默认值分别为“%”与“林%”。执行该存储过程,用多种参数加以测试。
好的,以下是创建stu_proc1存储过程的SQL代码:
```sql
CREATE PROCEDURE stu_proc1
(
IN dept_name VARCHAR(20) = '%',
IN stu_name VARCHAR(20) = '林%'
)
BEGIN
SELECT s.stu_id, s.stu_name, s.age, c.course_name, sc.grade
FROM student s
JOIN score sc ON s.stu_id = sc.stu_id
JOIN course c ON sc.course_id = c.course_id
JOIN department d ON s.dept_id = d.dept_id
WHERE d.dept_name LIKE dept_name AND s.stu_name LIKE stu_name;
END;
```
该存储过程接受两个参数:dept_name和stu_name,分别代表系名和学生姓名。这两个参数都有默认值,即“%”和“林%”。存储过程的主体部分使用JOIN语句连接了student、score、course和department四个表,然后筛选出符合条件的数据并返回。
接下来,我们可以使用以下代码来调用该存储过程:
```sql
-- 不带参数调用
CALL stu_proc1;
-- 带一个参数调用
CALL stu_proc1('信息工程系');
-- 带两个参数调用
CALL stu_proc1('信息工程系', '张三');
```
以上代码分别测试了不带参数、带一个参数和带两个参数的情况。根据具体的数据表和数据结构,需要根据实际情况进行调整。
创建一个名为stu_proc2的存储过程,查询某系学生的选课记录。如果存储过程调用者无法明确系别,则默认查询所有学生的选课记录。系名在调用该存储过程时输入。mysql
好的,以下是创建名为stu_proc2的存储过程的MySQL代码:
```
DELIMITER //
CREATE PROCEDURE stu_proc2 (IN dept_name VARCHAR(20))
BEGIN
IF dept_name IS NULL THEN
SELECT * FROM student, takes WHERE student.ID = takes.ID;
ELSE
SELECT * FROM student, takes WHERE student.ID = takes.ID AND student.dept_name = dept_name;
END IF;
END //
DELIMITER ;
```
该存储过程接收一个名为dept_name的输入参数,用于指定要查询的系别名。如果输入参数为NULL,则默认查询所有学生的选课记录。
如果输入参数不为空,则查询该系学生的选课记录,否则查询所有学生的选课记录。该存储过程使用了IF语句来实现条件判断,并使用SELECT语句来查询学生选课记录。
希望这个存储过程能够满足你的需求,如果还有其他问题,请随时提出。