1. Join
1.1 Create table & data
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
CREATE TABLE user (
user_id int(11) unsigned NOT NULL AUTO_INCREMENT,
name varchar(30) DEFAULT NULL,
PRIMARY KEY (user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE addr (
id int(11) unsigned NOT NULL AUTO_INCREMENT,
addr varchar(30) DEFAULT NULL,
user_id int(11) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO user(name)
VALUES ("jin"),
("po"),
("alice"),
("petter");
INSERT INTO addr(addr, user_id)
VALUES ("seoul", 1),
("pusan", 2),
("deajeon", 3),
("deagu", 5),
("seoul", 6);
- http://sqlfiddle.com/ 에서 table & data 생성
- 위의 코드를 왼쪽창에 넣고 Build Schema 를 누르면 됨
1.2 Inner Join
1
2
3
4
SELECT id, user.name, addr.addr
FROM user
JOIN addr
ON user.user_id = addr.user_id
- 두 테이블 사이의 공통된 값이 없는 row는 출력하지 않음
- user와 addr 테이블을 합쳐 id, name, addr을 출력
1
2
3
4
SELECT Country.name AS city_name, City.name AS country_name
FROM City
JOIN Country
ON City.CountryCode = Country.code
- https://demo.phpmyadmin.net/master-config/index.php?route=/database/structure&server=2&db=world 에서 실습
- World 데이터 베이스에서 도시 이름과 국가 이름을 출력
1.3 Left Join
1
2
3
4
SELECT id, user.name, addr.addr
FROM user
LEFT JOIN addr
ON user.user_id = addr.user_id
- 왼쪽 테이블을 기준으로 왼쪽 테이블의 모든 데이터가 출력되고 매핑되는 키값이 없으면 NULL로 출력됨
1.4 Right Join
1
2
3
4
SELECT id, user.name, addr.addr
FROM user
RIGHT JOIN addr
ON user.user_id = addr.user_id
- 오른쪽 테이블을 기준으로 왼쪽 테이블의 모든 데이터가 출력되고 매핑되는 키값이 없으면 NULL로 출력됨
2. Union
2.1 Union
- SELECT 문의 결과 데이터를 하나로 합쳐서 출력
- 컬럼의 갯수와 타입, 순서가 같아야 함
- Full Outer Join을 구현 가능
2.2 Union
1
2
3
4
5
SELECT name
FROM user
UNION
SELECT addr
FROM addr
- Union은 자동으로 Distinct를 하여 중복을 제거
- User 테이블의 Name 컬럼과 Addr 테이블의 Addr 컬럼의 데이터를 하나로 합쳐서 출력하는 코드
2.3 Union All
1
2
3
4
5
SELECT name
FROM user
UNION ALL
SELECT addr
FROM addr
- Union All은 중복 데이터를 제거하지 않고 결과 데이터를 합쳐서 출력
- User 테이블의 Name 컬럼과 Addr 테이블의 Addr 컬럼의 데이터를 하나로 합쳐서 출력하는 코드(같은 데이터는 중복되어 나옴)
2.4 Full Outer Join
1
2
3
4
5
6
7
8
9
SELECT id, user.name, addr.addr
FROM user
LEFT JOIN addr
ON user.user_id = addr.user_id
UNION
SELECT id, user.name, addr.addr
FROM user
RIGHT JOIN addr
ON user.user_id = addr.user_id
- Union을 이용하여 Full Outer Join을 구현함
- Join의 종류를 정리한 그래프