본문 바로가기

Kitri_NCS3기 보안과정/DB보안

170530 JOIN - 테이블의 행을 결합

Join은 두 테이블의 행을 결합하여 데이터를 조회하기위해 사용한다. 자신의 테이블의 고유 값(외래키) 와 상대테이블의 고유값(기본키) 를 이용해 상대방이 가지고있는 데이터를 참조 할 수 있다. FROM에서 사용하기 때문에 테이블을 합친다는 의미로 생각하는 경우 가 많은데 행과 행을 합친다는 의미가 더 적절하다.

 

 

먼저 기본키외래키에 대해 알아보자.

 

기본키는 테이블에 저장된 각 행을 고유하게 식별 할 수 있는 사용자데이터 또는 데이터의 조합이다. 고유한 성질을 띄기 때문에 Null값이 와서도 안되고 중복이 되서도 안된다.

외래키는 기본키를 참조하는 제약조건이 있다. 즉, 외래키의 구성은 기본키의 구성 값중 하나여야한다. 기본키와 외래키의 관계는 1:다 의 관계로 매칭 될 수 있다. 때문에 외래키는 중복된 값이 들어가도 허용이 된다. 하지만 기본키에 없는 값이 들어가면 에러가 발생한다.

 

JOIN의 종류

EQUI-INNER-JOIN

 : on 절을 이용하요 조인 조건을 기술할 때 "=(equal)"연산자 사용

 두 테이블의 행을 합치기 위해 조건에 "="연산자를 사용하기 때문에 조건을 만족하지 않는 행들은 합쳐지지 않으며 결과에도 표시되지 않습니다.

 

※ 주의 ! 컬럼명에 테이블의 이름을 접두어로 표시하는것이 좋다. ON절에서 비교하는 대상의 컬럼이름이 같을 경우 어떤 컬럼의 내용을 사용해야 할 지 혼란이 오기 때문에 SELECT에서 컬럼명을 지정해 줄때 테이블 이름을 접두어로 사용해주어야 한다.

 

※ TABLE-ALIAS 사용

from 에서 약어를 지정해주고 사용 할 수 있다. 숫자로 시작되면 안되면 가급적 간단한 약어로 하는것이 좋다.

hr.emploees → e 를 사용햇는데 바꿔놓고  hr.을 사용하면 에러남

 

※ 3-way join

조인 구문 작성시 JOIN 키워드 다음에 선언된 테이블은 항상 앞에 선언된 테이블하고만 조인 될 수 있다. (앞 ← 뒤 조인)

뒤에 선언된 테이블과는 조인될 수 없음을 주의 (앞 → 뒤 조인에러)

 

※ 컬럼의 이름과 데이터 유형이 일치할 경우 USING 절을 이용해도 되는데 걍 ON절 쓰는게 깔끔하고 확실함.

 

NON-EQUI-INNER-JOIN

 : INNER JOIN 구문에서 조인 조건을 기술 할 때, 조건에 "="가 아닌 다른 연산자가 사용된경우. 기본키 외래키 같은 연결고리가 없어도 테이블을 참조해서 사용하는 경우이다.

 

두 테이블의 데이터를 살펴보면 서로 연관성이없다. 어떻게 조인을 해서 가져오느냐.

salary 의 레코드 값을 오른쪽 테이블에 적용시켜 결과값을 변형 시킬 수 있다.

테이블의 salary 값을 grade 테이블에 매칭시켜 원하는 등급 값을 가져왓다.

 

 

OUTER JOIN

 : INNER 조인조건을 만족시키지 못해서 표시되지않는 레코드들을 추가적으로 더 표시해주는 방법으로 기본적으로 INNER JOIN의 값이 표시된 후에 조건을 만족하지 못한 레코드들이 출력된다. 3가지 방식이 있다.

1. RIGHT OUTER JOIN : JOIN 키워드의 오른편에 있는 테이블에서 조건을 만족시키지 못해 제외된 레코드들을 더 표시해준다.

2. LEFT OUTER JOIN : JOIN 키워드의 왼편에 있는 테이블에서 조건을 만족시키지 못해 제외된 레코드들을 더 표시해준다.

3. FULL OUTER JOIN : 모든 테이블에서 조건을 만족시키지 못해 제외된 레코드들을 더 표시해준다.

 

CROSS JOIN

 : 조인조건이 누락되거나 조인 조건이 유효하지않은 경우에 Cartesia Product문제가 발생할 수 있는데 이 경우 다대다 매칭으로  결과 레코드의 값이 불필요하게 많아져 과부하를 주게된다.  WHERE - AND 절을 사용해서 두 값을 강제로 조인하는 것이 특징이다.