9
SQL 기기 Outer-Join 이이이 , 이이이이이 (topcredu.co.kr)

SQL기초강좌(외부조인, outer join), 오라클, MySQL, 내부조인,외부조인,

  • Upload
    3-2

  • View
    1.251

  • Download
    2

Embed Size (px)

Citation preview

Page 1: SQL기초강좌(외부조인, outer join), 오라클, MySQL, 내부조인,외부조인,

SQL 기초Outer-Join

이종철 , 탑크리에듀 (topcredu.co.kr)

Page 2: SQL기초강좌(외부조인, outer join), 오라클, MySQL, 내부조인,외부조인,

외부조인 (Outer Join) 이란 ?• 일반적인 조인 ( 내부조인 ) 은 두 테이블 모두 조인 조건을 만족시키는 레코드만 출력된다 . 즉 두 테이블중 한쪽 테이블의 값이 일치하지 않는 다면 해당 레코드는 출력되지 않는데 이 경우에도 결과로 출력해야 되는 경우가 있다면 외부조인 (Outer Join) 을 사용하면 된다 . 외부조인은 LEFT OUTER

JOIN, RIGTH OUTER JOIN, FULL OUTER JOIN 이 있다 .

• EMP, DEPT 를 조인하여 사원명 (ename) 과 부서명 (dname) 을 출력한다고 했을 때 EMP 테이블의 KING 은 최고관리자로 부서코드가 NULL 값이다 . 이 경우 emp.deptno = dept.deptno 로 조인을 한다면 KING 은 출력되지 않는다 .

Page 3: SQL기초강좌(외부조인, outer join), 오라클, MySQL, 내부조인,외부조인,

내부조인 (Inner Join) 예문

사원(EMP)

부서(DEPT)

-- 동등조인 (Equi-Join)select ename, dname from emp, deptwhere emp.deptno = dept.deptno;

select ename, dname from emp join depton emp.deptno = dept.deptno;

select ename, dname from emp join deptusing(deptno);

select ename, dname from emp natural join dept;KING 출력안됨

Page 4: SQL기초강좌(외부조인, outer join), 오라클, MySQL, 내부조인,외부조인,

왼쪽외부조인 (Left Outer Join) 예문사원(EMP)

부서(DEPT)

select ename, dname from emp left outer join depton emp.deptno = dept.deptno; --outer 는 생략가능-- 오라클 전용 , KING 의 DEPTNO 가 NULL 인데 부서쪽에 NULL 을 가지는 부서는 없으므로 부서쪽 , 부족한 쪽에 (+) 표시 , (+) 반대쪽 모두 출력됨select ename, dname from emp, deptwhere emp.deptno = dept.deptno(+);

Page 5: SQL기초강좌(외부조인, outer join), 오라클, MySQL, 내부조인,외부조인,

오른쪽외부조인 (Right Outer Join) 예문

사원(EMP)

부서(DEPT)

-- 부서별 사원수 출력 , 사원이 한명도 없는-- 40 번 OPERATION 부서는 출력되지 않는다 .select dname, count(e.empno) from emp e, dept dwhere e.deptno = d.deptno group by dname;-- right outer joinselect dname, count(e.empno) from emp e right outer join dept don e.deptno = d.deptno group by dname;

select dname, count(e.empno)from emp e right outer join dept dusing(deptno) group by dname; 40 번 부서 출력

Page 6: SQL기초강좌(외부조인, outer join), 오라클, MySQL, 내부조인,외부조인,

완전외부조인 (Full Outer Join) 예문사원(EMP)

부서(DEPT)

-- 사원이름과 부서명을 출력-- KING 도 출력하고 40 번부서도 동시에 출력-- 오라클 , MS-SQL 가능select ename, dname from emp full outer join depton emp.deptno = dept.deptno; -- MySQLselect ename, dname from emp right outer join depton emp.deptno = dept.deptnounion select ename, dname from emp left outer join depton emp.deptno = dept.deptno;

-- 오라클 형식 (+) 은 지원안함 .select ename, dname from emp, dept where emp.deptno(+) = dept.deptno(+);

Page 7: SQL기초강좌(외부조인, outer join), 오라클, MySQL, 내부조인,외부조인,

LAB

• 사원테이블 (EMP) 의 데이터가 좌측과 같고 KING은 MGR( 관리자 ID) 가 값이 없는 상태이며 MGR칼럼의 값은 같은 테이블인 EMP 의 EMPNO 값 입니다 .• Self Join 을 이용하여 사원명 , 관리자명을 출력하는데 관리자가 없는 KING 을 출력하고 ,

KING 의 관리자명은 “관리자없음”으로 표시하여 출력하세요 . ( 오라클은 NVL, MySQL 은 IFNULL 함수를 사용하시면 됩니다 .)

Page 8: SQL기초강좌(외부조인, outer join), 오라클, MySQL, 내부조인,외부조인,

실습 LAB( 해답 )

-- 오라클select e1.ename, nvl(e2.ename,'관리자없음 ') from emp e1 left join emp e2on e1.mgr = e2.empno;

-- MySQLselect e1.ename, ifnull(e2.ename,'관리자없음 ') from emp e1 left join emp e2on e1.mgr = e2.empno;

Page 9: SQL기초강좌(외부조인, outer join), 오라클, MySQL, 내부조인,외부조인,

This practice makes Expert!PL/SQL 단기속성 (1일완성 )SQL 힌트 / 튜닝 (단기 2일교육 )SQL기초과정