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

解决方案 »

  1.   

    1、---课程信息表为主表,做左关联
      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'
       
    ---全部搞定
       
      

  2.   

    lyeer,只能说你太强了!
    还有一个问题:
    请查询选修课程包含了梁六同学所选课程的学生的姓名和学号
    这是我的写法:
    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加上时就出错怎么回事?你是怎么解的?
      

  3.   

    lyeer:第一题你的解怎么在SQL server中提示列名'Grade'无效???
      

  4.   

    表中的T1、t1、t和T分别代表什么?能否用来其他英文来代替?
      

  5.   

    每当看到这类帖子,就想起dawugui的50个语句了。不如大版把那个帖子置顶吧~~
      

  6.   

    是T2.
    T1、T2、T3等都是表的别名,跟你用X、Y等是一个道理,这个太基础了吧。