데이터베이스/ORACLE

[데이터베이스] ORACLE 조인(JOIN)의 종류와 차이점: INNER, LEFT, RIGHT, FULL OUTER JOIN 예제 코드 정리

CodeCaine Explorer 2024. 10. 29. 20:09
728x90
반응형
SMALL

1. 조인이란?

조인 (JOIN)여러 테이블의 데이터를 연결해서 하나의 결과를 만드는 SQL 작업이에요.
예를 들어, "학생 정보" 테이블과 "수업 정보" 테이블을 연결해서 "학생이 듣는 수업" 데이터를 가져올 때 사용해요.


2. 조인의 종류와 차이점

1) INNER JOIN (내부 조인)

  • 공통된 데이터만 결과로 가져와요.
  • 두 테이블에서 조건을 만족하는 교집합 데이터를 반환해요. 😊

2) LEFT JOIN (좌측 외부 조인)

  • 왼쪽 테이블의 모든 데이터와, 조건에 맞는 오른쪽 테이블 데이터를 가져와요.
  • 왼쪽 테이블에만 있는 데이터도 포함돼요. 😊

3) RIGHT JOIN (우측 외부 조인)

  • 오른쪽 테이블의 모든 데이터와, 조건에 맞는 왼쪽 테이블 데이터를 가져와요.
  • 오른쪽 테이블에만 있는 데이터도 포함돼요. 😊

4) FULL OUTER JOIN (전체 외부 조인)

  • 두 테이블의 모든 데이터를 가져와요.
  • 조건에 맞는 데이터는 조인되고, 조건에 없는 데이터는 NULL로 표시돼요. 😲

3. 간단한 예시 코드 (오라클 SQL)

테이블 준비

-- 학생 정보 테이블
CREATE TABLE Students (
    StudentID NUMBER PRIMARY KEY,
    Name VARCHAR2(50)
);

-- 수업 정보 테이블
CREATE TABLE Courses (
    CourseID NUMBER PRIMARY KEY,
    StudentID NUMBER, -- 학생 ID
    CourseName VARCHAR2(50)
);

-- 데이터 삽입
INSERT INTO Students VALUES (1, 'Alice');
INSERT INTO Students VALUES (2, 'Bob');
INSERT INTO Students VALUES (3, 'Charlie');

INSERT INTO Courses VALUES (101, 1, 'Mathematics'); -- Alice의 수업
INSERT INTO Courses VALUES (102, 2, 'Physics');     -- Bob의 수업
INSERT INTO Courses VALUES (103, 4, 'Biology');     -- 학생 정보에 없는 수업

1) INNER JOIN 예제

-- INNER JOIN: 공통된 데이터 (학생이 수업에 등록된 경우만)
SELECT S.Name, C.CourseName
FROM Students S
INNER JOIN Courses C
ON S.StudentID = C.StudentID;

-- 결과:
-- Alice | Mathematics
-- Bob   | Physics

💡 설명:

  • AliceBob은 공통 데이터로 조건에 맞아 결과에 포함. 😊
  • CharlieBiology는 조건에 맞지 않아서 제외.

2) LEFT JOIN 예제

-- LEFT JOIN: 왼쪽 테이블의 모든 데이터 포함
SELECT S.Name, C.CourseName
FROM Students S
LEFT JOIN Courses C
ON S.StudentID = C.StudentID;

-- 결과:
-- Alice   | Mathematics
-- Bob     | Physics
-- Charlie | NULL

💡 설명:

  • Charlie는 오른쪽 테이블에 데이터가 없지만, 왼쪽 테이블에 있으므로 결과에 포함되고, 수업 정보는 NULL로 표시. 😊

3) RIGHT JOIN 예제

-- RIGHT JOIN: 오른쪽 테이블의 모든 데이터 포함
SELECT S.Name, C.CourseName
FROM Students S
RIGHT JOIN Courses C
ON S.StudentID = C.StudentID;

-- 결과:
-- Alice | Mathematics
-- Bob   | Physics
-- NULL  | Biology

💡 설명:

  • Biology는 오른쪽 테이블에 있지만, 학생 정보가 없어서 NULL로 표시. 😊

4) FULL OUTER JOIN 예제

-- FULL OUTER JOIN: 두 테이블의 모든 데이터 포함
SELECT S.Name, C.CourseName
FROM Students S
FULL OUTER JOIN Courses C
ON S.StudentID = C.StudentID;

-- 결과:
-- Alice   | Mathematics
-- Bob     | Physics
-- Charlie | NULL
-- NULL    | Biology

💡 설명:

  • 모든 데이터를 가져오며, 조인 조건이 없는 데이터는 NULL로 표시돼요. 😲

4. 조인 종류 요약 😊

조인 종류 설명 예시
INNER JOIN 두 테이블의 공통 데이터만 반환 Alice와 Bob만 결과 포함
LEFT JOIN 왼쪽 테이블의 모든 데이터 포함 (오른쪽은 조건에 맞는 것만) Charlie 포함, 수업 정보는 NULL
RIGHT JOIN 오른쪽 테이블의 모든 데이터 포함 (왼쪽은 조건에 맞는 것만) Biology 포함, 학생 정보는 NULL
FULL OUTER JOIN 두 테이블의 모든 데이터 포함 모든 데이터 포함, 조건 없는 곳은 NULL

5. 동작 방식 설명

  1. INNER JOIN: 조건에 맞는 데이터만 가져와요.
  2. LEFT JOIN: 왼쪽 테이블의 데이터는 모두 가져오고, 오른쪽 테이블은 조건에 맞는 데이터만 가져와요.
  3. RIGHT JOIN: 오른쪽 테이블의 데이터는 모두 가져오고, 왼쪽 테이블은 조건에 맞는 데이터만 가져와요.
  4. FULL OUTER JOIN: 양쪽 테이블의 모든 데이터를 가져오며, 조건 없는 데이터는 NULL로 표시돼요. 😊
728x90
반응형
SMALL