连接查询查询分数在80-90范围内的学生的学号、姓名、分数
时间: 2023-06-10 09:08:32 浏览: 760
假设有两个表,一个是学生表(student),包含学号(id)、姓名(name)等信息;另一个是成绩表(score),包含学号(id)、分数(score)等信息。可以使用如下 SQL 语句进行连接查询,查询分数在80-90范围内的学生的学号、姓名、分数:
```
SELECT student.id, student.name, score.score
FROM student
INNER JOIN score ON student.id = score.id
WHERE score.score >= 80 AND score.score <= 90;
```
其中,INNER JOIN 是指内连接操作,它会将学生表(student)和成绩表(score)中的数据按照学号(id)进行匹配,只返回匹配成功的数据。WHERE 子句用于筛选出分数在 80-90 范围内的数据。
相关问题
(5)使用group by子句列出各个学生的平均成绩。 (6)使用union运算符将student_info表中姓“肖”的学生的id和name与course表的id、course_name返回在一个表中,且列名为u_编号、u_名称。 (7)嵌套查询。 ①在student_info表中查找与“林一飞”sex相同的所有学生的name、birthday。 ②使用in子查询查找所修课程编号为0002、0005的学生id、name、sex。 ③列出学号为0001的学生的grade比学号为0002号的学生的最低grade高的课程编号和分数。 (8)连接查询 student_id = student_info.id = 学号 course_id = course.id = 课程编号 ①查询分数在80-90范围内的学生的学号、name和grade信息。 ②查询学习“C语言程序设计”课程的学生的学号、name和grade。 ③查询所有男同学的选课情况,要求列出学号、name、course_name和grade。 ④查询每个学生的所选课程的最高成绩,要求列出学号、name、课程编号和grade。 ⑤查询所有学生的总成绩,要求列出学号、name、总成绩,没有选修课程的学生的总成绩为空。 ⑥ 为grade表添加数据行:学号为0004、课程编号为0006、grade为76。查询所有课程的选修情况,要求列出课程编号、course_name、选修人数,course表中没有的课程列值为空。
抱歉,我可以回答你的问题。以下是对你的问题的回答:
(5) 使用group by子句列出各个学生的平均成绩。
SELECT student_id, AVG(grade) as avg_grade
FROM grade
GROUP BY student_id;
(6) 使用union运算符将student_info表中姓“肖”的学生的id和name与course表的id、course_name返回在一个表中,且列名为u_编号、u_名称。
SELECT id AS u_编号, name AS u_名称
FROM student_info
WHERE name LIKE '肖%'
UNION
SELECT id AS u_编号, course_name AS u_名称
FROM course
WHERE id IN (
SELECT id
FROM student_info
WHERE name LIKE '肖%'
);
(7) 嵌套查询。
① 在student_info表中查找与“林一飞”sex相同的所有学生的name、birthday。
SELECT name, birthday
FROM student_info
WHERE sex = (SELECT sex FROM student_info WHERE name = '林一飞');
② 使用in子查询查找所修课程编号为0002、0005的学生id、name、sex。
SELECT id, name, sex
FROM student_info
WHERE id IN (
SELECT student_id
FROM grade
WHERE course_id IN ('0002', '0005')
);
③ 列出学号为0001的学生的grade比学号为0002号的学生的最低grade高的课程编号和分数。
SELECT course_id, grade
FROM grade
WHERE student_id = '0001' AND grade > (
SELECT MIN(grade)
FROM grade
WHERE student_id = '0002'
);
(8) 连接查询 student_id = student_info.id = 学号 course_id = course.id = 课程编号
① 查询分数在80-90范围内的学生的学号、name和grade信息。
SELECT student_info.id AS 学号, student_info.name AS name, grade AS grade
FROM grade
JOIN student_info ON grade.student_id = student_info.id
WHERE grade BETWEEN 80 AND 90;
② 查询学习“C语言程序设计”课程的学生的学号、name和grade。
SELECT student_info.id AS 学号, student_info.name AS name, grade AS grade
FROM grade
JOIN student_info ON grade.student_id = student_info.id
JOIN course ON grade.course_id = course.id
WHERE course.course_name = 'C语言程序设计';
③ 查询所有男同学的选课情况,要求列出学号、name、course_name和grade。
SELECT student_info.id AS 学号, student_info.name AS name, course.course_name AS course_name, grade.grade AS grade
FROM grade
JOIN student_info ON grade.student_id = student_info.id
JOIN course ON grade.course_id = course.id
WHERE student_info.sex = '男';
④ 查询每个学生的所选课程的最高成绩,要求列出学号、name、课程编号和grade。
SELECT student_info.id AS 学号, student_info.name AS name, course.id AS 课程编号, MAX(grade) AS grade
FROM grade
JOIN student_info ON grade.student_id = student_info.id
JOIN course ON grade.course_id = course.id
GROUP BY student_info.id, course.id;
⑤ 查询所有学生的总成绩,要求列出学号、name、总成绩,没有选修课程的学生的总成绩为空。
SELECT student_info.id AS 学号, student_info.name AS name, SUM(grade) AS 总成绩
FROM student_info
LEFT JOIN grade ON student_info.id = grade.student_id
GROUP BY student_info.id, student_info.name;
⑥ 为grade表添加数据行:学号为0004、课程编号为0006、grade为76。查询所有课程的选修情况,要求列出课程编号、course_name、选修人数,course表中没有的课程列值为空。
INSERT INTO grade (student_id, course_id, grade)
VALUES ('0004', '0006', '76');
SELECT course.id AS 课程编号, course.course_name AS course_name, COUNT(grade.student_id) AS 选修人数
FROM course
LEFT JOIN grade ON course.id = grade.course_id
GROUP BY course.id, course.course_name;
实现成绩录入界面,要求如下: (1) 界面包含两个文本行、 一个按钮 一个 列表框组件。两个文本行分别输入学生学号 和分数,点击录入按钮,学号及分数信息在 列表框中显示 (2)输入成绩范国为0-100,如果成绩不在该 范围内,则弹出对话框提示分数必须在0-100 之间。要求使用异常处理机制来实现该功
好的,这是一个实现成绩录入界面的问题,下面是代码实现:
```python
import tkinter as tk
from tkinter import messagebox
class ScoreInput:
def __init__(self, master):
self.master = master
master.title("成绩录入界面")
# 学号输入行
self.id_label = tk.Label(master, text="学号")
self.id_label.grid(row=0, column=0)
self.id_entry = tk.Entry(master)
self.id_entry.grid(row=0, column=1)
# 分数输入行
self.score_label = tk.Label(master, text="分数")
self.score_label.grid(row=1, column=0)
self.score_entry = tk.Entry(master)
self.score_entry.grid(row=1, column=1)
# 录入按钮
self.submit_button = tk.Button(master, text="录入", command=self.record_score)
self.submit_button.grid(row=2, column=1)
# 列表框
self.listbox = tk.Listbox(master)
self.listbox.grid(row=3, column=0, columnspan=2)
def record_score(self):
try:
# 获取学号和分数
student_id = self.id_entry.get()
score = int(self.score_entry.get())
# 判断分数是否在0-100之间
if score < 0 or score > 100:
raise ValueError("分数必须在0-100之间")
# 添加学号和分数到列表框中
self.listbox.insert(tk.END, f"{student_id}: {score}")
# 清空输入框
self.id_entry.delete(0, tk.END)
self.score_entry.delete(0, tk.END)
except ValueError as e:
messagebox.showerror("错误", str(e))
# 创建主窗口
root = tk.Tk()
# 创建 ScoreInput 实例
score_input = ScoreInput(root)
# 运行主循环
root.mainloop()
```
以上代码实现了一个简单的成绩录入界面,包括学号、分数的输入,录入按钮和列表框组件。当分数不在0-100之间时,会弹出对话框提示分数必须在0-100之间。使用了异常处理机制来实现该功能。