三张表,sx(学号,姓名),sy(学号,年龄),sw(学号,所在系),学号是主键,sx有100条记录,sy有30条记录,sw有50条记录。问题一:用左连接把三张表合并成一张表student(学号,姓名,年龄,所在系)的sql怎么写(要求student表最终的记录数为100)?有没有其他的更好的合并三张表(或者更多表)的方法?问题二:用三张表创建一张视图view_student(学号,姓名,年龄,所在系)的sql怎么写(view_student记录数最终为100)?左连接?其他方法?

解决方案 »

  1.   

    select x.学号,x.姓名,y.年龄,w.所在系
    from sx x left join  sy y on x.学号=y.学号
         left join sw w on x.学号=w.学号;
    create or replace view view_student as 
    select x.学号,x.姓名,y.年龄,w.所在系
    from sx x left join  sy y on x.学号=y.学号
         left join sw w on x.学号=w.学号;
      

  2.   

    --sno 学号,name 姓名,age 年龄,series 所在系
    --合并成一张新表
    create table student as
    select sx.sno, sx.name, sy.age, sw.series
      from sx, sy, sw
     where sx.sno = sy.sno(+)
       and sx.sno = sy.sno(+)
       and sx.sno = sw.sno(+);
    --创建一张视图
    create or replace view v_student as 
    select sx.sno, sx.name, sy.age, sw.series
      from sx, sy, sw
     where sx.sno = sy.sno(+)
       and sx.sno = sy.sno(+)
       and sx.sno = sw.sno(+);
      

  3.   

    三张表,sx(学号,姓名),sy(学号,年龄),sw(学号,所在系),学号是主键,sx有100条记录,sy有30条记录,sw有50条记录。问题一:用左连接把三张表合并成一张表student(学号,姓名,年龄,所在系)的sql怎么写(要求student表最终的记录数为100)?有没有其他的更好的合并三张表(或者更多表)的方法?1, 左连接;
    2,union和max
      select 学号,max(姓名) 姓名,max(年龄) 年龄,max(所在系) 所在系
      from 
      (
      select 学号,姓名,null 年龄, null 所在系 from sx
      union all
      select 学号,null 姓名,年龄, null 所在系 from sy
      union all
      select 学号,null 姓名,null 年龄, 所在系 from sw
      ) t
      group by 学号问题二:用三张表创建一张视图view_student(学号,姓名,年龄,所在系)的sql怎么写(view_student记录数最终为100)?左连接?其他方法?  同上。