메뉴 여닫기
개인 메뉴 토글
로그인하지 않음
만약 지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
편집 요약 없음
편집 요약 없음
35번째 줄: 35번째 줄:


## 📌 조인 종류 요약
## 📌 조인 종류 요약
{| class="wikitable"
{| class="wikitable"
! 조인 종류 || 설명
|-
| INNER JOIN || 두 테이블에서 '''일치하는 값이 있는 행만''' 보여줌
|-
| LEFT OUTER JOIN || 왼쪽 테이블은 '''무조건 모두 출력''', 오른쪽에 일치하는 값이 없으면 NULL
|-
| RIGHT OUTER JOIN || 오른쪽 테이블은 '''무조건 모두 출력''', 왼쪽에 일치하는 값이 없으면 NULL
|-
| FULL OUTER JOIN || 양쪽 테이블을 '''모두 포함''', 일치하지 않으면 NULL
|-
| CROSS JOIN (카테시안 조인) || 두 테이블의 '''모든 행 조합'''을 출력 (곱집합)
|-
| ANTI JOIN || '''조건에 맞지 않는''' 행만 보여줌 (EXISTS가 아닌 NOT EXISTS 조건)
|}


| ! 조인 종류 !! 설명        |  |                                                |
| -------------------- | - | ----------------------------------------------- |
| INNER JOIN          |  | 두 테이블에서 **일치하는 값이 있는 행만** 보여줌                  |
| -                    |  |                                                |
| LEFT OUTER JOIN      |  | 왼쪽 테이블은 **무조건 모두 출력**, 오른쪽에 일치하는 값이 없으면 NULL    |
| -                    |  |                                                |
| RIGHT OUTER JOIN    |  | 오른쪽 테이블은 **무조건 모두 출력**, 왼쪽에 일치하는 값이 없으면 NULL    |
| -                    |  |                                                |
| FULL OUTER JOIN      |  | 양쪽 테이블을 **모두 포함**, 일치하지 않으면 NULL                |
| -                    |  |                                                |
| CROSS JOIN (카테시안 조인) |  | 두 테이블의 **모든 행 조합**을 출력 (곱집합)                    |
| -                    |  |                                                |
| ANTI JOIN            |  | **조건에 맞지 않는** 행만 보여줌 (EXISTS가 아닌 NOT EXISTS 조건) |
| }                    |  |                                                |
---


## 📘 INNER JOIN
## 📘 INNER JOIN

2025년 5월 14일 (수) 01:09 판

물론입니다! 이번에는 요청하신 대로 **모든 표를 미디어위키 위키테이블 형식**으로 작성하고, 추가로 \*\*카테시안 조인(CARTESIAN JOIN)\*\*과 \*\*안티 조인(ANTI JOIN)\*\*도 포함하여 **Oracle의 조인 종류를 초보자도 쉽게 이해**할 수 있도록 정리해드리겠습니다.

---

  1. 🔗 Oracle 테이블 조인 (Table Join) 설명
    1. 📌 조인이란?

> 여러 테이블에서 관련된 데이터를 **하나의 결과로 결합**해서 보여주는 SQL 기능입니다.

예: 직원 정보는 `EMPLOYEES`, 부서 정보는 `DEPARTMENTS`에 있을 때 👉 직원 이름 + 부서 이름을 함께 보여주고 싶을 때 조인을 사용합니다.

---

    1. 📌 예제 테이블

```sql -- EMPLOYEES 테이블 | EMP_ID | NAME | DEPT_ID | |--------|---------|---------| | 101 | Alice | 10 | | 102 | Bob | 20 | | 103 | Charlie | 10 |

-- DEPARTMENTS 테이블 | DEPT_ID | DEPT_NAME | |---------|------------| | 10 | HR | | 20 | IT | | 30 | Marketing | ```

---

    1. 📌 조인 종류 요약
조인 종류 설명
INNER JOIN 두 테이블에서 일치하는 값이 있는 행만 보여줌
LEFT OUTER JOIN 왼쪽 테이블은 무조건 모두 출력, 오른쪽에 일치하는 값이 없으면 NULL
RIGHT OUTER JOIN 오른쪽 테이블은 무조건 모두 출력, 왼쪽에 일치하는 값이 없으면 NULL
FULL OUTER JOIN 양쪽 테이블을 모두 포함, 일치하지 않으면 NULL
CROSS JOIN (카테시안 조인) 두 테이블의 모든 행 조합을 출력 (곱집합)
ANTI JOIN 조건에 맞지 않는 행만 보여줌 (EXISTS가 아닌 NOT EXISTS 조건)


    1. 📘 INNER JOIN

```sql SELECT E.EMP_ID, E.NAME, D.DEPT_NAME FROM EMPLOYEES E INNER JOIN DEPARTMENTS D ON E.DEPT_ID = D.DEPT_ID; ```

| | | | - | ------- | - | -- | | Alice | | HR | | | | | | Bob | | IT | | | | | | Charlie | | HR | | | | |

---

    1. 📘 LEFT OUTER JOIN

```sql SELECT E.EMP_ID, E.NAME, D.DEPT_NAME FROM EMPLOYEES E LEFT OUTER JOIN DEPARTMENTS D ON E.DEPT_ID = D.DEPT_ID; ```

  • `EMPLOYEES`의 모든 직원은 다 나오고,
  • 일치하지 않는 부서가 있으면 `DEPT_NAME`은 NULL

---

    1. 📘 RIGHT OUTER JOIN

```sql SELECT E.EMP_ID, E.NAME, D.DEPT_NAME FROM EMPLOYEES E RIGHT OUTER JOIN DEPARTMENTS D ON E.DEPT_ID = D.DEPT_ID; ```

  • `DEPARTMENTS`의 모든 부서는 다 나오고,
  • 직원이 없는 부서는 `EMP_ID`, `NAME`이 NULL

---

    1. 📘 FULL OUTER JOIN

```sql SELECT E.EMP_ID, E.NAME, D.DEPT_NAME FROM EMPLOYEES E FULL OUTER JOIN DEPARTMENTS D ON E.DEPT_ID = D.DEPT_ID; ```

  • `EMPLOYEES`, `DEPARTMENTS` 둘 다 포함
  • 한쪽에만 데이터가 있으면 다른 쪽은 NULL

---

    1. 📘 CARTESIAN JOIN (CROSS JOIN)

```sql SELECT E.EMP_ID, E.NAME, D.DEPT_NAME FROM EMPLOYEES E CROSS JOIN DEPARTMENTS D; ```

  • 조인 조건 없이 **모든 행을 조합**
  • EMPLOYEES가 3행, DEPARTMENTS가 3행이면 → 결과는 9행
| | | | - | ----- | - | --------- | | Alice | | HR | | | | | | Alice | | IT | | | | | | Alice | | Marketing | | | | | | Bob | | HR | | | | | | ... | | ... | | | | |

> ❗ 주의: **WHERE 조건 없이 CROSS JOIN을 쓰면 큰 결과가 나올 수 있어 조심해야 합니다.**

---

    1. 📘 ANTI JOIN (조건에 부합하지 않는 데이터만)

```sql SELECT * FROM DEPARTMENTS D WHERE NOT EXISTS (

 SELECT 1 FROM EMPLOYEES E WHERE E.DEPT_ID = D.DEPT_ID

); ```

  • **직원이 없는 부서만 조회**하는 예제입니다.
| | - | --------- | | Marketing | | |

> ✅ 실무에서 **특정 값이 존재하지 않는 경우**를 찾을 때 많이 사용합니다.

---

    1. 📌 마무리 요약 표
| | | | - | ---------------------------- | - | ------------------- | | `A INNER JOIN B ON 조건` | | A와 B 모두 조건에 맞는 데이터만 | | | | | | `A LEFT OUTER JOIN B ON 조건` | | A는 모두, B는 맞는 것만 | | | | | | `A RIGHT OUTER JOIN B ON 조건` | | B는 모두, A는 맞는 것만 | | | | | | `A FULL OUTER JOIN B ON 조건` | | A와 B 모두 포함 | | | | | | `A CROSS JOIN B` | | 모든 조합 (곱집합) | | | | | | `WHERE NOT EXISTS (서브쿼리)` | | 조건에 부합하지 않는 데이터 | | | | |

---



https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/Joins.html#GUID-39081984-8D38-4D64-A847-AA43F515D460



카테시안 조인