본문 바로가기
CS공부/SQL

테이블 결합, JOIN, UNION

by 티코딩 2024. 1. 23.

ㅇ 테이블 결합

테이블 결합은 왜 필요할까? SQL은 데이터를 효율적으로 관리해야하므로 테이블단위로 분리해노는데, 원하는 결과값을 얻기위해 테이블결합이 부득이하게 발생한다. 이런 테이블 결합에서 등장하는게 RDB 와 ERD이다.

 

ㅁ RDB
Relational DataBase로 관계형 데이터베이스라는 의미. 테이블간의 관계가 있어 언제든 결합할 수 있는 의미.

MySQL, MsSQL 등이 RDB의 종류다.

 

ㅁ ERD

Entity-Relationship-Diagram 으로 개체-관계 모델이다. 테이블간의 관계를 설명해주는 모델로, 나는 프로젝트를 시작할때 미리 만들고 거기에 맞춰서 엔티티를 만들고 했다.

 

ㅇ JOIN

다른 테이블을 결합하기 위해 작성한다. JOIN은 테이블 전체가 와서 결합하고 한쪽을 기준으로 할수도있고, 양쪽을 기준으로 결합가능하다.

SELECT * FROM A AS a JOIN B AS b ON a.칼럼 = b.칼럼

이렇게 FROM절에 연결하고 ON절에 조건을 작성해 사용한다.

 

테이블 A

ID 성별
1 F
2 F
3 M

 

테이블 B

ID 학급 성적
2 3-1 A+
3 3-4 B
4 3-5 A

 

ㅁ LEFT JOIN

왼쪽을 기준으로 테이블 결합

SELECT * FROM A LEFT JOIN B ON A.ID = B.ID

ID 성별 ID 학급 성적
1 F NULL NULL NULL
2 F 2 3-1 A+
3 M 3 3-4 B

 

왼쪽의 테이블은 그대로 두고 오른쪽에 B를 붙히는데 기준은 A의 ID칼럼과 B의 ID칼럼이 동일할때! 결합한다.

 

ㅁ RIGHT JOIN

오른쪽을 기준으로 테이블 결합

위의 테이블 A와 B는 그대로 가져간다.

SELECT * FROM A RIGHT JOIN B ON A.ID = B.ID

ID 성별 ID 학급 성적
2 F 2 3-1 A+
3 M 3 3-4 B
NULL NULL 4 3-5 A

 

테이블 B는 그대로인채 A의 ID와 B의 ID가 같은경우의 A를 붙힌다.

 

ㅁ OUTER JOIN

양쪽을 기준으로 테이블 결합(합집합)

SELECT * FROM A OUTER JOIN B ON A.ID = B.ID

ID 성별 ID 학급 성적
1 F NULL NULL NULL
2 F 2 3-1 A+
3 M 3 3-4 B
NULL NULL 4 3-5 A

양쪽테이블 모두가 결합된다.

 

ㅁ INNER JOIN

양쪽 공통을 기준으로 테이블 결합(교집합)

SELECT * FROM A INNER JOIN B ON A.ID = B.ID

ID 성별 ID 학급 성적
2 F 2 3-1 A+
3 M 3 3-4 B

 

두테이블의 겹치는부분만 뽑아 출력한다.

 

 

ㅇ UNION

UNION 연산자는 두개 이상의 테이블을 단일 테이블로 통합하는 연산자. JOIN 연산자는 테이블을 옆으로 붙혔지만 UNION 연산자는 테이블을 아래로 붙힌다는 차이가 있다.

SELECT FORM A UNION SELECT FROM B

주의할점은 다른 SELECT문이여도 테이블의 최종 칼럼의 수와 데이터 타입은 일치해야함.

예시를 보자.

 

employees_A

employee_id employee_name
a_001 김태형
a_002 김태순
a_003 강태횽

 

employees_B

employee_id employee_name
a_001 김태형
a_004 박태순

 

ㅁ UNION ALL (중복포함)

SELECT employee_id, employee_name FROM employees_A

UNION ALL

SELECT employee_id, employee_name FROM employees_B;

employee_id employee_name
a_001 김태형
a_002 김태순
a_003 강태횽
a_001 김태형
a_004 박태순

 

ㅁ UNION (중복제거)

SELECT employee_id, employee_name FROM employees_A

UNION

SELECT employee_id, employee_name FROM employees_B;

employee_id employee_name
a_001 김태형
a_002 김태순
a_003 강태횽
a_004 박태순

 

'CS공부 > SQL' 카테고리의 다른 글

DB - key, 관계매핑, fetch  (0) 2024.01.30
ORDER BY절, 서브쿼리  (1) 2024.01.22
GROUP BY절, HAVING절  (0) 2024.01.19
CASE문, WHERE절  (0) 2024.01.16
SELECT절-숫자함수, 날짜함수, 순위함수  (0) 2024.01.12