ㅇ 테이블 결합
테이블 결합은 왜 필요할까? 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 |