■ 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 : 적어도 하나의 속성이 공통인 두 테이블 속성을 결합하고자 할 때 사용(새로운 열로 결합 / 수평결합)