| JOIN 종류 | 설명 | 특징 |
|---|---|---|
INNER JOIN(내부 조인) | • 두 테이블에 모두 일치하는 데이터만 반환. • JOIN 키워드만 사용하면 기본적으로 INNER JOIN으로 동작. | • 가장 일반적인 조인. • ON 절에 조인 조건을 명시. |
OUTER JOIN(외부 조인) | • 한쪽 테이블에는 데이터가 있고 다른 쪽에는 없을 때도 결과를 반환. • LEFT: 왼쪽 테이블 기준, 오른쪽은 NULL 처리.• RIGHT: 오른쪽 테이블 기준, 왼쪽은 NULL 처리.• FULL: 양쪽 모두 기준, 없는 쪽은 NULL 처리. | • 기준이 되는 테이블의 모든 데이터를 보존하고 싶을 때 사용. |
CROSS JOIN(교차 조인) | • 두 테이블의 모든 행을 조합하여 반환. (곱집합, Cartesian Product) • FROM TABLE1, TABLE2 와 같이 조인 조건 없이 나열하면 발생. | • M:N 관계를 만들거나, 테스트 데이터를 생성할 때 외에는 거의 사용하지 않음. |
SELF JOIN(자체 조인) | • 하나의 테이블을 별칭(Alias)을 통해 자기 자신과 조인. • 테이블 내에 계층적인 관계가 있을 때 사용. | • EMP 테이블에서 사원과 관리자(사수)의 관계를 조회할 때. |
-- INNER JOIN 예시: 사원(EMP)과 부서(DEPT) 테이블 조인
SELECT E.ENAME, D.DNAME
FROM EMP E
INNER JOIN DEPT D ON E.DEPTNO = D.DEPTNO;
-- LEFT OUTER JOIN 예시: 부서에 배정되지 않은 사원도 함께 조회
SELECT E.ENAME, D.DNAME
FROM EMP E
LEFT OUTER JOIN DEPT D ON E.DEPTNO = D.DEPTNO;
SELECT, INSERT, UPDATE, DELETE) 내부에 포함된 SELECT 문으로, 복잡한 조회를 간결하게 만들어 줍니다. 괄호()로 감싸야 합니다.| 위치 | 종류 | 설명 | 반환 값 형태 |
|---|---|---|---|
SELECT 절 | 스칼라 서브쿼리 (Scalar Subquery) | • SELECT 목록에 포함되어, 외부 쿼리의 각 행에 대해 하나의 값을 반환. | 단일 값 (1행 1열) |
FROM 절 | 인라인 뷰 (Inline View) | • 서브쿼리의 결과를 하나의 가상 테이블처럼 사용. | 테이블 (다중 행, 다중 열) |
WHERE, HAVING 절 | 중첩 서브쿼리 (Nested Subquery) | • 조건절에서 비교 값으로 사용. • 단일 행, 다중 행, 다중 열 등 다양한 형태 가능. | 단일 행, 다중 행, 다중 열 |
-- 스칼라 서브쿼리 예시: 각 사원의 부서명을 조회
SELECT ENAME,
(SELECT DNAME FROM DEPT D WHERE E.DEPTNO = D.DEPTNO) AS DNAME
FROM EMP E;
-- 인라인 뷰 예시: 부서별 평균 급여보다 많이 받는 사원 조회
SELECT E.ENAME, E.SAL
FROM EMP E, (SELECT DEPTNO, AVG(SAL) AS AVG_SAL FROM EMP GROUP BY DEPTNO) D
WHERE E.DEPTNO = D.DEPTNO AND E.SAL > D.AVG_SAL;
-- 중첩 서브쿼리 예시: 'JONES'와 동일한 직업을 가진 사원 조회
SELECT ENAME, JOB
FROM EMP
WHERE JOB = (SELECT JOB FROM EMP WHERE ENAME = 'JONES');
SELECT 문의 결과 집합(Result Set)을 하나로 합치거나 비교합니다.| 연산자 | 설명 | 중복 처리 |
|---|---|---|
UNION | 두 결과 집합을 합침 (합집합) | 중복 제거 (내부적으로 정렬 발생) |
UNION ALL | 두 결과 집합을 그대로 합침 | 중복 포함 (단순히 합치므로 성능 우수) |
INTERSECT | 두 결과 집합에 공통으로 존재하는 행만 반환 (교집합) | 중복 제거 |
MINUS / EXCEPT | 첫 번째 결과 집합에서 두 번째 결과 집합을 뺀 결과 반환 (차집합) | 중복 제거 |
테이블 내에 부모-자식 관계와 같은 계층 구조가 있을 때, 이 구조를 따라 데이터를 조회하는 쿼리입니다. (Oracle 기준)
주요 절:
START WITH: 계층 구조의 시작점(루트)을 지정하는 조건.CONNECT BY: 부모와 자식 간의 관계를 정의하는 조건. (PRIOR 키워드 사용)ORDER SIBLINGS BY: 동일한 부모를 가진 형제 노드 간의 정렬을 지정.-- EMP 테이블에서 'JONES'를 시작으로 하는 조직도 조회
SELECT LEVEL, ENAME, MGR
FROM EMP
START WITH ENAME = 'JONES'
CONNECT BY PRIOR EMPNO = MGR;
JOIN은 여러 테이블을 연결하여 데이터를 풍부하게 만드는 관계형 데이터베이스의 핵심 기능입니다. INNER JOIN과 OUTER JOIN의 차이를 명확히 이해해야 합니다.SELECT 문으로, 사용되는 위치(SELECT, FROM, WHERE)에 따라 스칼라 서브쿼리, 인라인 뷰, 중첩 서브쿼리로 나뉩니다.SELECT 결과를 합치거나 비교하며, 특히 UNION과 UNION ALL의 중복 처리 및 성능 차이를 알아야 합니다.