Posts MySQL 중급(2)
Post
Cancel

MySQL 중급(2)

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


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의 종류를 정리한 그래프
This post is licensed under CC BY 4.0 by the author.