JOIN

천소진·2022년 11월 10일
0

Study

목록 보기
16/29

집합 연산자와 JOIN

  • 공통점 : 서로 다른 두개 이상의 테이블을 합쳐줌

  • 차이점 : 집합연산자를 사용한 결과는 두개 이상의 select 문을 사용하므로 결과값을 세로로 연결해주고
    조인을 사용한 결과는 하나의 select 문을 사용하므로 결과값을 가로로 연결해줌.

1. CROSS JOIN

ex)
1) 조건이 없이 출력할때

select * 
     from emp,dept
         order by empno;
  ===> 조인의 조건이 명시 되지 않으면 , 모든 행을 조합하여 출력됨.

2) 조건을 명시 해줬을 때

select e.ename , d.loc, e.deptno          //한쪽에만 있는 컬럼은 별칭을 안적어줘도 무관 하지만 
from emp e, dept d                          양쪽테이블에 모두 존재하는 컬럼은 하나를 골라서 꼭 써줘야 함.
where e.deptno=d.deptno    (deptno의 값이 같은것만)
order by empno;
  ===> deptno 열의 값이 같은 14개의행만 출력됨.

2. EQUI JOIN(INNER JOIN) = 내부조인,단순조인, 등가조인

: 같은 컬럼의 데이터를 소유하는 서로 다른 테이블 끼리 비교 할때

ex)

  • emp 별칭을 e,dept 별칭을 d 으로 하고, 급여가 2500이하,사원번호가 9999 이하인 사원정보
select e.empno,e.ename, e.sal,d.deptno, d.dname,d.loc
from emp e, dept d
where e.deptno= d.deptno and e.sal<=2500 and e.empno<=9999
order by e.empno;

3. OUTER JOIN= 비등가조인

: 테이블 사이에 겹치는 컬럼과 데이터가 없지만 비교할 때
: 항상 각 테이블의 컬럼명을 확인해야함.

ex) 사원의 sal의 등급이 알고 싶을때

  • emp의 sal 이 salgrade 테이블에 존재하지 않음.
  • emp의 sal 을 salgrade 의 hisal 과 losal 로 범위 비교를 해서 grade 값을 얻어냄.
select* 
from emp e, salgrade s
where e.sal  between s.losal and s.hisal;  

4. SELF JOIN= 자체조인

: 같은 테이블의 내용을비교할때

ex)

  • 사원의 직속상사의 이름을 출력
    ==> 상사의 이름은 직접 알 수가 없어서 사원의 상사번호와 사원번호를 비교해서 이름을 추출.

1) 테이블을 복사해서 찾기

create table copy_emp as  select * from emp;   // 같은 테이블을 복사.

select e.empno, e.ename, e.empno as mgr_empno, c.ename as mgr_name
from emp e, copy_emp c
where e.mgr= c.empno
order by e.empno;

2) 테이블을 두개라고 생각하고 찾기 ( ≒ 객체 생성)

select e1.empno, e1.ename, e2.empno as mgr_empno, e2.ename as mgr_name
from emp e1, emp e2
where e1.mgr= e2.empno
order by e1.empno;

!!!!! 셀프조인과 외부조인 합치기
: 셀프 조인의 결과는 null값을 제외하고 나오기 때문에 null 값을 포함한 모든 데이터를 출력하고 싶을때 사용.

  • 왼쪽 외부조인
    : 왼쪽 열을 기준으로 오른쪽 열의 데이터 존재여부 상관없이 출력(null값도 가져옴).

ex)

select e1.empno,e1.ename,e1.mgr,
e2.empno as mgr_empno, e2.ename as mgr_name
from emp e1,emp e2
where e1.mgr = e2.empno(+)           //상사가 없는 사원들의 정보까지 출력
order by e1.empno;                                 A∩B+(A-B) 
  • 오른쪽 외부조인
    : 오른쪽 열을 기준으로 왼쪽 열의 데이터의 존재여부 상관없이 출력(null값도 가져옴).

ex)

select e1.empno,e1.ename,e1.mgr,
e2.empno as mgr_empno, e2.ename as mgr_name
from emp e1,emp e2
where e1.mgr(+) = e2.empno  		//부하직원이 없는 사원들의 정보까지 출력
order by e1.empno;                                 A∩B+(B-A)

0개의 댓글