5. 조인
-하나 이상의 테이블로부터 데이터를 검색할 때
사원테이블(emp)에 사원명과 부서테이블(dept)에 그 사원의 부서명을 출력
1. 두 테이블만 기술 =>Cartesian Product
select ename, dname from emp, dept; |
emp 행수 : 14 dept 행수 : 4 결과 : 14 * 4개의 행수로 출력 |
2. 두 테이블 연결 => 조인 ( 내부조인 )
select ename, dname from emp, dept where emp.deptno = dept.deptno; |
결과 : 14행 |
(1) 부서번호로 검색하고자 한다면 두 테이블에 있기에 어느 테이블에서 가져올지 지정
(2)매 컬럼마다 테이블이름 지정 대신 테이블 alias로 대신
*자바에서 불러올 때 단순한 컬럼명으로만 부르기에 alias 지정 필수 !
(3)부서 없이 본인 데이터를 하나 입력한다. (deptno 없이 emp 테이블에 입력)
*다시 dept 테이블과 조인하여 확인 -> 입력된데이터 출력 안됨.
3. 외부조인 => 없는 데이터를 포함하여 조인
select e.ename as ename, d.dname as dname, e.deptno as deptno from emp e, dept d where e.deptno = d.deptno(+); |
결과 : 15행 |
*외부조인 : 한 테이블에 공통 컬럼값이 없더라도(null이라도) 검색
*(+) : 해당 데이터가 존재하지 않더라도 이를 무시하고 조인에 참여
[외부조인 특징 ]
-세 개의 테이블 조인시 한 조건이라도 외부조인이면 다른 조인에도 (+)를 붙여야함
-(+) 컬럼에만 붙이고, OR 연산자와 사용 못함
-두 테이블에 모두 (+)를 붙일 수 없음
-(+)이 붙은 컬럼과 IN 연산자, 서브쿼리를같이 사용 못함
4. ANSI 조인 ( 표준화 )
(1) 내부조인
select e.ename, d.dname, d.deptno from emp e, dept d where e.deptno = d.deptno; |
select e.ename, d.dname, d.deptno from emp e INNER JOIN dept d ON e.deptno = d.deptno; |
또는
select e.ename, d.dname, d.deptno from emp e, dept d where e.deptno = d.deptno; |
select e.ename, d.dname, deptno from emp e INNER JOIN dept d USING (deptno); |
*USING을 사용하면 deptno 검색시 테이블명을 지정하면 안되고 컬럼명만 기술.
*Natural join
select e.ename, d.dname, deptno from emp e Natural JOIN dept d; |
* Cartesian Product => CROSS JOIN
(2) 외부조인
select e.ename, d.dname, d.deptno from emp e, dept d where e.deptno = d.deptno(+); |
select e.ename, d.dname, d.deptno from emp e LEFT OUTER JOIN dept d ON e.deptno = d.deptno; |
select e.ename, d.dname, d.deptno from emp e, dept d where e.deptno(+) = d.deptno; |
select e.ename, d.dname, d.deptno from emp e RIGHT OUTER JOIN dept d ON e.deptno = d.deptno; |
*기존문법에서 (+)가 데이터가 없는 테이블에 붙였다면,
LEFT나 RIGHT는 반대로 데이터가 있는 테이블에 붙인다.
*기존 문법에서는 양 쪽에 (+)에 붙일 수 없는데,FULL OUTER JOIN으로 가능.
(3) 셀프조인
사원테이블(emp)에 각 사원의 매니저를 조회
select e.empno, e.ename,e.mgr, e2.ename
from emp e, emp e2
where e.mgr =e2.empno(+);
#IT #먹방 #전자기기 #일상
#개발 #일상