160 likes | 402 Views
7 장 조인. 목 차. EQUI JOIN 컬럼 명의 모호성 해결 테이블명에 별칭 부여 EQUI JOIN 에 AND 연산을 추가하여 검색 NON-EQUI JOIN SELF JOIN OUTER JOIN 예제. 조인의 기본 개념. 조인 : 원하는 정보가 하나의 테이블에 없을때 두 개이상의 테이블에서 정보를 얻음. 사원번호가 7900 인 사원의 이름 , 부서명 조회 SQL> SELECT * FROM emp; SQL> SELECT * FROM dept;
E N D
목 차 • EQUI JOIN • 컬럼 명의 모호성 해결 • 테이블명에 별칭 부여 • EQUI JOIN에 AND 연산을 추가하여 검색 • NON-EQUI JOIN • SELF JOIN • OUTER JOIN • 예제
조인의 기본 개념 • 조인 : 원하는 정보가 하나의 테이블에 없을때 • 두 개이상의 테이블에서 정보를 얻음 • 사원번호가 7900인 사원의 이름, 부서명 조회 • SQL> SELECT* FROM emp; • SQL> SELECT* FROM dept; SQL> SELECT empno, ename, deptno 2 FROM emp 3 WHERE empno = 7900; SQL> SELECT dname 2 FROM dept 3 WHERE deptno = 30;
EQUI JOIN Equi join : 공통으로 존재하는 컬럼이 같은 값을 가질 때 결합
EQUI JOIN • 사원명과 부서명 조회 SQL> SELECT ename, dname 2 FROM emp, dept 3 WHERE emp.deptno = dept.deptno;
컬럼 명의 모호성 해결 두 테이블에 같은 이름의 컬럼이 존재할 때 테이블명을 앞에 명시해야 함 - 테이블 명.컬럼명 SQL> SELECT ename, dname, 2 FROM emp, dept 3 WHERE deptno = deptno; Error : 열의정의가 애매합니다. SQL> SELECT ename, dname, emp.deptno, dept.deptno 2 FROM emp, dept 3 WHERE emp.deptno = dept.deptno;
테이블명에 별칭 부여 테이블명 뒤에 공백을 두고 별칭 부여 SQL> SELECT e.ename, d.dname, e.deptno, d.deptno 2 FROMemp e, dept d 3 WHEREe.deptno = d.deptno;
EQUI JOIN에 AND 연산을 추가하여 검색 • 이름이 ‘SCOTT’인 사원의 이름과 부서명 조회 SQL> SELECT ename, dname 2 FROM emp e, dept d 3 WHERE e.deptno = d.deptno 4 AND e.ename='SCOTT';
NON-EQUI JOIN Non-Equi join : 컬럼이 일정 범위의 값을 가질 때 결합 • 호봉 테이블 조회 SQL> SELECT * from salgrade; • 사원 이름과 급여, 호봉 산출 SQL> SELECT e.ename, e.sal, s.grade 2 FROM emp e, salgrade s 3 WHERE e.sal >= s.losal AND e.sal <= s.hisal; SQL> SELECT e.ename, e.sal, s.grade 2 FROM emp e, salgrade s 3 WHERE e.sal BETWEEN s.losal AND s.hisal;
SELF JOIN Self join : 자기자신 테이블과 결합 • 사원의 이름과 상사의 이름 조회 SQL> SELECT e.ename || ‘의 매니저는 ’|| m.ename || ‘입니다.’ 2 FROM emp e, emp m 3 WHERE e.mgr = m.empno;
OUTER JOIN Outer join : 조건에 만족하지 않는 행도 나타내도록 하는 결합 SQL> SELECT e.ename || ‘의 매니저는 ’|| m.ename || ‘입니다.’ 2 FROM emp e, emp m 3 WHERE e.mgr = m.empno(+); 값이없는 쪽, Null값이 인쇄되는 쪽에 (+) 기호
사원의 이름과 부서명을 조회하시오(부서테이블의 모든 부서 출력) SQL> SELECT e.ename, d.dname 2 FROM emp e, dept d 3 WHERE e.deptno(+) = d.deptno; 값이 없는 쪽에 (+) 기호 즉, null값이 인쇄되는 쪽 OUTER JOIN
예제 1,2 • 사원의 이름과 부서번호, 부서명 조회 SQL> SELECT e.ename, d.deptno, d.dname 2 FROM emp e, dept d 3 WHERE e.deptno = d.deptno; • 부서번호가 30인 사원의 이름, 직급, 부서번호, 부서위치 조회 SQL> SELECT e.ename, e.job, e.deptno, d.loc 2 FROM emp e, dept d 3 WHERE e.deptno = d.deptno 4 and e.deptno=30;
예제 3,4 • 커미션을 받는 사원의 이름, 커미션, 부서명, 위치 출력 SQL> SELECT e.ename, e.comm, d.dname, d.loc 2 FROM emp e, dept d 3 WHERE e.deptno = d.deptno 4 and e.comm is not null and e.comm > 0; and NVL(e.comm, 0) > 0 • 달라스에서 근무하는 사원의 이름, 직급, 부서번호, 부서이름 출력 SQL> SELECT e.ename, e.job, e.deptno, d.dname 2 FROM emp e, dept d 3 WHERE e.deptno = d.deptno 4 and d.loc=‘DALLAS’;
예제 5, 6 • 이름에 ‘A’들어가는 사원의 이름, 부서이름 출력 SQL> SELECT e.ename, d.dname 2 FROM emp e, dept d 3 WHERE e.deptno = d.deptno 4 and e.ename like ‘%A%’; • 사원이름과 직급, 급여, 호봉 출력 SQL> SELECT e.ename, e.job, e.sal, s.grade 2 FROM emp e, salgrade s 3 WHERE e.sal BETWEEN s.losal AND s.hisal;
예제 7 • 사원명, 부서번호, 해당사원과 같은 부서에서 근무하는 사원 출력 SQL> SELECT e.ename“자신’,e.deptno, c.ename“동료”, c.deptno 2 FROM emp e, emp c 3 WHERE e.ename <> c.ename 4 and e.deptno=c.deptno 5 ORDER BY e.ename;