SQL

[이론]SQL 심화 문법 정리 : JOIN(INNER/OUTER/CROSS/SELF), UNION

노력하는 백곰 2024. 12. 4. 08:26

■ JOIN

- 하나의 테이블에 원하는 데이터가 없을 때 두 테이블을 엮어 원하는 데이터를 구축하는 방법

- 두 테이블을 결합할 때 기본키(Primary Key), 외래키(Foreign Key)를 통해 관계를 형성

 

 

JOIN 종류

1. INNER JOIN(내부 조인)

- 두 테이블에 모두 지정한 열의 데이터가 존재할 때 두 테이블을 결합하는 조인

- 두 테이블을 연결할 때 가장 많이 사용하는 내부 조인

SELECT 
    Column 목록
FROM 
    테이블01
    INNER JOIN 테이블02           #INNER JOIN을 그냥 JOIN으로 사용해도 무방
    ON 조인 조건

 

 

 

2. OUTER JOIN(외부 조인)

- 한 테이블에 데이터만 존재해도 두 테이블을 결합하는 조인

- 내부 조인은 두 테이블에 모두 데이터가 있어야만 결과가 나오지만, 외부 조인은 한쪽에만 데이터가 있어도 결과 조회 가능

- 종류 : ①LEFT OUTER JOIN / ②RIGHT OUTER JOIN / ③FULL OUTER JOIN

SELECT 
    Column 목록
FROM 
    테이블01(LEFT 테이블)
    LEFT JOIN 테이블02(RIGHT 테이블)  
    #RIGHT JOIN 테이블02(RIGHT 테이블)  
    #FULL JOIN 테이블02(RIGHT 테이블)   
    ON 조인 조건

 

 

 

3. CROSS JOIN(상호 조인)

- 한쪽 테이블의 모든 행과 다른쪽 테이블의 모든 행을 결합한 조인

- 조인된 결과는 전체 행 수는 두 테이블의 각 행수를 곱한 것과 같음(즉, 카디셥 곱(CARTESIAN PRODUCT))

SELECT 
    Column 목록
FROM 
    테이블01
    CROSS JOIN 테이블02

 

 

 

4. SELF JOIN(자체 조인)

- 1개 테이블에 가상으로 별칭을 부여하여 결합하는 조인(즉, 자신이 자신과 결합하는 조인)

- 1개 컬럼 내, 섞여있는 레코드를 다른 컬럼을 통해서 위계 또는 관계를 조회하는 방법

SELECT 
    Column 목록
FROM 
    테이블01 AS 별명01,
    테이블01 AS 별명02
WHERE
    조인 조건

 

 

UNION

- 여러 개의 SELECT 문의 결과를 단일 결과 세트로 연결하여 표현할 때 사용

- 연결된 결과에서 중복된 행은 하나만 조회(참고, DISTINCT를 사용하지 않아도 중복된 레코드 제거)

- 조건 : ①UNION 내, 각 SELECT 문은 같은 수의 열을 갖는다. 

              ②각각 SELECT 문의 열은 또한 동일한 순서로 있어야 한다. 

              ③열은 호환되는 데이터 형식을 갖는다. 

SELECT * FROM A
UNION 
SELECT * FROM B

 

 UNION ALL

- UNION과 동일하게 여러 개의 SQL 문의 결과를 결합할 때 사용

- 하지만, UNION과 다른 점은 데이터 값이 중복되더라도 조건에 일치하는 데이터를 모두 조회

SELECT * FROM A
UNION ALL
SELECT * FROM B

 

 

■ JOIN과 UNION의 차이점

- UNION : 하나의 결과 세트만 조회(새로운 행으로 결합 / 수직결합)

- JOIN : 적어도 하나의 속성이 공통인 두 테이블 속성을 결합하고자 할 때 사용(새로운 열로 결합 / 수평결합)