일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 로지텍
- 네트워크
- 클라우드
- IT자격증
- 맛집 추천
- 도커
- cloud
- 경주 여행
- 속초 여행
- 잠실 맛집
- Amazon Web Service
- docker
- 황리단길 맛집
- 리눅스
- Doker
- IT
- 경주
- 속초 맛집
- 경주 맛집
- 코딩
- SQL 기초
- 프론트엔드
- 경주 맛집 추천
- 카페 추천
- 쿠버네티스
- IT 신기술
- AWS
- 쿼리 기초
- 러닝
- kubernetes
- Today
- Total
Devops 엔지니어 솔렐레 IT
SQL 기초 - JOIN(내부/외부 조인), UNION, Sub Query(하위 쿼리) 본문
SQL 기초 - JOIN(내부/외부 조인), UNION, Sub Query(하위 쿼리)
솔렐레_ 2019. 10. 8. 09:00안녕하세요. 솔렐레입니다.
이번 포스팅에서는 두 개 이상의 테이블에서 데이터를 분석할 수 있는 JOIN, UNION에 대해서 정리하도록 하겠습니다. 관계형 데이터베이스에서는 데이터가 여러 테이블에 나뉘어 저장되어 있고 공통된 키 값을 이용하여 조인하여 원하는 데이터를 출력할 수 있습니다. 데이터는 조인을 통해 열로 합칠 수도 있고 UNION을 통해 행으로 합칠 수도 있습니다. 또한 다양한 조건이 필요한 데이터가 쉽게 처리될 수 있도록 SQL 문을 만들 수 있는 하위 쿼리에 대해서도 알아보도록 하겠습니다. 그럼 시작하겠습니다.
[SQL 기초 - JOIN: 내부 조인, 외부 조인]
1. 내부 조인
-- FROM/WHERE 사용
SELECT 테이블명1.열이름1, 테이블명2, 열이름2
FROM 테이블명1, 테이블명2
WHERE 테이블명1.KEY = 테이블명2.KEY;
-- INNER JOIN 사용
SELECT 테이블명1.열이름1, 테이블명2, 열이름2
FROM 테이블명1 INNER JOIN 테이블명2
ON 테이블명1.KEY = 테이블명2.KEY;
내부 조인은 교집합으로 두 키 값이 매칭 될 경우 선택된 모든 열을 출력하는 방법입니다. 두 테이블에 공통으로 존재하는 키 값이 되는 모든 행을 나타냅니다. FROM/WHERE문을 사용하여 나타낼 수도 있고 INNER JOIN을 사용하여 SQL문을 작성할 수도 있습니다. INNER JOIN을 사용할 경우 ON 뒤에 두 테이블의 키 값을 적어야 합니다. 조인을 사용할 경우 AS 키워드를 사용하여 별칭을 준다면 더 파악하기 쉽게 쿼리문을 정리할 수 있습니다. 예를 들어 테이블명 1을 별칭으로 '회원' 그리고 테이블명 2를 '주문'으로 지정한다면 조건절에 WHERE 회원.KEY = 주문.KEY 로 정의하여 한눈에 보기 쉽도록 정의할 수 있습니다. 또한 타이핑으로 오류가 날 가능성도 줄여 오류도 줄일 수 있어 유용하게 사용이 가능합니다. 조인을 사용할 때 조건을 지정하지 않는다면 곱집합의 형태가 되어 모든 행과 데이터가 출력되어 나타나게 됩니다.
2. 외부 조인
-- LEFT OUTER JOIN
SELECT 테이블명1.열이름1, 테이블명2, 열이름2
FROM 테이블명1 LEFT (OUTER) JOIN 테이블명2
WHERE 테이블명1.KEY = 테이블명2.KEY;
--RIGHT OUTER JOIN
SELECT 테이블명1.열이름1, 테이블명2, 열이름2
FROM 테이블명1 RIGHT (OUTER) JOIN 테이블명2
WHERE 테이블명1.KEY = 테이블명2.KEY;
-- FULL OUTER JOIN
SELECT 테이블명1.열이름1, 테이블명2, 열이름2
FROM 테이블명1 FULL (OUTER) JOIN 테이블명2
WHERE 테이블명1.KEY = 테이블명2.KEY;
외부 조인은 크게 LEFT, RIGHT, FULL 이렇게 세 가지를 가지고 있습니다. LEFT OUTER JOIN은 왼쪽 테이블의 데이터를 기준으로 키 값에 맞는 오른쪽 테이블에 있는 데이터를 붙여 데이터를 출력합니다. 한 개의 키값에 두 개 이상의 값을 가지고 있으면 모든 값이 붙습니다. 예를 들어 WHERE절의 오른쪽 테이블 키 값이 2개가 존재한다면 왼쪽 테이블 데이터는 두 번 출력되게 됩니다. 왼쪽 테이블 데이터 기준으로 오른쪽 테이블의 키 값이 존재하지 않는다면 NULL 값으로 처리됩니다. LEFT JOIN은 *= 연산자로 나타낼 수 있습니다. 이와 반대로 RIGHT OUTER JOIN은 오른쪽 테이블을 기준으로 왼쪽 테이블의 데이터가 붙도록 출력됩니다. 또한 RIGHT조인은 =* 연산자로 나타낼 수 있습니다. FULL OUTER JOIN은 두 테이블의 합집합과 같으며 왼쪽 테이블과 오른쪽 테이블의 모든 열들을 나열하여 나타냅니다. 테이블을 통합할 때 기준이 되는 테이블을 가장 먼저 나타내면 데이터 분석에 용이하게 사용할 수 있습니다. 단 MySQL 같은 몇몇 DBMS에서는 FULL OUTER JOIN이 지원되지 않으므로 사용에 참고해주시면 될 것 같습니다. 외부 조인을 사용할 때도 별칭을 사용하여 쿼리를 작성한다면 더 가독성 좋은 쿼리문이 만들어질 것입니다.
[SQL 기초 - UNION, UNION ALL]
-- 행 합치기 (중복 없음)
SELECT 열이름1, 열이름2 FROM 테이블명1 WHERE 조건절
UNION
SELECT 열이름1, 열이름2 FROM 테이블명2 WHERE 조건절
ORDER BY 1;
-- -- 행 합치기 (중복 포함)
SELECT 열이름1, 열이름2 FROM 테이블명1 WHERE 조건절
UNION ALL
SELECT 열이름1, 열이름2 FROM 테이블명2 WHERE 조건절
ORDER BY 1;
UNION은 두 개 이상의 테이블 행을 합칠 때 사용하는 연산자입니다. 이는 두 개 이상의 SELECT문의 결과 값을 합치는 것을 의미합니다. 테이블 1과 테이블 2의 데이터를 모두 합칠 수도 있고 조건절에 따라 일부만 합칠 수도 있습니다. UNION 연산자를 사용할 때는 합쳐지는 SELECT 문의 열 숫자가 동일해야 하며 각 데이터 타입이 일치해야 합니다. 데이터가 합쳐지면서 중복되는 값은 사라지며 중복된 값을 보여주고 싶다면 UNION ALL을 사용합니다. 합친 열을 정렬하기 위해서는 ORDER BY 절과 같이 사용한다면 필요한 데이터를 합쳐서 정렬할 수 있습니다.
[SQL 기초 - 하위 쿼리(Sub Query)]
-- 조건에 맞는 대상자 선정 후 요약
SELECT 열이름1, 열이름2
FROM(
SELECT * FROM 테이블명
WHERE 조건절
) (AS) 별칭
WHERE 조건절;
-- 테이블 조인
SELECT 열이름1, 열이름2
FROM 테이블명1 (AS) 별칭1 LEFT OUTER JOIN
(
SELECT * FROM 테이블명
WHERE 조건절
) (AS) 별칭2
ON 별칭1.KEY = 별칭2.KEY;
-- IN절 사용 하위 쿼리
SELECT 열이름1, 열이름2
FROM 테이블명1
WHERE 열이름 IN(SELECT 열이름 FROM 테이블명2 WHERE 조건절);
하위 쿼리(Sub Query)란 SQL 문장 속에 또 다른 SQL 문이 속하여 두 번 이상의 질의를 통해 결과를 한 번에 얻어낼 수 있는 것을 의미합니다. 하위 쿼리를 사용하게 되면 복잡한 SQL문도 간단히 만들 수 있도 DBMS의 데이터 처리 속도도 향상할 수 있습니다.
FROM 절에서 하위 쿼리를 사용할 경우는 (1) 조건에 맞는 대상자를 선정 후, 요약할 경우 (2) 테이블을 조인할 때 용도로 사용합니다. 하위 쿼리를 사용할 때는 테이블 별칭을 꼭 주어야 합니다. WHERE 조건절에서 하위 쿼리를 사용할 경우엔 IN절과 함께 사용합니다. 전체 모집단에서 특정 세그먼트만 추출할 때 유용하게 사용할 수 있는 방법입니다.
이것으로 JOIN, UNION, 하위 쿼리에 대한 포스팅을 마치겠습니다. 실무에서 데이터를 사용하다 보면 여러 테이블을 사용하여 쿼리를 작성하게 됩니다. 필요한 데이터를 가공하고 원하는 데이터를 한 눈에 확인하기 위해서는 해당 구문에 대한 사용은 필수라고 생각합니다. SQL을 이제 시작하신 분들이라면 사용이 조금 어색하실 수 있지만 몇 번 사용하다보면 금세 익숙해지니 쿼리를 자주 작성하시면서 익히시는 게 중요할 것 같습니다. 감사합니다. :)
'Devops 엔지니어가 알려주는 IT 기본 지식 > 데이터베이스 (Database)' 카테고리의 다른 글
SQL 기초 - GROUP BY(그룹핑), INSERT/DELETE/UPDATE(데이터 조작), CREATE/ALTER/RENAME/DROP(테이블 조작) (0) | 2019.10.04 |
---|---|
SQL 기초 - SELECT(조회), ORDER BY(정렬), WHERE(조건) (0) | 2019.09.22 |