1. 조인 (Join)
조인은 두 개 이상의 테이블을 공통된 컬럼(키) 을 기준으로 묶어서 하나의 결과로 보여주는 방법이다.
데이터베이스에서 가장 많이 사용되는 연산 중 하나다.
ㅇ 주요 조인 종류
종류 설명
| INNER JOIN | 양쪽 테이블에서 공통된 데이터만 조회 |
| LEFT OUTER JOIN | 왼쪽 테이블의 모든 데이터 + 오른쪽 테이블의 일치하는 데이터 |
| RIGHT OUTER JOIN | 오른쪽 테이블의 모든 데이터 + 왼쪽 테이블의 일치하는 데이터 |
| FULL OUTER JOIN | 양쪽 테이블의 모든 데이터를 합침 (일치하지 않아도 포함) |
| CROSS JOIN | 두 테이블의 모든 행을 조합 (카테시안 곱) |
| SELF JOIN | 같은 테이블을 자기 자신과 조인 |
예제: INNER JOIN
SELECT e.employee_id, e.first_name, d.department_name
FROM employees e
INNER JOIN departments d
ON e.department_id = d.department_id;
- employees 테이블과 departments 테이블을 조인해서
직원의 이름과 소속 부서를 함께 출력한다. - ON 절에서 조인의 기준 컬럼(department_id)을 지정한다.
예제: LEFT OUTER JOIN
SELECT e.first_name, d.department_name
FROM employees e
LEFT JOIN departments d
ON e.department_id = d.department_id;
- 부서가 없는 직원도 누락되지 않고 모두 조회된다.
- 조인 대상이 없는 경우 NULL 값으로 표시된다.
2. 서브쿼리 (Subquery)
서브쿼리(Subquery) 는 말 그대로 쿼리 안의 쿼리다.
하나의 SELECT 문 안에서 또 다른 SELECT 문을 실행해서, 그 결과를 기준으로 메인 쿼리가 동작하게 만든다.
서브쿼리의 주요 형태
구분설명
| 단일 행 서브쿼리 | 결과가 1개의 값만 반환될 때 (=, <, >, <=, >= 사용 가능) |
| 다중 행 서브쿼리 | 결과가 여러 개일 때 (IN, ANY, ALL 등과 함께 사용) |
| 상관 서브쿼리 (Correlated Subquery) | 외부 쿼리의 값을 내부 쿼리에서 참조하는 형태 |
예제 1: 단일 행 서브쿼리
SELECT first_name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
- 전체 직원의 평균 급여보다 높은 급여를 받는 직원을 조회한다.
- 괄호 안의 SELECT 문이 먼저 실행된 뒤, 그 결과값이 메인 쿼리의 조건에 사용된다.
예제 2: 다중 행 서브쿼리
SELECT first_name, department_id
FROM employees
WHERE department_id IN (SELECT department_id FROM departments WHERE location_id = 1700);
- location_id가 1700인 부서에 속한 모든 직원을 출력한다.
- 서브쿼리가 여러 개의 부서 ID를 반환하므로 IN을 사용한다.
3. 조인 vs 서브쿼리 — 언제 어떤 걸 쓸까?
구분특징
| 조인(Join) | 여러 테이블의 데이터를 하나의 결과로 합칠 때 적합 |
| 서브쿼리(Subquery) | 조건에 따라 특정 데이터를 필터링하거나 비교할 때 유용 |
| 성능 측면 | 조인이 일반적으로 더 빠름 (하지만 상황에 따라 다름) |
| 가독성 | 서브쿼리는 논리적으로 명확하지만 복잡해질 수 있음 |
실무에서는 조인과 서브쿼리를 적절히 섞어서 사용한다.
특히 데이터 분석 쿼리에서는 조인으로 결합 → 서브쿼리로 조건 제어 하는 패턴이 많다.
'DBMS > 개념' 카테고리의 다른 글
| 20_ 서브쿼리 (0) | 2025.10.18 |
|---|---|
| 19_ 조인(Join) (0) | 2025.10.16 |
| 17_ 뷰(view) (0) | 2025.10.11 |
| 16_ 트랜잭션 (Transaction) (0) | 2025.10.09 |
| 15_ 인덱스(Index) (0) | 2025.10.07 |