Oracle/SQL

2012.01.09 SQL 5일차 첫번째(SELF JOIN)

에몽이ㅋ 2012. 1. 9. 22:55
SELF JOIN : 필요한 정보가 한 테이블안에 다 있긴 한데 원하는 결과를 출력하려면, join을 써야 할 때
 
temp 테이블을 사용해  사번 ,성명 , 생일 , 자신보다 생일이 빠른 사람수를 조회하여 자신보다 생일이 빠른 사람수 순서대로 오름차순으로 정렬해서 출력하세요
  1  select emp1.emp_id, emp1.emp_name,
  2  count(emp2.birth_date) 빠른사람수
  3  from temp emp1, temp emp2
  4  where emp2.birth_date(+) < emp1.birth_date
  5  group by emp1.emp_id, emp1.emp_name
  6* order by 3
   EMP_ID EMP_NAME   빠른사람수
---------- ---------- ----------
  19960303 설까치              0
  19966102 지문덕              1
  19930402 강감찬              2
  19960212 배뱅이              3
  19960101 홍길동              4
  19950303 이순신              5
  19970101 김길동              6
  ...... 
  20006106 유도봉             15
  20000407 윤주왕             16
  20000308 강월악             17
  20000119 장금강             18
  20000210 나한라             19

20 rows selected.(OUTER JOIN 과 SELF JOIN 사용함을 알 수 있다.)




연습문제
 
교수 테이블에서 학과번호 ,교수 이름, 교수 별 지도 학생 수 , 학과별 소계학생수,  총 학생수를  출력하세요

  1  select p.deptno, p.name, count(s.name)
  2  from student s, professor p
  3  where p.profno = s.profno
  4* group by rollup(p.name, p.deptno)
SQL> /

    DEPTNO NAME       COUNT(S.NAME)
---------- ---------- -------------
       102 권혁일                 3
           권혁일                 3
       101 성연희                 2
           성연희                 2
       101 이만식                 1
           이만식                 1
       201 이재우                 1
           이재우                 1
       101 전은지                 3
           전은지                 3
                                 10

11 rows selected.