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

2024. 11. 22. 22:53·Computer Science/Database
반응형

 

조인(JOIN)이란?

 

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

 

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

 

students 테이블

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

 

courses 테이블

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

 

 

내부 조인 (Inner Join)

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

-- 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을 반환

-- 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을 반환

-- 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을 반환

-- 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)

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

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

 

 

 

자기 조인 (Self Join)

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

-- 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)

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

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

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

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

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

 

728x90
반응형

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

SQL과 NoSQL  (2) 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
'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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바