DAY 10. 테이블 합치기
- 하나의 테이블에서 원하는 데이터를 모두 검색할 수 없는 경우가 많다. 이러한 경우 두개 이상의 테이블을 논리적으로 결합해서 데이터를 필터링하고 원하는 결과값을 출력할 수 있다
- 관계형 데이터베이스하에서는 데이터가 여러 테이블에 나뉘어 저장되어 있고, 공통된 열이름 (KEY)로 서로 조인할 수 있다
💡 01. 열(Column)합치기 _내부 조인(INNER JOIN)
- 내부조인은 교집합이라고 생각하면 된다. 두 테이블에 공통으로 존재하는 키값이 되는 모든 행을 나타낸다
- FROM/WHERE를 사용
- 내부 조인은 두 테이블의 키 값이 매칭될 경우 선택된 모든 열을 나타낸다
SELECT 테이블명1.열이름1, 테이블명2.열이름2 FROM 테이블명1, 테이블명2 WHERE 테이블명1.KEY = 테이블명2.KEY;
- FROM/WHERE와 별칭 사용
- 위와 동일하지만, 테이블 이름에 새롭게 별칭을 주었다는 점이 다르다
- 오라클을 포함한 몇몇 DBMS는 테이블 명 별칭을 줄 때 AS 키워드가 지원되지 않으므로 AS를 빼고 테이블 별칭을 설정해야한다
SELECT 별칭1.열이름1, 별칭2.열이름2 FROM 테이블명1 (AS) 별칭1 , 테이블명2 (AS) 별칭2 WHERE 별칭1.KEY = 별칭2.KEY;
- INNER JOIN을사용
- INNER JOIN을 사용하여 두 테이블을 합칠 수 있다, ON 뒤에 두 테이블의 연결고리가 되는 키 값을 적으면 된다
SELECT 테이블명1.열이름1, 테이블명2.열이름2 FROM 테이블명1 INNER JOIN 테이블명2 ON 테이블명1.KEY = 테이블명2.KEY;
- INNER JOIN과 별칭을 사용
- 위와 동일하지만, 테이블 이름에 새롭게 별칭을 주었다는 점이 다르다
- 오라클을 포함한 몇몇 DBMS는 테이블 명 별칭을 줄 때 AS 키워드가 지원되지 않으므로 AS를 빼고 테이블 별칭을 설정해야한다
SELECT 별칭1.열이름1, 별칭2.열이름2 FROM 테이블명1 (AS) 별칭1 INNER JOIN 테이블명2 (AS) 별칭2 ON 별칭1.KEY = 별칭2.KEY;
💡 01. 열(Column) 합치기 _외부 조인(OUTHER JOIN)
- LEFT OUTHER JOIN
- 왼쪽 테이블을 기준으로 오른쪽 테이블을 붙이는 것을 의미
- OUTHER을 생략해도 무방하고, 만약 왼쪽 테이블에는 존재하지만 오른쪽 테이블에는 존재하지 않는 키값이 있다면 NULL값으로 값이 반환된다
※ ORACLE에서는 LEFT OUTHER JOIN을 나타내는 (+)= 연산자를 지원한다. 즉 ORACLE사용자는 다음과 같이 LEFT OUTHER JOIN 키워드를 표현할 수 있다SELECT 별칭1.열이름1, 별칭2.열이름2 FROM 테이블명1 (AS) 별칭1 LEFT (OUTHER) JOIN 테이블명2 (AS) 별칭2 ON 별칭1.KEY = 별칭2.KEY;
- SELECT 별칭1.열이름1, 별칭2.열이름2 FROM 테이블명1 별칭1, 테이블명2 별칭2 WHERE 별칭1.KEY (+)= 별칭2.KEY;
- RIGHT OUTHER JOIN
- 오른쪽 테이블을 기준으로 왼쪽 테이블을 붙이는 것을 의미
- OUTHER을 생략해도 무방하고, 만약 오른쪽 테이블에는 존재하지만 왼쪽 테이블에는 존재하지 않는 키값이 있다면 NULL값으로 값이 반환된다
SELECT 별칭1.열이름1, 별칭2.열이름2 FROM 테이블명1 (AS) 별칭1 RIGHT (OUTHER) JOIN 테이블명2 (AS) 별칭2 ON 별칭1.KEY = 별칭2.KEY;
- FULL OUTHER JOIN
- 왼쪽과 오른쪽 테이블의 모든 행이 반환된다. LEFT JOIN과 RIGHT JOIN을 합쳐놓은 형태라고 할 수 있다
※ ACCESS, MY SQL 등 몇몇 DBMS에서는 FULL OUTHER JOIN 키워드가 지원되지 않는다SELECT 별칭1.열이름1, 별칭2.열이름2 FROM 테이블명1 (AS) 별칭1 RIGHT (OUTHER) JOIN 테이블명2 (AS) 별칭2 ON 별칭1.KEY = 별칭2.KEY;
※ 테이블을 통합할 때 기준이 되는 테이블을 가장 먼저 나타내면 데이터 분석이 용이하다. 예제에서 TMP1이라고 별칭을 준 부분의 공통점은 기준이 되는 테이블이라는 것이다. TMP1이라고 별칭을 준 테이블을 기준으로 데이터를 조인하면 통합 테이블을 쉽게 만들 수 있을 뿐 아니라 데이터 분석 작업도 용이하다는 장점이 있다
※ 테이블 별칭은 TMP1, TMP2, TMP3 등과 같이 순서 있게 사용하는 것이 좋다. 조인하는 테이블이 많을 수록 복잡해지고 SQL 문장을 수정하기가 쉽지 않지만 순서가 잇는 문자 (A,B,C 혹은 T1,T2,T3 등)로 테이블 별칭을 준다면 SQL문장이 복잡해지더라도 쉽게 수정할 수 있고 오류도 쉽게 해결할 수 있다
※ SELECT문에 출력할 열 이름을 적을 때 어느 테이블에서 참조되는 열 이름인지 나타내는 것이 좋다. SQL 문장이 길어질수록 오류를 해결하기 수월해지고 참조해야 하는 테이블이 꼭 필요한 테이블인지 확인할 수도 있기 때문이다
💡 02. 행(ROW) 합치기
- UNION연산자
- UNION은 두개 이상의 테이블의 행을 합칠 때 사용한다. 즉, UNION은 두개 이상의 SELECT문의 결과값을 합치는 역할을 한다
SELECT 열이름1, 열이름2 FROM 테이블명1 WHERE 조건절 UNION SELECT 열이름1, 열이름2 FROM 테이블명2 WHERE 조건절 ORDER BY 1;
- A와 B라는 테이블에서 일부의 데이터를 합칠 수 있고, A라는 테이블을 WHERE조건절을 사용하여 나눈 후 일부만 합칠 수도 있다. 동일한 테이블에서 두개 이상의 SELECT문으로 UNION을 사용하는 경우는 WHERE조건절과 크게 다르지 않다
- UNION 연산자 사용시 주의할 점을 명심해야한다
- UNION 연산자로 합쳐지는 SELECT문의 열의 숫자는 반드시 동일해야한다
- SELECT문의 각 데이터 타입은 일치해야한다
SELECT 별칭1.열이름1, 별칭2.열이름2 FROM 테이블명1 별칭1, 테이블명2 별칭2 WHERE 별칭1.KEY (+)= 별칭2.KEY;
- ※ ORDER BY절을 사용하여 데이터를 정렬하고 싶다면 문장의 마지막에 적으면 된다. ORDER BY절은 데이터가 합쳐진 후 전체에 적용된다.
- UNION ALL연산자
- 두개 이상의 SELECT문의 행을 합치는 역할로, UNION ALL은 중복을 포함한 모든 값을 나타낸다
※ UNION 연산자로 두개의 SELECT문을 합칠 경우 WHERE 조건절을 사용하는 것과 동일한 효과를 나타낼 수 있는데 UNION ALL은 WHERE조건절로 나타낼 수 없는 결과 값을 보여준다SELECT 열이름1, 열이름2 FROM 테이블명1 WHERE 조건절 UNION ALL SELECT 열이름1, 열이름2 FROM 테이블명2 WHERE 조건절 ORDER BY 1;
'💻 SQL > 🔎기초 SQL' 카테고리의 다른 글
[칼퇴족 김대리는 알고 나만 모르는 SQL 기초편] DAY 12. 데이터 및 테이블 조작 (0) | 2022.02.03 |
---|---|
[칼퇴족 김대리는 알고 나만 모르는 SQL 기초편] DAY 11. 하위 쿼리 (0) | 2022.02.03 |
[칼퇴족 김대리는 알고 나만 모르는 SQL 기초편] DAY 9. 데이터의 그룹화, 필터링 (0) | 2022.01.31 |
[칼퇴족 김대리는 알고 나만 모르는 SQL 기초편] DAY 8. 함수 활용하기 (0) | 2022.01.31 |
[칼퇴족 김대리는 알고 나만 모르는 SQL 기초편] DAY 7. 기본 함수 배우기 (0) | 2022.01.30 |