본문 바로가기
SQL/SQL 개념 정리

[SQL] UNION & JOIN 함수

by yeah-12 2024. 4. 24.

▶ SQK 에서 서로 다른 곳에 있는 데이터를 결합하는 방법 : UNION(수직결합) & JOIN(수평결합)

<UNION>

· 사용 : 데이터가 다른 테이블에 있을 때 하나로 수직결합 하며 묶을 때 
· 문법 : table A union table B
· 형식 : 두 테이블의  컬럼 순서가 같고, 데이터 형식이 같아야함

 

<UNION / UNION ALL>
· 공통점 : 두 쿼리문을 하나로 수직결합
· 주의점 : 열의 갯수와 순서가 모든 쿼리에서 동일 해야 함 / 데이터의 형식이 일치해야함
· 차이점 : UNION은 중복된 행을 하나로 표기하고 (중복제거하고 표기) = DISTINCT
             UNION ALL 은 모두 표현(중복을 제거하지 않고 표기)


 

<JOIN>
순서 
1) 공통컬럼(연결컬럼)을 먼저 찾기
공통컬럼 : 두 테이블에서 공통으로 존재하는 컬럼


2) 공통컬럼 관계 찾기 (PK 와 FK 찾기)

· PK(a.k.a 기본키) : NULL일 수 없고, 유일한 갑을 가짐.

모든 데이터를 식별하는 기준이 되는 컬럼이므로,  테이블 당 하나의 기본키만 가질 수 있다.

 

· FK(a.k.a 외래키) : 다른 테이블의 PK와 연결되어 테이블 간 관계를 나타내주는 컬럼.
기준이 되는 컬럼 (PK) 을 확인하기 위한 연결컬럼(FK)


· 공통컬럼의 컬럼명은 달라도 괜찮음. 데이터 내용이 동일하면 OK.
· 공통컬름은 ON절의 조건절이 되며 ,조건절은 1개가 아닐 수 있음

즉, on a.공통컬럼=b.공통컬럼 and a.공통컬럼2=b.공통컬럼2 가 될 수 있음

(아이디, 나이 두개를 기준으로  묶을 수 도 있으니까 !)

· 테이블 구조
1(기준) : 1(기준)
1(기준) : N(비교)
N(비교) : 1(기준)
N(비교) : N(비교) -> 기준테이블이 없으므로 데이터가 부풀려져 있어 리턴될수 있어 사용하지 않는 것 권장.

3) 적절한 조인방식 찾기
· INNER JOIN (가장많이 사용)

두테이블에서 일치하는 값을 가진 행을 출력 (교집합 개념) 

 

· LETF JOIN (가장많이 사용)

왼쪽 테이블의 모든 행과 오른쪽 테이블의 일치하는 행을 반환.

일치하는 항목이 없으면 오른쪽 테이블의 열에 대해 NULL값이 출력.

 

· RIGHT JOIN (거의 사용하지 않음)

오른쪽 테이블의 모든행과 왼쪽테이블의 일치하는 행을 반환.

일치하는 항목이 없으면, 왼쪽 테이블의 열에 대해 NULL값 출력.  


· FULL OUTER JOIN (MYsql 환경에서는 제공하지 않음 )

모든 데이터를 보고싶을 때 사용

레프트조인 + 유니온 + 라이트 조인으로 계산해야 함 (합집합)

N:N 결합으로 용량이 커지고, 그에 따른 비용 이슈로 잘 사용하지 않음 (즉 , 데이터양이 뻥튀기되서 비싸다!)