oracle/8장_조인

DATABASE - 8장 - JOIN 연습문제

usop 2022. 12. 7. 17:38

 

문제 1) 조인(JOIN) 의 개념과 종류에 대해 짚고 넘어가자

 

관계형데이터베이스는 중복 데이터를 피하기 위해서 데이터를 여러개의 테이블로 나누어 저장한다.

이렇게 분리되어 있는 데이터들을 사용자가 원하는 부분만 도출하기 위해서는 여러 테이블을 조합(JOIN)

해야하는 경우가 생긴다.

 

* JOIN의 종류

INNER JOIN / LEFT OUTER JOIN / RIGHT OUTER JOIN / FULL OUTER JOIN / CROSS JOIN / SELF JOIN

 

 

 

문제 2) EQUI JOIN의 3가지 방법을 이용하여 학생 이름과 소속 학과 이름을 학과 이름, 학생 이름순으로 정렬하세요.

 

    - JOIN ~ USING 절

select d.dname, s.name
from student s 
      join department d 
      using (deptno);

  - 자연 조인 (Natural JOIN) 절

select d.dname, s.name
from student s 
     natural join department d;

- Where 절

select d.dname, s.name
from student s, department d
where s.deptno = d.deptno;

where / natural / join~using 절

 

 

문제3) OUTER JOIN의 2가지 방법을 이용하여 101번 학과에 소속된 학생들의 지도 교수 이름을 출력하시오.

           (지도 교수가 배정되지 않은 학생도 함께 출력하시오)

 

지도 교수(professor.p 쪽에 (+)와 left을 주면 될것같다.)

 

(+) 사용

select s.deptno, s.name, p.name
from student s
     join professor p on s.profno = p.profno(+)
where s.deptno = 101;

(left) 사용

select s.deptno, s.name, p.name
from student s left outer 
     join professor p on s.profno = p.profno
where s.deptno = 101;

 

(+) 와 (left outer) 사용 예제

 

문제 4) 부서 테이블에서 각 부서의 상위 부서 이름을 출력하시오. (학부 - 학과)

 

select c.dname 학부, d.dname 학과
from department c join department d 
      on d.deptno = c.college;

같은 테이블 join ~ on 사용 예제

 

문제 5)  공과대학에 소속된 학부와 학과 이름을 출력하세요.

select d.dname 학부, s.dname 학과 
from department s, department d 
where s.deptno = d.college
and s.dname = '공과대학';

공과대학 소속 학부, 학과

 

문제 6) 각 학과에 소속된 학과 이름, 학생 이름, 교수 이름을 모두 출력하세요.

 

join을 두번 쓰면 될거 같은데..

select d.dname 학과이름 , s.name 학생이름 , p.name 교수이름
from department d join student s on d.deptno= s.deptno
     join professor p on s.profno = p.profno;

join 안의 join (두 번 사용)

 

문제 7) 모든 학생의 이름(16명) 과 그 학생들의 지도 교수 이름, 학과 이름을 출력하세요.

 

지도교수가 없는 학생도 포함하려면 (+) 사용하고

join 을 두번 사용하면 될것 같다.

select s.name 학생명, p.name 지도교수명, d.dname 전공학과
from student s join professor p on s.profno = p.profno(+)
     join department d on s.deptno = d.deptno;

예제 7번

 

문제 8) 각각의 교수이름과 교수의 지도학생수를 출력하세요.

 

select p.name, count(*)
from professor p join student s 
     on p.profno = s.profno
group by p.name;

 

예제 8번