SQL查询操作
现在有三张表:
Student(学生表):
StudentID idCard Name Sex Birthday Birthplace Class
001 112345 小明 男 1985/1/1 广东省广州市 会计05班
002 354321 小丽 女 1986/6/1 广东省深圳市 会计06班
003 367890 小李 男 1984/11/1 湖南省长沙市 会计05班
004 409876 小琳 女 1984/11/1 四川省成都市 会计06班
005 432345 小张 男 1986/4/11 河北石家庄 会计06班Course(课程信息表):
CourseID CourseName CourseDesc TeacherID
001 语文 语文文言文 陈老师
002 数学 离散数学 刘老师
003 会计 基础会计 张老师
004 项目管理 陈老师
StudentCourse(选课表):
StudentID CourseID Grade
001 001 86
001 002 87
001 004 56
002 001 78
002 002 84
002 003 85
003 001 96
003 003 89
003 002 79
003 004 68
004 001 98
004 004 78问题:
1、请列出陈老师所教学生的学号、姓名、课程(张老师所教课程)名称及成绩
2、请统计每个班的平均成绩,并按平均成绩降序排列
3、请查询和小琳同学有共同选修课程的学生的姓名和学号(不包含小琳本人)
注意:Student的StudentID为主键
StudentCourse的外键StudentID和CourseID分别为Student表和Course表中的主键StudentID和CourseID
现在有三张表:
Student(学生表):
StudentID idCard Name Sex Birthday Birthplace Class
001 112345 小明 男 1985/1/1 广东省广州市 会计05班
002 354321 小丽 女 1986/6/1 广东省深圳市 会计06班
003 367890 小李 男 1984/11/1 湖南省长沙市 会计05班
004 409876 小琳 女 1984/11/1 四川省成都市 会计06班
005 432345 小张 男 1986/4/11 河北石家庄 会计06班Course(课程信息表):
CourseID CourseName CourseDesc TeacherID
001 语文 语文文言文 陈老师
002 数学 离散数学 刘老师
003 会计 基础会计 张老师
004 项目管理 陈老师
StudentCourse(选课表):
StudentID CourseID Grade
001 001 86
001 002 87
001 004 56
002 001 78
002 002 84
002 003 85
003 001 96
003 003 89
003 002 79
003 004 68
004 001 98
004 004 78问题:
1、请列出陈老师所教学生的学号、姓名、课程(张老师所教课程)名称及成绩
2、请统计每个班的平均成绩,并按平均成绩降序排列
3、请查询和小琳同学有共同选修课程的学生的姓名和学号(不包含小琳本人)
注意:Student的StudentID为主键
StudentCourse的外键StudentID和CourseID分别为Student表和Course表中的主键StudentID和CourseID
select T1.CourseName,T3.StudentID ,T3.Name,T1.Grade
from Course T1
LEFT JOIN StudentCourse T2
ON T1.CourseID = T2.CourseID
LEFT JOIN Student T3
ON T2.StudentID = T3.StudentID
WHERE T1.TeacherID = '张老师'
2、select T1.Class,AVG(T.Grade),RANK() OVER(ORDER BY AVG(T.Grade) DESC) AS ORDR_GRADE
from StudentCourse T,Student T1
where t.StudentID= t1.StudentID
GROUP BY T1.CLASS
3、 Select distinct t1.StudentID,Name
from Student T1,StudentCourse T2
where t1.StudentID = T2.StudentID
and t2.CourseID IN(
Select T2.CourseID
from Student T1,StudentCourse T2
where t1.StudentID = T2.StudentID
and t1.StudentID = '004')
and t1.StudentID <> '004'
---全部搞定
还有一个问题:
请查询选修课程包含了梁六同学所选课程的学生的姓名和学号
这是我的写法:
SELECT DISTINCT StudentID,Name
FROM StudentCourse AS X
WHERE NOT EXISTS(SELECT
*FROM StudentCourse AS Y
WHERE Y.StudentID='004' AND NOT EXISTS(SELECT
*FROM StudentCourse AS Z
WHERE Z.StudentID=X.StudentID
AND Z.CourseID=Y.CourseID))
问题是把SELECT DISTINCT StudentID,Name的Name加上时就出错怎么回事?你是怎么解的?
T1、T2、T3等都是表的别名,跟你用X、Y等是一个道理,这个太基础了吧。