관리 메뉴

nkdk의 세상

오라클 DB 설계 및 활용 6일째 2번째 내용 본문

My Programing/DataBase

오라클 DB 설계 및 활용 6일째 2번째 내용

nkdk 2008. 3. 7. 20:33
자 2번째 내용은 3개의 테이블을 이용하여 해보도록 하겠습니다.

-- 세개의 테이블 조인

SELECT SAWON_NAME, BUSER_NAME, GOGEK_NAME FROM SAWON, BUSER, GOGEK WHERE BUSER_NUM = BUSER_NO AND SAWON_NO=GOGEK_DAMSANO;
SELECT SAWON_NAME, BUSER_NAME, GOGEK_NAME FROM SAWON INNER JOIN BUSER ON BUSER_NUM = BUSER_NO INNER JOIN GOGEK ON SAWON_NO=GOGEK_DAMSANO;
두 SELECT는 같은 값을 출력 시킨다.

SELECT SAWON_NAME, BUSER_NAME, GOGEK_NAME FROM SAWON, BUSER, GOGEK WHERE BUSER_NUM = BUSER_NO AND SAWON_NO=GOGEK_DAMSANO(+);

문1) 총무부에서 관리하는 고객 수 출력(고객 30살 이상은 작업에 참여)

SELECT COUNT(GOGEK_NO) FROM SAWON, BUSER, GOGEK WHERE (2007 - ((SUBSTR(GOGEK_JUMIN, 1, 2) + 1900))) > 30 AND BUSER_NAME = '총무부' AND BUSER_NO = BUSER_NUM AND SAWON_NO = GOGEK_DAMSANO;

문2) 부서명별 고객 인원수 (부서가 없으면 '무소속')

SELECT NVL(BUSER_NAME, '무소속'), COUNT(GOGEK_NO)
FROM GOGEK, SAWON, BUSER WHERE BUSER_NO(+) = BUSER_NUM AND SAWON_NO = GOGEK_DAMSANO GROUP BY NVL(BUSER_NAME, '무소속') ;

문3) 고객이 담당 직원의 자료를 보고 싶을 때 고객명을 입력하면
담당직원 자료 출력 : ~ WHERE GOGEK_NAME='강나루'
출력 ==>>
직원명 직급 부서명 부서전화

SELECT SAWON_NAME 직원명, SAWON_JIK 직급, BUSER_NAME 부서명, BUSER_TEL 부서전화 FROM BUSER, SAWON, GOGEK
WHERE BUSER_NO = BUSER_NUM AND SAWON_NO = GOGEK_DAMSANO AND GOGEK_NAME='&NAMES';

문4) 부서와 직원명을 입력하면 관리고객 자료 출력
~ WHERE BUSER_NAME = '영업부'
출력 ===>
고객명 고객전화 성별
강나루 123-4567 남

SELECT GOGEK_NAME 고객명, GOGEK_TEL 고객전화 , CASE SUBSTR(GOGEK_JUMIN, 8,1)
WHEN '1' THEN '남' WHEN '2' THEN '여' WHEN '3' THEN '남' WHEN '4' THEN '여' END 성별 FROM GOGEK, BUSER, SAWON
WHERE BUSER_NO = BUSER_NUM AND SAWON_NO = GOGEK_DAMSANO AND BUSER_NAME = '영업부' ;

정도가 되겠네요. 더 간단한 방법이 있겠죠? 화이팅 오늘은 여기 까지 인것 같네요.
3개 합치는 방법의 포인트는

FROM GOGEK, BUSER, SAWON
WHERE BUSER_NO = BUSER_NUM AND SAWON_NO = GOGEK_DAMSANO

이 정도 이겠네요. ^^ 모두 힘드시죠~ 힘내세요~^^

참고로 직접 해보시는 게 중요합니다. 보고 이해만 한다면 실력 늘지 않습니다.~ 화이팅~~ 조인도 끝이네요~ SELECT 문 2개 정도 더 익히면 끝나겠군요.^^