Computer Science/Database

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

settong 2024. 11. 22. 22:53
반응형

 

조인(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
반응형