1.有两个表:学生表student 选课表course
2.student表三个字段:sid sname ssex adress
3.course表四个字段:cid cname sid grade
4.两个表关联:course表的sid与student的sid相关联
5.初始化数据:
student:01 zhang m 统一路
         02 wang  m 八一路course: 01 足球 01 80
         02 篮球 01 70
         03 数学 01 60
         04 数学 02 90
         05 足球 02 506.要求得到结果:如果学生选择篮球,得到学生的基本信息和篮球课成绩;
                如果学生没有选择篮球,得到学生的基本信息,将成绩字段设置为0
              即:sid sname ssex adress grade
            结果1 01  zhang m    统一路 70
            结果2 02  wang  m    八一路 0

解决方案 »

  1.   

    SELECT T.*,NVL(GRADE,0) FROM (SELECT S.SID,S.SNAME,S.SSEX,S.ADRESS,C.CNAME
                     FROM STUDENT S,(SELECT CNAME FROM COURSE GROUP BY CNAME) C) T
    LEFT JOIN COURSE C1 ON T.SID = C1.SID AND T.CNAME = C1.CNAME
      

  2.   

    select
        a.*,
        nvl(b.grade,0) as grade
    from student a
    left join course b on a.sid = b.sid and b.cname = '篮球'
      

  3.   

    create table s(sid varchar2(10), sname varchar2(10),ssex varchar2(10),adress varchar2(10));
    create table c(cid varchar2(10),cname varchar2(10),sid varchar2(10),grade varchar2(10));
    insert into s values('01', 'zhang', 'm', '统一路' );
    insert into s values ('02', 'wang', 'm', '八一路');
    insert into c values ('01', '足球', '01', '80');
    insert into c values ('02', '篮球', '01', '70');
    insert into c values ('03', '数学', '01', '60');
    insert into c values ('04', '数学', '02', '90');
    insert into c values ('05', '足球', '02', '50');
    commit;select s.sid,
           s.sname,
           s.ssex,
           s.adress,
           sum(to_number(case
                           when c.cname = '篮球' then
                            c.grade
                           else
                            '0'
                         end)) lq_grade
      from s, c
     where s.sid = c.sid
     group by s.sid, s.sname, s.ssex, s.adress
      

  4.   

    select t1.sid, t1.sname, t1.ssex, t1.adress, nvl(t2.grade, 0) grade
      from student t1
      left join curse t2 on t1.sid = t2.sid
                        and t2.cname = '篮球'
      

  5.   

    有写过的了?换种写法嘿嘿
    select t1.sid, t1.sname, t1.ssex, t1.adress, nvl(t2.grade, 0)
      from student t1, curse t2
     where t1.sid = t2.sid(+)
       and t2.cname(+) = '篮球'
      

  6.   

    select t1.sid, t1.sname, t1.ssex, t1.adress, nvl(t2.grade, 0)
      from student t1, curse t2
     where t1.sid = t2.sid(+)
       and t2.cname(+) = '篮球'