MySQL에서 여러 테이블을 한 번에 다루는 방법에 대해서 정리하고자 합니다. 다이어그램으로 표현하면 합집합, 교집합, 차집합으로 표현할 수 있습니다. 사용되는 키워드는 UNION, UNION ALL, INNER JOIN, LEFT JOIN입니다.
데이터에 데이터 더하기 (UNION, UNION ALL)
UNION, UNION ALL 특징
- [쿼리 A] UNION [쿼리 B] 또는 [쿼리 A] UNION ALL [쿼리 B] 형식으로 사용합니다.
- [쿼리 A]와 [쿼리 B]의 결과 값을 합쳐서 보여줍니다.
- UNION은 동일한 값은 제외하고 보여주며, UNION ALL은 동일한 값도 포함하여 보여줍니다.
- [쿼리 A]와 [쿼리 B]의 결과 값의 개수가 같아야 합니다. 만약 다를 경우 에러가 발생합니다.
- ORDER BY는 쿼리 가장 마지막에 작성 가능하고, [쿼리 A]에서 가져온 컬럼으로만 가능합니다.
UNION, UNION ALL 쿼리 문법
쿼리 문법은 아래와 같습니다.
# UNION 쿼리 문법
SELECT [컬럼 이름]
FROM [테이블 A 이름]
UNION
SELECT [컬럼 이름]
FROM [테이블 B 이름];
# UNION ALL 쿼리 문법
SELECT [컬럼 이름]
FROM [테이블 A 이름]
UNION
SELECT [컬럼 이름]
FROM [테이블 B 이름];
예제 코드
mypokemon과 friendpokemon 테이블에서 number, name, attack 열을 가져오고 number 오름 차순으로 정렬하는 예제 코드입니다. ORDER BY는 쿼리 가장 마지막에 작성 가능하고, [쿼리 A]에서 가져온 컬럼으로 작성된 것을 확인할 수 있습니다.
SELECT number, name, attack
FROM mypokemon
UNION
SELECT number, name, attack
FROM friendpokemon
ORDER BY number;
데이터에서 데이터 빼기 (INTERSECT, MINUS -> JOIN 사용해 표현)
다른 SQL에서 교집합은 INTERSECT, 차집합은 MINUS라는 키워드를 사용하여 구현합니다. 하지만 MySQL에서는 해당 키워드가 존재하지 않아 JOIN을 사용해서 표현해야 합니다.
교집합, 차집합 쿼리 문법
교집합 쿼리 문법은 아래와 같습니다. 단순 INNER JOIN과의 차이점은 교집합을 확인하고 싶은 컬럼은 모두 다 기준으로 두고 합쳐 줘야 한다는 부분입니다.
# 교집합
SELECT [컬럼 이름]
FROM [테이블 A 이름] AS A
INNER JOIN [테이블 B 이름] AS B
ON A.[컬럼1 이름] = B.[컬럼1 이름] AND ... AND A.[컬럼n 이름] = B.[컬럼n 이름];
차집합은 LEFT JOIN 후에 B테이블의 값이 NULL인 것만 가져오도록 처리한다고 이해하시면 됩니다. 차집합을 확인 하고 싶은 컬럼은 모두 다 기준으로 두고 합쳐 줘야 합니다.
# 차집합
SELECT [컬럼 이름]
FROM [테이블 A 이름] AS A
LEFT JOIN [테이블 B 이름] AS B
ON A.[컬럼1 이름] = B.[컬럼1 이름] AND ... AND A.[컬럼n 이름] = B.[컬럼n 이름]
WHERE B.[컬럼 이름] IS NULL;
교집합, 차집합 예제 코드
교집합 예제 코드입니다. SELECT절에 A.name으로 작성한 부분을 유의해야 합니다. 같은 이름을 가지는 컬럼이 있다면 SELECT 해 올 때, 어떤 테이블에서 컬럼을 가져올 것인지 명시해 줘야 합니다.
# 교집합 예제 코드
SELECT A.name
FROM mypokemon AS A
INNER JOIN friendpokemon AS B
ON A.name = B.name
차집합 예제 코드입니다.
# 차집합 예제 코드
SELECT A.name
FROM mypokemon AS A
LEFT JOIN friendpokemon AS B
ON A.name = B.name
WHERE B.name IS NULL;
'데이터 분석 및 업무 자동화' 카테고리의 다른 글
Power BI DAX Patterns 동적 제목 설정하는 방법 (CONCATENATEX) (0) | 2022.04.14 |
---|---|
MySQL 조건에 조건을 더하는 서브 쿼리 알아보기 (0) | 2022.04.13 |
Power BI DAX patterns - YoY, QoQ, MoM 구하기 (0) | 2022.04.08 |
Power BI EARLIER 함수 사용하여 그룹별 순위 구하기 (0) | 2022.04.06 |
Power BI DAX RANKX 그룹별 순위 구하기 (feat. 아파트 평단가 시도별 시군구별 순위) (0) | 2022.04.05 |
댓글