조인(JOIN) - ANSI SQL, MySQL, Oracle 예

2024. 11. 22. 22:53·Computer Science/Database
목차
  1. 조인(JOIN)이란?
  2. 내부 조인 (Inner Join)
  3. 왼쪽 외부 조인 (Left Outer Join)
  4. 오른쪽 외부 조인 (Right Outer Join)
  5. 전체 외부 조인 (Full Outer Join)
  6. 교차 조인 (Cross Join)
  7. 자기 조인 (Self Join)
  8. 자연 조인(Natural Join)
반응형

 

조인(JOIN)이란?

 

  • 데이터베이스 조인(Join)은 두 개 이상의 테이블에서 관련된 데이터를 결합하여 하나의 결과 집합으로 만드는 작업이다.
  • 조인은 관계형 데이터베이스에서 매우 중요한 기능으로, 데이터 간의 관계를 기반으로 유용한 정보를 추출하는 데 사용된다.

 

아래의 테이블을 예시로 쿼리와 함께 주요 조인 유형을 설명하겠다.

 

students 테이블

학생ID와 이름을 담고있는 테이블

 

courses 테이블

과목ID와 과목이름, 수강하는 학생ID를 담고있는 테이블

 

 

내부 조인 (Inner Join)

내부 조인은 두 테이블에서 일치하는 데이터만 반환

sql
닫기
-- ANSI SQL, MySQL, Oracle
SELECT students.name, courses.course_name
FROM students
INNER JOIN courses ON students.student_id = courses.student_id;

학생ID(student_id)가 4인 것은 courses 테이블에 없기 때문에 반환되지 않음을 확인할 수 있다.

 

 

 

왼쪽 외부 조인 (Left Outer Join)

왼쪽 외부 조인은 왼쪽 테이블의 모든 데이터를 반환하고, 오른쪽 테이블에서 일치하는 데이터가 없는 경우 NULL을 반환

sql
닫기
-- ANSI SQL, MySQL, Oracle
SELECT students.name, courses.course_name
FROM students
LEFT JOIN courses ON students.student_id = courses.student_id;

왼쪽 테이블(student)에 student_id가 4인 데이터가 오른쪽 테이블(course)에는 없기 때문에 NULL을 반환함을 알 수 있다.

 

 

 

오른쪽 외부 조인 (Right Outer Join)

오른쪽 외부 조인은 오른쪽 테이블의 모든 데이터를 반환하고, 왼쪽 테이블에서 일치하는 데이터가 없는 경우 NULL을 반환

sql
닫기
-- ANSI SQL, MySQL, Oracle
SELECT students.name, courses.course_name
FROM students
RIGHT JOIN courses ON students.student_id = courses.student_id;

오른쪽 테이블(course)에 student_id가 null인 값은 왼쪽 테이블(students)에 존재하지 않기 때문에 NULL을 반환함을 알 수 있다.

 

 

 

전체 외부 조인 (Full Outer Join)

전체 외부 조인은 두 테이블의 모든 데이터를 반환하며, 일치하지 않는 데이터는 NULL을 반환

sql
닫기
-- ANSI SQL, Oracle
SELECT students.name, courses.course_name
FROM students
FULL OUTER JOIN courses ON students.student_id = courses.student_id;
-- MySQL
SELECT students.name, courses.course_name
FROM students
LEFT JOIN courses ON students.student_id = courses.student_id
UNION
SELECT students.name, courses.course_name
FROM students
RIGHT JOIN courses ON students.student_id = courses.student_id;

❗️MySQL에서는 Full Outer Join을 지원하지 않음. Left Join과 Right Join을 결합(UNION)하여 사용

 

 

 

교차 조인 (Cross Join)

교차 조인은 두 테이블의 모든 조합을 반환

sql
닫기
-- ANSI SQL, MySQL, Oracle
SELECT students.name, courses.course_name
FROM students
CROSS JOIN courses;

 

 

 

자기 조인 (Self Join)

자기 조인은 동일한 테이블을 두 번 사용하여 조인한 것.

sql
닫기
-- ANSI SQL, MySQL, Oracle
SELECT a.name AS student_name, b.name AS classmate_name
FROM students a
JOIN students b ON a.student_id <> b.student_id;

 

 

 

자연 조인(Natural Join)

두 테이블에서 동일한 이름을 가진 열을 자동으로 사용하여 조인

조인 조건을 명시적으로 지정할 필요가 없으므로, 동일한 이름의 열이 있는 경우 간편하게 사용할 수 있음

→ 명시하지 않아 사용 시 실수할 수도 있으니 테이블에 열 이름을 꼼꼼히 확인하자!

sql
닫기
-- ANSI SQL, MySQL, Oracle
SELECT name, course_name
FROM students
NATURAL JOIN courses;

두 테이블의 공통컬럼인 student_id를 기반으로 조인됨을 확인할 수 있다.

 

728x90
반응형

'Computer Science > Database' 카테고리의 다른 글

SQL과 NoSQL  (3) 2024.11.24
SQL injection 종류와 방지  (0) 2024.11.23
트랜잭션(Transaction) & 트랜잭션 격리성  (0) 2024.11.18
키(Key)  (0) 2024.11.11
Database와 DBMS  (0) 2024.11.11
  1. 조인(JOIN)이란?
  2. 내부 조인 (Inner Join)
  3. 왼쪽 외부 조인 (Left Outer Join)
  4. 오른쪽 외부 조인 (Right Outer Join)
  5. 전체 외부 조인 (Full Outer Join)
  6. 교차 조인 (Cross Join)
  7. 자기 조인 (Self Join)
  8. 자연 조인(Natural Join)
'Computer Science/Database' 카테고리의 다른 글
  • SQL과 NoSQL
  • SQL injection 종류와 방지
  • 트랜잭션(Transaction) & 트랜잭션 격리성
  • 키(Key)
settong
settong
    250x250
  • settong
    개 발 자 국
    settong
  • 전체
    오늘
    어제
    • 전체보기 (202)
      • Computer Science (50)
        • Network (7)
        • Operating System (18)
        • Data Structure (9)
        • Database (11)
        • Algorithm (5)
      • Language (17)
        • Java (17)
        • Javascript (0)
        • Python (0)
      • Devops (20)
        • AWS (0)
        • Naver Cloud (16)
        • CICD (3)
        • 웹 서버 관리 (1)
      • Front (0)
        • React (0)
      • Backend (5)
        • Spring (5)
      • 코딩 테스트 정복기 (110)
        • 백준 (51)
        • 프로그래머스 (53)
        • 기타 (6)
      • etc (0)
      • 경제 상식 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    BFS
    해시
    다이나믹프로그래밍
    ncp202
    Network
    Spring Boot
    백준
    집합
    벨만포드
    백트래킹
    ncp200
    분할정복
    프로그래머스
    DFS
    github actions
    다익스트라
    ncp
    lcs
    완전탐색
    CI/CD
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
settong
조인(JOIN) - ANSI SQL, MySQL, Oracle 예

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.