在MySQL5.7版本中,已知有student表(学生学号s_no,学生姓名s_name,学生性别s_sex,学生出生日期s_birthday,学生系别s_dept)其中s_no为主键,course表(课程号c_no,课程名称c_name,课程学分credit)其中c_no为主键,scores表(学生学号s_no,课程号c_no,课程得分score)其中s_no和c_no为复合主键,scores表有外键s_no参照student表主键s_no,同时scores表还有外键c_no,参照course表主键c_no。请使用命令查询出选修课程超过2门课,且成绩在70分以上的学生的姓名和选课门数;
时间: 2023-06-20 17:05:47 浏览: 92
查询语句如下:
```
SELECT s.s_name, COUNT(*) AS course_num
FROM student s JOIN scores sc ON s.s_no = sc.s_no
WHERE sc.score >= 70
GROUP BY s.s_no
HAVING COUNT(*) > 2;
```
解释:
1. 使用 JOIN 连接 student 和 scores 表,通过 s_no 连接两张表。
2. WHERE 子句过滤成绩大于等于70分的记录。
3. 使用 GROUP BY 分组,按照学生姓名进行分组。
4. 使用 HAVING 过滤选修课程大于2门的学生。
5. 使用 COUNT(*) 统计每个学生的选修课程门数。
相关问题
用mysql查询student表中学号为2007010110的学生姓名,并存储在变量s name中
假设student表中包含学生的学号和姓名字段分别为stu_id和stu_name,可以使用如下的SQL语句查询学号为2007010110的学生姓名:
```
SELECT stu_name FROM student WHERE stu_id = '2007010110';
```
然后将查询结果存储在变量s_name中,具体实现方式取决于使用的编程语言和数据库驱动程序。以下是一种Python实现方式,假设使用了mysql-connector-python驱动程序:
```python
import mysql.connector
# 连接数据库,具体参数根据实际情况填写
cnx = mysql.connector.connect(user='username', password='password',
host='hostname',
database='databasename')
# 创建游标对象
cursor = cnx.cursor()
# 执行查询语句
query = ("SELECT stu_name FROM student WHERE stu_id = '2007010110'")
cursor.execute(query)
# 获取查询结果并存储在变量s_name中
s_name = ""
for (stu_name,) in cursor:
s_name = stu_name
# 关闭游标和数据库连接
cursor.close()
cnx.close()
```
以上代码中,query变量存储了SQL查询语句,执行查询后通过循环获取查询结果,并将结果存储在变量s_name中。最后关闭游标和数据库连接。
mysql创建一个存储函数来检测student表中有学号但没有姓名的学生记录
好的,下面是一个MySQL创建存储函数的示例,用于检测`student`表中有学号但没有姓名的学生记录:
```
CREATE FUNCTION CheckMissingNameStudents()
RETURNS VARCHAR(1000)
BEGIN
DECLARE result VARCHAR(1000);
SELECT GROUP_CONCAT(StudentID) INTO result
FROM student
WHERE Name IS NULL OR Name = '';
IF result IS NULL THEN
RETURN '所有学生记录都有姓名';
ELSE
RETURN CONCAT('以下学生记录没有姓名:', result);
END IF;
END;
```
这个函数将返回一个字符串,其中包含所有没有姓名的学生的学号,如果所有学生记录都有姓名,将返回一个相应的消息。
请注意,这个函数假设学号是唯一的,并且没有重复的学号。如果存在重复的学号,那么这个函数可能会返回重复的学号。