DATABASE - 8장 - JOIN 연습문제
문제 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;
문제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;
문제 4) 부서 테이블에서 각 부서의 상위 부서 이름을 출력하시오. (학부 - 학과)
select c.dname 학부, d.dname 학과
from department c join department d
on d.deptno = c.college;
문제 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;
문제 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;
문제 8) 각각의 교수이름과 교수의 지도학생수를 출력하세요.
select p.name, count(*)
from professor p join student s
on p.profno = s.profno
group by p.name;