Oracle SQL Join 自己的理解

数据基于以下表

学生表:

Oracle SQL Join 自己的理解_第1张图片

老师表:

Oracle SQL Join 自己的理解_第2张图片

课程表:

Oracle SQL Join 自己的理解_第3张图片

学生成绩表:

Oracle SQL Join 自己的理解_第4张图片

题目:查询显示出各学生的J2ST、Java Web、SSH三门课的成绩,没有成绩的,显示为空?

方式一:

SELECT hs.student_name
      ,decode(hc.course_name, 'J2SE', hsc.core, NULL) "J2SE"
       ,decode(hc.course_name, 'Java Web', hsc.core, NULL) "Java Web"
       ,decode(hc.course_name, 'SSH', hsc.core, NULL) "SSH"
  FROM hand_student_core hsc
      right join hand_student hs on(hsc.student_no=hs.student_no)
      left join hand_course hc on(hsc.course_no=hc.course_no);

方式二:

SELECT hs.student_name
      ,decode(hc.course_name, 'J2SE', hsc.core, NULL) "J2SE"
       ,decode(hc.course_name, 'Java Web', hsc.core, NULL) "Java Web"
       ,decode(hc.course_name, 'SSH', hsc.core, NULL) "SSH"
  FROM hand_student_core hsc
      ,hand_course       hc
      ,hand_student      hs
 WHERE hsc.course_no = hc.course_no(+)
   AND hs.student_no = hsc.student_no(+)

结果:

Oracle SQL Join 自己的理解_第5张图片

hsc.course_no = hc.course_no(+) 为左连接,反之。

A left join B on 左连接,A表的多余项显示。

A right join B on 左连接,B表的多余项显示。

你可能感兴趣的:(Oracle SQL Join 自己的理解)