기본 콘텐츠로 건너뛰기

SQL UNION, UNION ALL - 행 결합

1. 다른 테이블을 결합해야 할 때가 있다. 특정 조건을 기준으로 column(열)을 결합시킬 때는 JOIN을 사용한다. 하지만 row(행)을 결합시킬 때는 UNION 또는 UNION ALL을 사용하면 된다. 두 개의 SELECT문을 합치는 것이라 생각하면 된다.

2. UNION과 UNION ALL은 차이가 있다.
UNION은 중복되는 row를 제거하고 결합 시키지만, UNION ALL은 중복도 포함하여 결합시킨다.

3. UNION과 UNION ALL을 사용할 때의 주의점은 아래와 같다.
- SELECT문의 column 수가 같아야 한다.
- column의 자료형이 같거나 호환되어야 한다.
- column 이름은 최상위 SQL문의 이름을 따른다.
- column 이름이 아니라 column 순서를 기준으로 결합된다. 이름이 같아도 순서가 다르면 다른 순서대로 결합된다.

4. 예제를 통해 살펴보자
아래와 같이 온라인, 오프라인 세일즈를 기록하는 테이블이 각각 있다고 하자.

1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
CREATE TABLE sales_online(id integer, sales integer);

INSERT INTO sales_online VALUES(1, 100);
INSERT INTO sales_online VALUES(2, 170);
INSERT INTO sales_online VALUES(3, 250);
INSERT INTO sales_online VALUES(4, 300);
INSERT INTO sales_online VALUES(5, 120);

CREATE TABLE sales_offline(id integer, sales integer);

INSERT INTO sales_offline VALUES(1, 185);
INSERT INTO sales_offline VALUES(2, 170);
INSERT INTO sales_offline VALUES(3, 160);
INSERT INTO sales_offline VALUES(2, 170);
INSERT INTO sales_offline VALUES(3, 160);

4. UNION을 사용해보자

1
2
3
4
5
6
select *
from sales_online
union
select *
from sales_offline
;

아래와 같이 결과를 확인할 수 있다.
- sales_onlin 테이블의 (2, 170)과 sales_offline 테이블의 (2, 170)의 중복이 삭제되어 (2, 170)은 1개만 결합되었다. sales_offline 테이블 (3, 160)의 값도 2개가 있는데 중복이 삭제되어 1개만 최종적으로 결합되었다.
- 중복을 제거하기 위해 자동으로 오름차순으로 정렬(ORDER BY)되어 있다. 그래서 UNION ALL 보다 연산이 느리다.

5. UNION ALL을 사용해보자

1
2
3
4
5
6
select *
from sales_online
union all
select *
from sales_offline
;

아래와 같이 결과를 확인할 수 있다.

- 중복여부와 순서는 무시하고 기계적으로 붙여놓았다.

6. SQL 구문의 칼럼 순서를 바꿔보자

1
2
3
4
5
6
select id, sales
from sales_online
union all
select sales, id
from sales_offline
;

아래와 같이 결과를 확인할 수 있다.

- 칼럼 이름의 일치 여부가 아닌 칼럼의 순서대로 결합됨을 확인할 수 있다.
- 샘플 DB의 column인 id와 sales가 모두 integer로 일치하기 때문에 UNION이 실행되었다. 만약 TEXT와 INTEGER을 가지는 칼럼을 UNION을 하면 오류가 발생한다.

7. UNION을 써야된다는 말은 통합되어야 할 테이블이 분리되어 있다는 뜻이다. UNION을 되도록 사용하지 않도록 미리 잘 모델링하는 게 좋다.

끝.

댓글

이 블로그의 인기 게시물

웨딩 드레스 스케치 도안

웨딩 드레스샵 투어를 다니면서 샘플로 드레스를 입는 경우에는 드레스 사진을 찍지 못하게 하는 샵이 많다. ​ 그래서 투어를 돌고 나면 어떤 샵의 어떤 스타일이 신부에게 잘 어울렸는지 헷갈릴 수가 있다. ​ 하지만 투어를 다닐 때 드레스샵에서 입은 드레스의 특징과 느낌을 잘 기록하면 샵을 선택하는 데 도움이 될 수 있다. ​ 드레스 투어를 다닐 때 드레스를 기록할 스케치 도안은 아래 링크에서 확인/다운로드 할 수 있다. 웨딩 드레스 스케치 도안 확인/다운로드 하기 투어를 마친 후 드레스샵과 계약을 하고, 드디어 본식 드레스를 고를 때에는 사진을 찍을 수 있는 경우가 많다. ​ 이 땐 사진을 잘 찍어서 어떤 드레스를 입을지 잘 선택하도록 하자. ​ ​

파이썬(Python)을 이용한 피어슨 상관계수 구하기

피어슨 상관계수(Pearson correlation coefficient)는 두 변수 간의 상관관계를 확인하기 위한 가장 기본적인 방법이다. 피어슨 상관계수를 사용할 때 주의해야할 사항은 아래와 같다. - 상관관계가 인과관계를 의미하는 것은 아니다. 단순히 두 변수의 연관성을 확인하는 것이다. - 두 변수가 정규분포일 때 잘 작동한다.  - 이상치(outlier)에 민감하므로, 이상치는 제거하는 것이 좋다. - 두 변수가 완전히 동일하면 피어슨 상관계수는 1.0이다. 완전히 반대방향으로 동일하면 -1.0, 전혀 상관 없으면 0이다. 세부적인 해석은 아래와 같이 한다. - -1.0과 -0.7 사이이면, 강한 음적 선형관계 - -0.7과 -0.3 사이이면, 뚜렷한 음적 선형관계 - -0.3과 -0.1 사이이면, 약한 음적 선형관계 - -0.1과 +0.1 사이이면, 거의 무시될 수 있는 선형관계 - +0.1과 +0.3 사이이면, 약한 양적 선형관계 - +0.3과 +0.7 사이이면, 뚜렷한 양적 선형관계 - +0.7과 +1.0 사이이면, 강한 양적 선형관계 파이썬을 통해 피어슨 상관계수를 쉽게 구할 수 있다. 예시를 통해 알아보자. height, weight의 두 변수를 가지는 body라는 DataFrame을 만들었다. DataFrame을 만드는 과정은 아래의 포스트에서 확인할 수 있다.  "파이썬(Python) Pandas를 이용한 데이터프레임(DataFrame) 만들기" body 데이터프레임으로 피어슨 상관계수를 구하는 코드는 아래와 같다.  1 2 corr = body . corr(method = 'pearson' ) corr Jupyter Notebook으로 구하면 아래와 같은 결과를 얻는다. 표의 행과 열을 살펴보면 "height - height", "weight - weight"는 1이...

논문으로 검증된 은행잎추출물의 효능

은행잎추출물(Ginko) - 일반적으로 많이 섭취하는 성분이다. - 일일 섭취 권장량은 28mg이다. 1개 이상의 신뢰할 수 있는 연구로 밝혀진 효능 불안감 감소 : 은행잎 추출물 80mg 또는 160mg을 4주간 복용하면 불안 증상을 줄일 수 있다는 연구가 있다.  알츠하이머병과 같은 치매 증상 완화 : 은행잎추출물을 1년 동안 120~240mg을 복용하면 알츠하이머병과 같은 치매 증상을 조금 완화시킬 수 있다는 연구가 있다. 하지만 몇몇 연구는 이러한 효과를 부정하기 때문에 주의할 필요가 있다. 연구에 따르면 은행잎추출물이 치매 증상을 완화시키는 데 도움이 될 수는 있지만 치매를 예방하는 효과는 없는 것으로 보인다.  기억력 개선 : 은행잎추출물을 복용하면 다양한 뇌세포 손상물질로부터 뇌세포를 보호하고 기능을 활성화시켜 기억력을 개선하는 데 도움을 줄 수 있다.  당뇨성 망막병증으로 인한 시력 감소 완화  : 은행잎추출물을 6개월간 복용하면 당뇨성 망막병증으로 시력이 감소한 환자들의 시력 회복에 도움이 될 수 있다는 연구가 있다.  녹내장으로 인한 시각 장애 개선 : 은행잎추출물을 최대 12.3년 복용하면 녹내장 환자들의 시각 장애 증상을 개선시킬 수 있다는 연구가 있다. 다른 연구에서는 은행잎추출물을 4주 복용했을 때 녹내장의 진행을 막지 못 한 결과를 얻었다.  말초동맥 질환으로 인한 혈액 순환 저하의 개선 : 연구에 의하면 은행잎추출물을 최소 24주 동안 복용하면 말초동맥질환으로 다리에 혈액 순환이 잘 안되는 사람들이 고통없이 걸을 수 있는 거리가 늘어나고 이러한 증상으로 수술을 할 필요성을 낮추는데 도움이 된다고 한다.  신체 기능 유지  : 은행잎추출물을 복용하면 혈액이 신체의 각 부분으로 원활히 이동해 신체 기능을 유지하는데 도움을 줄 수 있다.  월경 전 증후군(PMS) 증상 완화 : 은행잎추출물을 복용하면 월경 주기 16일...