mysql有student表,course表,sc表,查询每个学生选修课成绩大于80分的情况
时间: 2024-01-18 17:02:56 浏览: 29
可以使用如下的 SQL 查询语句来实现:
```
SELECT s.*, c.name as course_name, sc.score
FROM student s, course c, sc
WHERE s.id = sc.sid
AND c.id = sc.cid
AND sc.score > 80;
```
这个查询语句使用了多表联合查询,将学生表、课程表和选课表进行联合查询,筛选出选修课成绩大于80分的记录,并返回学生的信息、课程名称和成绩。
相关问题
mysql中有student表,course表,score表,student表中有sname,sex,sid,birthdate,specialy,ascores。sc表中有sid,cid,scores。coures表中有no,cid,cname,credit。查询每个学生选修课程成绩大于80分的情况
可以使用以下SQL语句查询每个学生选修课程成绩大于80分的情况:
```
SELECT s.sid, s.sname, c.cname, sc.scores
FROM student s
JOIN sc ON s.sid = sc.sid
JOIN course c ON sc.cid = c.cid
WHERE sc.scores > 80;
```
这个SQL语句通过JOIN连接三个表,然后使用WHERE子句筛选选修课程成绩大于80分的记录。最终的查询结果包括学生的学号、姓名、所选课程名称以及成绩。
mysql使用游标从 sc表中查询成绩高于 80分的学生信息。
好的,以下是使用游标从 sc 表中查询成绩高于 80 分的学生信息的 MySQL 存储过程:
```mysql
DELIMITER $$
CREATE PROCEDURE get_high_score_students()
BEGIN
DECLARE sid INT;
DECLARE sname VARCHAR(20);
DECLARE score INT;
DECLARE cur CURSOR FOR SELECT s.sid, s.sname, c.score FROM student s, sc c WHERE s.sid = c.sid AND c.score > 80;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET @finished = 1;
OPEN cur;
SET @finished = 0;
WHILE @finished = 0 DO
FETCH cur INTO sid, sname, score;
IF NOT @finished THEN
SELECT sid, sname, score;
END IF;
END WHILE;
CLOSE cur;
END$$
DELIMITER ;
```
注意,以上存储过程中使用了游标来遍历查询结果集,并使用 IF NOT @finished THEN 来判断游标是否遍历到了最后一行,如果是,则设置 @finished 为 1,退出 WHILE 循环。同时,使用 CONTINUE HANDLER FOR NOT FOUND 语句来处理游标没有查询到任何结果的情况。