SELECT s.s_id, s.s_name, s.k_id, s.k_name FROM student s LEFT JOIN grade g ON s.s_id = g.s_id AND s.k_id = g.k_id WHERE g.g_id IS NULL
时间: 2024-05-25 12:13:52 浏览: 13
这是一个 SQL 查询语句,作用是查询没有成绩的学生和课程信息。具体解释如下:
- SELECT s.s_id, s.s_name, s.k_id, s.k_name:选择要查询的字段,包括学生id、学生姓名、课程id和课程名称。
- FROM student s:从 student 表中选择数据,表别名为 s。
- LEFT JOIN grade g:左连接 grade 表,表别名为 g。
- ON s.s_id = g.s_id AND s.k_id = g.k_id:设置连接条件,即学生id和课程id都相等。
- WHERE g.g_id IS NULL:筛选出没有成绩的学生和课程信息,即 grade 表中成绩id为空。
总的来说,这个查询语句可以帮助我们找出哪些学生还没有获得成绩。
相关问题
SELECT ak.dept_id deptId,ak.dept_name deptName,ak.parent_id parentId, IFNULL(pk.primaryShould,0) primaryShould,IFNULL(pk.primaryNot,0) primaryNot,IFNULL(pk.primaryGraduated,0) primaryGraduated, IFNULL(mk.middleShould,0) middleShould,IFNULL(mk.middleNot,0) middleNot,IFNULL(mk.middleGraduated,0) middleGraduated, IFNULL(hk.highShould,0) highShould,IFNULL(hk.highGraduated,0) highGraduated,IFNULL(hk.highNot,0) highNot FROM sys_dept ak LEFT JOIN (SELECT subordinate_school, SUM(CASE WHEN grade = 6 THEN 1 ELSE 0 END) primaryShould, SUM(CASE WHEN grade = 6 AND is_graduation = 'N' THEN 1 ELSE 0 END) primaryNot, SUM(CASE WHEN grade = 6 AND is_graduation = 'Y' THEN 1 ELSE 0 END) primaryGraduated FROM primary_school_roll WHERE primary_student_id LIKE concat('20', '%') GROUP BY subordinate_school) pk ON ak.dept_id = pk.subordinate_school LEFT JOIN (SELECT subordinate_school, SUM(CASE WHEN grade = 9 THEN 1 ELSE 0 END) middleShould, SUM(CASE WHEN grade = 9 AND is_graduation = 'N' THEN 1 ELSE 0 END) middleNot, SUM(CASE WHEN grade = 9 AND is_graduation = 'Y' THEN 1 ELSE 0 END) middleGraduated FROM middle_school_roll WHERE middle_student_id LIKE concat('20', '%') GROUP BY subordinate_school) mk ON ak.dept_id = mk.subordinate_school LEFT JOIN (SELECT subordinate_school, SUM(CASE WHEN grade = 12 THEN 1 ELSE 0 END) highShould, SUM(CASE WHEN graduation_way = '001' AND is_graduation = 'T' THEN 1 ELSE 0 END) highNot, SUM(CASE WHEN graduation_way = '000' AND is_graduation = 'Y' THEN 1 ELSE 0 END) highGraduated FROM high_school_roll WHERE high_student_id LIKE concat('20', '%') GROUP BY subordinate_school) hk ON ak.dept_id = hk.subordinate_school WHERE ak.state = 3 GROUP BY ak.dept_id
这是一条 SQL 查询语句,根据部门ID将三个子查询的结果进行合并,最终返回各部门的信息以及不同年级的学生人数及毕业情况。
具体实现过程是,使用 LEFT JOIN 连接 sys_dept 表和三个子查询的结果集,根据部门ID进行关联。在子查询中,使用 SUM() 函数对不同年级的学生人数进行求和,然后根据不同的条件进行分类统计。最后,使用 GROUP BY 对查询结果按部门ID进行分组,以得到每个部门的统计结果。
需要注意的是,这条查询语句中使用了 IFNULL() 函数对查询结果进行处理,以避免在统计结果为 NULL 时出现错误。同时,也需要注意在使用 LIKE 进行模糊查询时,应该使用索引来提高查询效率。
(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;