메뉴 여닫기
개인 메뉴 토글
로그인하지 않음
만약 지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
Oracle (토론 | 기여)님의 2025년 5월 14일 (수) 01:06 판

물론입니다! 이번에는 요청하신 대로 **모든 표를 미디어위키 위키테이블 형식**으로 작성하고, 추가로 \*\*카테시안 조인(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. 📌 조인 종류 요약
| | - | ----------------------------------------------- | | 두 테이블에서 **일치하는 값이 있는 행만** 보여줌 | | | | 왼쪽 테이블은 **무조건 모두 출력**, 오른쪽에 일치하는 값이 없으면 NULL | | | | 오른쪽 테이블은 **무조건 모두 출력**, 왼쪽에 일치하는 값이 없으면 NULL | | | | 양쪽 테이블을 **모두 포함**, 일치하지 않으면 NULL | | | | 두 테이블의 **모든 행 조합**을 출력 (곱집합) | | | | **조건에 맞지 않는** 행만 보여줌 (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



카테시안 조인