반응형
조인(JOIN)이란?
- 데이터베이스 조인(Join)은 두 개 이상의 테이블에서 관련된 데이터를 결합하여 하나의 결과 집합으로 만드는 작업이다.
- 조인은 관계형 데이터베이스에서 매우 중요한 기능으로, 데이터 간의 관계를 기반으로 유용한 정보를 추출하는 데 사용된다.
아래의 테이블을 예시로 쿼리와 함께 주요 조인 유형을 설명하겠다.
students 테이블
courses 테이블
내부 조인 (Inner Join)
내부 조인은 두 테이블에서 일치하는 데이터만 반환
-- ANSI SQL, MySQL, Oracle
SELECT students.name, courses.course_name
FROM students
INNER JOIN courses ON students.student_id = courses.student_id;
왼쪽 외부 조인 (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;
오른쪽 외부 조인 (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;
전체 외부 조인 (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;
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 |