[프로그래밍] DataBase

[DATABASE] ORACLE JOIN

JHVan 2024. 11. 11. 16:31

여러 테이블에서 데이터를 결합하여 하나의 결과 세트로 반환할 때 사용

예제 테이블

 

  • Patients 테이블:
    patient_id name doctor_id department
    1 John Doe 101 Cardiology
    2 Jane Smith 102 General
    3 Alice Lee 103 Orthopedics
  • Doctors 테이블:
    doctor_id doctor_name specialization
    101 Dr. Williams Cardiology
    102 Dr. Brown General
    104 Dr. Anderson Pediatrics

1. INNER JOIN : 두 테이블에서 일치하는 행을 반환

예시 코드 : 

SELECT p.patient_id, p.name, d.doctor_name, d.specialization
FROM Patients p
INNER JOIN Doctors d ON p.doctor_id = d.doctor_id;

 

 

결과: Patients 테이블의 doctor_id와 Doctors 테이블의 doctor_id가 일치하는 행만 반환

 

Patients 테이블:

patient_id name doctor_id department
1 John Doe 101 Cardiology
2 Jane Smith 102 General
3 Alice Lee 103 Orthopedics

 

Doctors 테이블:

doctor_id doctor_name specialization
101 Dr. Williams Cardiology
102 Dr. Brown General
104 Dr. Anderson Pediatrics

 

결과 :

patient_id name doctor_name specialization
1 John Doe Dr. Williams Cardiology
2 Jane Smith Dr. Brown General

 

2.LEFT OUTER JOIN : 왼쪽 테이블의 모든 행과 일치하는 오른쪽 테이블의 행 반환, 일치하지 않는 행엔 NULL 반환

예시 코드 :

SELECT p.patient_id, p.name, d.doctor_name, d.specialization
FROM Patients p
LEFT OUTER JOIN Doctors d ON p.doctor_id = d.doctor_id;

결과: Patients 테이블의 모든 행과 일치하는 Doctors 테이블의 행을 반환하며, 일치하지 않는 경우 NULL을 반환합니다.

 

Patients 테이블 :

patient_id name doctor_id department
1 John Doe 101 Cardiology
2 Jane Smith 102 General
3 Alice Lee 103 Orthopedics

 

Doctors 테이블 :

doctor_id doctor_name specialization
101 Dr. Williams Cardiology
102 Dr. Brown General
104 Dr. Anderson Pediatrics

 

결과 : 

patient_id name doctor_name specialization
1 John Doe Dr. Williams Cardiology
2 Jane Smith Dr. Brown General
3 Alice Lee NULL NULL

 

3.RIGHT OUTER JOIN : 오른쪽 테이블의 모든 행과 일치하는 왼쪽 테이블의 행을 반환하고, 일치하지 않는 행은 NULL 반환

예시 코드 : 

SELECT p.patient_id, p.name, d.doctor_name, d.specialization
FROM Patients p
RIGHT OUTER JOIN Doctors d ON p.doctor_id = d.doctor_id;

 

결과 : Doctors 테이블의 모든 행과 일치하는 Patients 테이블의 행을 반환하며, 일치하지 않는 경우 NULL을 반환

 

Patients 테이블 :

patient_id name doctor_id department
1 John Doe 101 Cardiology
2 Jane Smith 102 General
3 Alice Lee 103 Orthopedics

 

Doctors 테이블 :

doctor_id doctor_name specialization
101 Dr. Williams Cardiology
102 Dr. Brown General
104 Dr. Anderson Pediatrics

 

결과 :

patient_id name doctor_name specialization
1 John Doe Dr. Williams Cardiology
2 Jane Smith Dr. Brown General
NULL NULL Dr. Anderson Pediatrics

 

4.FULL OUTER JOIN : 두 테이블의 모든 행을 반환하고, 일치하지 않는 행은 NULL 로 표시

예시 코드 :

SELECT p.patient_id, p.name, d.doctor_name, d.specialization
FROM Patients p
FULL OUTER JOIN Doctors d ON p.doctor_id = d.doctor_id;

 

Patients 테이블 :

patient_id name doctor_id department
1 John Doe 101 Cardiology
2 Jane Smith 102 General
3 Alice Lee 103 Orthopedics

 

Doctors 테이블 :

doctor_id doctor_name specialization
101 Dr. Williams Cardiology
102 Dr. Brown General
104 Dr. Anderson Pediatrics

 

결과 : 

patient_id name doctor_name specialization
1 John Doe Dr. Williams Cardiology
2 Jane Smith Dr. Brown General
3 Alice Lee NULL NULL
NULL NULL Dr. Anderson Pediatrics

 

5.CROSS JOIN : 두 테이블의 모든 가능한 조합을 반환

예시 코드 : 

SELECT p.patient_id, p.name, d.doctor_name, d.specialization
FROM Patients p
CROSS JOIN Doctors d;

 

Patients 테이블 :

patient_id name doctor_id department
1 John Doe 101 Cardiology
2 Jane Smith 102 General

 

Doctors 테이블 :

doctor_id doctor_name specialization
101 Dr. Williams Cardiology
102 Dr. Brown General
104 Dr. Anderson Pediatrics

 

결과 : Patients와 Doctors 테이블의 각 행이 조합된 모든 경우의 수

patient_id name doctor_name specialization
1 John Doe Dr. Williams Cardiology
1 John Doe Dr. Brown General
1 John Doe Dr. Anderson Pediatrics
2 Jane Smith Dr. Williams Cardiology
2 Jane Smith Dr. Brown General
2 Jane Smith Dr. Anderson Pediatrics

 

'[프로그래밍] DataBase' 카테고리의 다른 글

[DATABASE] SQL 작성 순  (1) 2024.11.14
[DATABASE] SELF JOIN, UNION, GROUP BY  (0) 2024.11.12
[DATABASE] ORACLE 함수와 표현식  (0) 2024.11.11
[DATABASE] ORACLE 연산자  (0) 2024.11.11
[DATABASE] ORACLE SQL  (3) 2024.11.11