본문 바로가기

Data/Data Analysis

[SQL] UNION, JOIN명령어

반응형


명령어: JOIN


SQL에서 JOIN은 이제 두개의 SELECT명령어에서 나온 결과를 어떤 하나의 column의 기준으로 합쳐주는 명령어


JOIN은 단독적으로 사용할 수도 있지만

LEFT, RIGHT, INNER 라는 명령어로 기준 테이블을 정할수가 있다


예를 들어: [출저] 


두개의 테이블이 있을때

demo_people

 name

phone 

pid 

 Mr.Brown

01225-708225 

 Miss.Smith

01225-899360 

 Mr.Pullen

01380-724040 


demo_property

 pid

spid 

selling 

 1

Old House Farm 

 3

 The Willows

 3

 Tall Trees

 3

 The Melksham Florist

 4

Dun Roamin 


Left 혹은 right join은 기준 테이블, 즉 반드시 출력되는 테이블을 잡아 줍니다.
위의 SQL 구문에서 Left Join을 걸어 보면 아래와 같은 결과가 나옵니다.


NAME 

 PHONE

SELLING 

 Mr.Brown

 01225-708225 

 Old House Farm 

 Miss Smith

 01225-899360 

 Null 

 Mr Pullen

 01380-724040 

 The Willows 

 Mr Pullen

 01380-724040 

 The Trees

 Mr. Pullen

 01380-724040 

 The Melksham Florist


이 때 Left Join이기 때문에 왼쪽 테이블이 기준이 됩니다.
따라서, 왼쪽 테이블의 모든 Row가 결과값에 반드시 한줄 이상 나오는 보장을 받게 됩니다. 왼쪽 테이블(demo_people)에 해당하는 오른쪽 테이블의 pid가 여러개일경우 위와 같이 여러줄이 나옵니다.

반면, right join은 left join과 반대로 기준이 오른쪽 테이블입니다.
오른쪽 테이블은 반드시 한줄 이상 나오는 보장을 받게 되는 것이죠.
결과 값을 한번 보시죠.


 

NAME 

PHONE 

SELLING 

 Mr.Brown

 01225 708225

 Old House Farm

 Mr Pullen

 01380 724040

 The Willows

 Mr Pullen

 01380 724040

 Tall Trees

 Mr Pullen

 01380 724040

 The Melksham Florist

 NULL

 NULL

 Dun Roamin


왼쪽 테이블(demo_people)에 해당 pid 값이 같은 줄이 없어도,

오른쪽 테이블(demo_property)이 모두 나와야 하기 때문에, null, null 값이 출력되게 된 것입니다.

INNER JOIN은 JOIN과 같고,
LEFT OUTER JOIN은 LEFT JOIN과 같고,
RIGHT OUTER JOIN은 RIGHT JOIN과 같습니다.



명령어: UNION


SQL에서 UNION명령어는 두개 이상의 SELECT 명령어에서 나온 결과를 합치는 연산문


단순히 UNION만 쓸경우에는 중복되는 값이 없이 출력되고

UNION ALL이라고 했을경우 중복을 고려하지않고 전체 데이터가 출력됨


예를들어: [출저] http://newpower.tistory.com/159



SELECT City FROM Customers
UNION
SELECT City FROM Suppliers
ORDER BY City;

City의 이름 순서대로 두 테이블에서 가져온 City 컬럼을 함쳐서 보여준다. 

결과:
City
Aachen
Albuquerque
Anchorage
Ann Arbor
Annecy
Barcelona
Barquisimeto
Bend
Bergamo
Berlin
Bern
UNION ALL을 안하면 중복된 데이터는 없다.

같은 예에서 UNION ALL을 붙이 결과는 다음과 같다. 

SELECT City FROM Customers
UNION ALL
SELECT City FROM Suppliers
ORDER BY City;

결과:
City
Aachen
Albuquerque
Anchorage
Ann Arbor
Annecy
Barcelona
Barquisimeto
Bend
Bergamo
Berlin
Bern
Lisboa
Lisboa
London
London
London
London
London
London

Lisboa, London 등과 같이 중복되는 데이터도 그대로 다 복사해서 보여준다


반응형