명령어: JOIN
SQL에서 JOIN은 이제 두개의 SELECT명령어에서 나온 결과를 어떤 하나의 column의 기준으로 합쳐주는 명령어
JOIN은 단독적으로 사용할 수도 있지만
LEFT, RIGHT, INNER 라는 명령어로 기준 테이블을 정할수가 있다
예를 들어: [출저]
두개의 테이블이 있을때
demo_people
name |
phone |
pid |
Mr.Brown |
01225-708225 |
1 |
Miss.Smith |
01225-899360 |
2 |
Mr.Pullen |
01380-724040 |
3 |
pid |
spid |
selling |
1 |
1 |
Old House Farm |
3 |
2 |
The Willows |
3 |
3 |
Tall Trees |
3 |
4 |
The Melksham Florist |
4 |
5 |
Dun Roamin |
Left 혹은 right join은 기준 테이블, 즉 반드시 출력되는 테이블을 잡아 줍니다.
위의 SQL 구문에서 Left Join을 걸어 보면 아래와 같은 결과가 나옵니다.
1 2 3 4 5 | mysql> select name, phone, selling from demo_people left join demo_property on demo_people.pid = demo_property.pid; |
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
UNION
SELECT City FROM Suppliers
ORDER BY City;
City |
---|
Aachen |
Albuquerque |
Anchorage |
Ann Arbor |
Annecy |
Barcelona |
Barquisimeto |
Bend |
Bergamo |
Berlin |
Bern |
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 |
'Data > Data Analysis' 카테고리의 다른 글
[SQL] strptime 함수 사용하기 (0) | 2018.12.27 |
---|---|
[Pyspark] DataFrame 조작 명령어 정리 (0) | 2018.12.20 |
[SQL] Group by 명령어 (0) | 2018.11.26 |
[SQL] SELECT 명령어 모음 (0) | 2018.11.26 |
[MariaDB] SQL 명령어 실행 시 주의할점 (0) | 2018.11.26 |