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