해당 게시글에서는 JOIN문을 이해할 수 있도록 간단히 정리해보았다. 주로 사용되는 분류만을 다루었기 때문에 생략된 JOIN의 종류가 있음을 미리 알린다.
목차
JOIN?
두 개 이상의 테이블을 서로 연결하여 데이터를 검색할 때 사용하는 방법으로, 두 개의 테이블을 마치 하나의 테이블인 것처럼 보여준다.
1. INNER JOIN(내부 조인)
INNER 조인은 일반적인 JOIN의 기본 형태로, 두 테이블 간의 교집합을 반환하며 매칭 조건(*ON 절 또는 *USING 절)에 부합하는 행만 결과로 포함한다.
-- ['INNER' 생략 가능]
-- ON절
-- 컬럼 이름이 달라도 사용 가능
-- OR, AND 등 복잡한 조건 사용 가능
SELECT A.id, A.name, B.age
FROM A
INNER JOIN B
ON A.id = B.USER_id;
-- USING절
-- 각 테이블의 동일한 이름의 컬럼만 사용 가능
-- 때문에 비교적 간단해보임
SELECT *
FROM Employees
JOIN Departments
USING (dept_id);
2. OUTER JOIN(외부 조인)
Inner Join 과 다르게 공통되지 않은 행도 유지한다.
- 이때 두 테이블 모두의 값을 유지하면 Full Outer Join
- 왼쪽 테이블 값만 유지하면 Left Outer Join
- 오른쪽 테이블 값만 유지하면 Right Outer Join
* MySQL에서는 FULL OUTER JOIN을 지원하지 않으므로 LEFT OUTER JOIN 결과와 RIGHT OUTER JOIN결과를 UNION 하여 사용해야 함
1) FULL OUTER JOIN
두 테이블의 모든 데이터를 포함하며, 아래와 같이 매칭되지 않는 데이터는 NULL로 채워진다.
-- 합집합 형태
SELECT *
FROM instructor
FULL OUTER JOIN teaches
ON instructor.id = teaches.id
이때, 대칭차 형태(교집합이 아닌 부분만 조회)로 조건을 걸고 싶다면 쿼리 조건을 아래와 같이 수정하면 된다.
-- 대칭차 형태
SELECT *
FROM instructor
FULL OUTER JOIN teaches
ON instructor.id = teaches.id
WHERE instructor.id IS NULL
OR teaches.id IS NULL
-- instructor에만 있는 데이터
SELECT *
FROM instructor
FULL OUTER JOIN teaches
ON instructor.id = teaches.id
WHERE teaches.id IS NULL
-- teaches에만 있는 데이터
SELECT *
FROM instructor
FULL OUTER JOIN teaches
ON instructor.id = teaches.id
WHERE instructor.id IS NULL
2) LEFT (OUTER) JOIN
왼쪽(먼저 선언된) 테이블을 기준으로 하여 공통된 데이터를 제공하는 조인이다.
SELECT 조회할 컬럼
FROM 기준테이블1
LEFT OUTER JOIN 테이블2
ON 조건문
[WHERE 추가조건문]
3) RIGHT (OUTER) JOIN
우측(나중에 선언된) 테이블을 기준으로 하여 공통된 데이터를 제공하는 조인이다.
SELECT 조회할 컬럼
FROM 테이블1
RIGHT OUTER JOIN 기준테이블2
ON 조건문
[WHERE 추가조건문]
3. CROSS JOIN
두 테이블 데이터의 모든 조합(곱집합)을 조회할 수 있는 JOIN문 종류이다.
- 테이블1의 row * 테이블2의 row 개수만큼의 row를 가진 테이블 생성
-- 아래 3 문장 모두 동일한 결과를 반환함
--1)
SELECT 조회할컬럼
FROM 테이블1, 테이블2
--2)
SELECT 조회할컬럼
FROM 테이블1
JOIN 테이블2
--3)
SELECT 조회할컬럼
FROM 테이블1
CROSS JOIN 테이블2
해당 게시물 작성에 참고한 포스팅의 링크를 아래 참조하였다.
https://learn.microsoft.com/ko-kr/power-query/merge-queries-left-anti
'DBMS' 카테고리의 다른 글
[ORACLE/TIBERO] 데이터 복구 (0) | 2022.11.28 |
---|---|
[TIBERO] TBstudio 설치하기 :TBadmin (0) | 2022.09.16 |
[ORACLE/TIBERO] 함수 (0) | 2022.08.18 |
[DBeaver] Tibero 연결 (0) | 2022.07.05 |
[MySQL] 설치 & 이관작업 (0) | 2022.02.03 |