본문 바로가기
개발공부/DB

[Join] 오라클 조인하기, 조인의 종류, 이너조인

by dokii 2021. 1. 4.
728x90

JOIN의 종류 네가지.

1 INNER JOIN

2 LEFT OUTER JOIN

3 RIGHT OUTER JOIN

4 FULL OUTER JOIN

 

 

1 INNER JOIN

Inner join은 교집합( A ∩ B ) 연산과 같습니다. 조인 키 컬럼 값이 양쪽 테이블 데이터 집합에서 공통적으로 존재하는 데이터만 조인해서 결과 데이터 집합으로 추출

이너조인은 생략할수있고, 콤마로 나타낼수 있다.

<사용법>
SELECT 컬럼명 [, 컬럼명]
  FROM 테이블A  
[INNER] JOIN 테이블B 
    ON 테이블A.조인키컬럼 = 테이블B.조인키컬럼
;

또는

SELECT 컬럼명 [, 컬럼명]
  FROM 테이블A 
           , 테이블B
 WHERE 테이블A.조인키컬럼 = 테이블B.조인키컬럼;

ex)

SELECT * FROM member, store 
FROM member.membernum = store.membernum

 

2 LEFT OUTER JOIN

  Left outer join은 교집합 연산 결과와 차집합 연산 결과를 합친 것( (A  B)  (A - B) )과 같습니다.
  조인 키 컬럼 값이 양쪽 테이블 데이터 집합에서 공통적으로 존재하는 데이터와 
Left outer join 키워드 왼쪽에 명시된 테이블에만 존재하는 데이터를 결과 데이터 집합으로 추출

<사용법>
SELECT 컬럼명 [, 컬럼명]
 FROM 테이블A  
   LEFT OUTER JOIN 테이블B 
 ON 테이블A.조인키컬럼 = 테이블B.조인키컬럼; 
     
또는

SELECT 컬럼명 [, 컬럼명]
 FROM 테이블A, 테이블B
 WHERE 테이블A.조인키컬럼 = 테이블B.조인키컬럼(+);

3 RIGHT OUTER JOIN

 Right outer join도 교집합 연산 결과와 차집합 연산 결과를 합친 것( (A  B)  (B-A) )과 같습니다.

차집합의 기준 집합이 Left outer join과 반대일 뿐입니다.
  아무튼 조인 키 컬럼 값이 양쪽 테이블 데이터 집합에서 공통적으로 존재하는 데이터와 
Right outer join 키워드 오른쪽에 명시된 테이블에만 존재하는 데이터를 결과 데이터 집합으로 추출

<사용법>

SELECT 컬럼명 [, 컬럼명]
  FROM 테이블A  
RIGHT OUTER JOIN 테이블B 
      ON 테이블A.조인키컬럼 = 테이블B.조인키컬럼; 

또는

SELECT 컬럼명 [, 컬럼명]
  FROM 테이블A, 테이블B
WHERE 테이블A.조인키컬럼(+) = 테이블B.조인키컬럼;

 

4 FULL OUTER JOIN

  Full outer join은 집합 연산 결과와 같습니다. 
  조인 키 컬럼 값이 양쪽 테이블 데이터 집합에서 공통적으로 존재하는 데이터와 한쪽 테이블에만 존재하는
 데이터도 모두 결과 데이터 집합으로 추출

<사용법>

SELECT 컬럼명 [, 컬럼명]
  FROM 테이블A  
  FULL OUTER JOIN 테이블B 
        ON 테이블A.조인키컬럼 = 테이블B.조인키컬럼; 
        
또는

SELECT 컬럼명 [, 컬럼명]
  FROM 테이블A  
  FULL OUTER JOIN 테이블B 
       ON 테이블A.조인키컬럼 = 테이블B.조인키컬럼;

 

여기서 왜 굳이 2번과 3번을쓸까(left, right join) -> null값이 표시되기때문!


조인은 테이블들에 관계를 부여하고, 그 데이터를 조작하고자 함에 있다.

 

관계를 맺고 있는 2개의 테이블의 데이터를 다음과 같이 조작할수 있다.

 

1. 부모 테이블의 조작 

 2. 자식 테이블의 조작

     

하지만, 조인하게되면 다음과 같은 상황이생긴다.

(부모 테이블이 staff, 자식 테이블이 project라고 가정)

1.a. 신입 사원 추가(O)

insert into tblStaff (seq, name, salary, address) values (4, '호호호', 190, '부천시');

 

1.b. 신규 프로젝트 추가(O)

insert into tblProject (seq, projectname, staffSeq) values (6, '자재 매입', 4);

 

1.c. 신규 프로젝트 추가(O -> X)

--ORA-02291: integrity constraint (HR.TBLPROJECT_STAFFSEQ_FK) violated - parent key not found

insert into tblProject (seq, projectname, staffSeq) values (7, '고객 유치', 5);

 

즉, staffSeq에 해당하는 직원의 키가 없으므로 tblProject 테이블의 staffSeq 컬럼에는 아무값이나 넣을 수 없고, tblStaff 컬럼에 있는 PK에 값이 있어야 삽입할 수 있다.

관계에의한 키값을 살펴야 하는것이다.

 

자세한 예시는 참고 블로그에.


 

 

 

조인 쉽게하는법.

1. 검색 대상과 조건을 찾는다.
 - 검색 대상은 SELECT 절에, 조건은 WHERE 절에 기술한다.


2. 검색될 정보를 가지고 있는 테이블을 파악한다.
 - FROM 절에 기술한다.


3. 테이블간의 관계를 확인한다. (연결 고리를 찾는다)
 - 연결 고리가 없다면 중계자 역할을 할 수 있는 테이블을 추가한다.


4. 조인 조건을 기술한다.


5. 전체 문장을 다듬는다.
 - 간결하게 만들기 등

 

 

 

 


참고한블로그


[출처]https://sparkdia.tistory.com/17 (join의 종류)

[출처]sas-study.tistory.com/81 (조인상세 예시)

[출처]keep-cool.tistory.com/39 (sql작성 예시)

728x90

댓글