안녕하세요!
오늘은 데이터베이스의 검색 방법중 JOIN에 대해서 자세히 알아보겠습니다.
조인
조인은 데이터베이스에서 여러 테이블에 저장된 데이터를 연결하거나 결합해서 조회할 때 사용하는 SQL의 기능 입니다.
각 테이블의 특정 관계 (PK, 외래 키)를 통해 연결하여 데이터를 합칠 수 있습니다.
조인의 종류
- INNER JOIN
- LEFT OUTER JOIN
- RIGHT OUTER JOIN
- FULL OUTER JOIN
- CROSS JOIN
- SELF JOIN
INNER JOIN
SELECT A.id, B.name FROM 기준테이블 A
INNER JOIN 조인테이블 B
ON A.id = B.id;
두 비교 대상 A,B 테이블에서 지정한 ON 구문의 필드값이 공통으로 중복된 값, 즉 교집합에 해당하는 값을 가져옵니다. 두 테이블 간에 매칭되지 않은 행은 검색 결과에서 제외됩니다.
가장 기본적인 조인으로서 INNER JOIN 대신 JOIN만 작성해도 INNER JOIN이 적용됩니다.
LEFT OUTER JOIN
SELECT A.id, B.name FROM 기준테이블 A
LEFT OUTER JOIN 조인테이블 B
ON A.id = B.id;
기준테이블 A의 모든 데이터의 값과 연결로 지정된 필드가 공통으로 중복된 값에 해당하는 결과값을 보여줍니다.
이때 기준테이블의 모든 행을 반환하고 조인 테이블에 매칭되지 않는 값들은 NULL로 채워집니다.
LEFT JOIN으로 구문을 작성해도 LEFT OUTER JOIN이 적용됩니다.
위 처럼 기준테이블에만 존재하는 값을 가져오고자 할때는 조건문을 통해 구현이 가능합니다.
SELECT A.id FROM 기준테이블 A
LEFT OUTER JOIN 조인테이블 B
ON A.id = B.id
WHERE B.id IS NULL;
이렇게 조건을 넣어주면 기준테이블과 조인테이블이 매칭되지 않은 기준테이블 A 의 값들에 대해서만 조회가 가능합니다.
RIGHT OUTER JOIN
LEFT OUTER JOIN과 내용은 동일하기 때문에 넘어가지만
RIGHT JOIN은 기준테이블의 값을 가져오는게 아닌 조인테이블의 값을 베이스로 가져오게 됩니다.
FULL OUTER JOIN
SELECT A.id, B.name FROM 기준테이블 A
FULL OUTER JOIN 조인테이블 B
ON A.id = B.id;
두 테이블의 모든 데이터를 결과값으로 가져옵니다.
다만 상호 매칭되지 않은 값에 대해서는 NULL로 채워집니다.
FULL JOIN으로 구문을 실행해도 FULL OUTER JOIN으로 적용됩니다.
CROSS JOIN
SELECT A.id, B.name FROM 기준테이블 A
CROSS JOIN 조인테이블 B
크로스 조인은 A,B 두 집합의 각요소를 조합하여 모든 가능한 쌍을 만드는 카테시안 곱으로도 불리는 조인입니다.
조인하려는 두 테이블의 모든 경우의수를 생성하도록 동작하여 N x M개의 결과값을 반환합니다.
SELF JOIN
SELF JOIN은 말 그대로 자기 자신 테이블과 조인하는 것인데요 같은 테이블의 행들간의 관계를 나타내는데 주로 사용합니다.
직원 테이블 | ||
id | name | manager |
1 | 김영하 | null |
2 | 아몬드 | 1 |
3 | 허재 | 1 |
4 | 김상식 | 2 |
5 | 조용필 | 2 |
위와 같은 형태의 테이블이 있을 때 사원들의 관리자는 id 코드로 관리되어 있어 명확히 찾기가 어렵습니다.
SELECT e.name AS name, m.name AS manager
FROM employee e
LEFT JOIN employee m
ON e.manager_id = m.id;
SELF JOIN은 다른 키워드는 없이 JOIN문을 자신의 테이블에 거는것을 이야기 하는데요 위 처럼 SQL을 통해 사원별 관리자 이름을 확인하고자 했고 LEFT JOIN을 통해 관리자가 없는 직원의 경우는 null 값으로 표기하도록 했습니다.
[SQL결과]
name | manager |
김영하 | null |
아몬드 | 김영하 |
허재 | 김영하 |
김상식 | 아몬드 |
조용필 | 아몬드 |
이렇게 셀프 조인을 통해 같은 테이블 간에 정보를 확실하게 확인할 수 있겠네요
USING VS ON
두 테이블을 조인할 때 조인 조건 지정방법으로 USING과 ON이 사용 가능합니다.
USING절은 비교하려는 테이블에서 열의 이름이 동일할 경우에만 사용이 가능하며 결과집합에서 중복이 제거되어 하나의 컬럼으로 나타납니다.
반면 ON의 경우 두 테이블의 열 이름이 달라도 사용이 가능하며 명시적으로 열을 선택하여 결과 값 출력이 가능합니다. 또한 연산 조건문등의 사용이 가능합니다.
'CS공부 > 데이터베이스' 카테고리의 다른 글
[DB] 정규화 너무 어렵습니다. (1) | 2025.01.02 |
---|---|
[DB] Index? 인덱스가 뭔가요 (1) | 2024.12.28 |