MYSQL - JOIN


まず2つのJOINサンプルテーブルを設定します.
CREATE TABLE singer(
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(40) NOT NULL,
    birth DATE NOT NULL
);

CREATE TABLE song(
    id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(40) NOT NULL,
    singer_id INT NOT NULL ,
    FOREIGN KEY(singer_id) REFERENCES singer(id)
);


INSERT INTO singer (name, birth) VALUES ('아이유', '1993-05-16');
INSERT INTO singer (name, birth) VALUES ('로꼬', '1989-12-25');
INSERT INTO singer (name, birth) VALUES ('볼빨간 사춘기', '1995-09-14');
INSERT INTO singer (name, birth) VALUES ('백예린', '1997-06-26');
INSERT INTO singer (name, birth) VALUES ('박재범', '1987-04-25');
INSERT INTO singer (name, birth) VALUES ('릴보이', '1991-06-07');
INSERT INTO singer (name, birth) VALUES ('태연', '1989-03-09');
INSERT INTO singer (name, birth) VALUES ('딘', '1992-11-10');
INSERT INTO singer (name, birth) VALUES ('크러쉬', '1992-05-03');
INSERT INTO singer (name, birth) VALUES ('장범준', '1989-05-16');


INSERT INTO song (title, singer_id) VALUES ('밤편지', 1);
INSERT INTO song (title, singer_id) VALUES ('블루밍', 1);
INSERT INTO song (title, singer_id) VALUES ('가을 아침', 1);
INSERT INTO song (title, singer_id) VALUES ('감아', 2);
INSERT INTO song (title, singer_id) VALUES ('시간이 들겠지', 2);
INSERT INTO song (title, singer_id) VALUES ('카운슬링', 3);
INSERT INTO song (title, singer_id) VALUES ('우주를 줄게', 3);
INSERT INTO song (title, singer_id) VALUES ('나만 봄', 3);
INSERT INTO song (title, singer_id) VALUES ('좋아', 5);
INSERT INTO song (title, singer_id) VALUES ('사계', 7);
INSERT INTO song (title, singer_id) VALUES ('D', 8);
INSERT INTO song (title, singer_id) VALUES ('가끔', 9);
INSERT INTO song (title, singer_id) VALUES ('여수밤바다', 10);
INSERT INTO song (title, singer_id) VALUES ('잠이오질않네요', 10);


SELECT *FROM singer;

+----+---------------+------------+
| id | name          | birth      |
+----+---------------+------------+
| 1  | 아이유        | 1993-05-16 |
| 2  | 로꼬          | 1989-12-25 |
| 3  | 볼빨간 사춘기   | 1995-09-14 |
| 4  | 백예린        | 1997-06-26 |
| 5  | 박재범        | 1987-04-25 |
| 6  | 릴보이        | 1991-06-07 |
| 7  | 태연          | 1989-03-09 |
| 8  || 1992-11-10 |
| 9  | 크러쉬        | 1992-05-03 |
| 10 | 장범준        | 1989-05-16 |
+----+---------------+------------+

SELECT *FROM song;

+----+----------------+-----------+
| id | title          | singer_id |
+----+----------------+-----------+
| 1  | 밤편지         | 1         |
| 2  | 블루밍         | 1         |
| 3  | 가을 아침      | 1         |
| 4  | 감아          | 2         |
| 5  | 시간이 들겠지   | 2         |
| 6  | 카운슬링       | 3         |
| 7  | 우주를 줄게     | 3         |
| 8  | 나만 봄        | 3         |
| 9  | 좋아          | 5         |
| 10 | 사계          | 7         |
| 11 | D            | 8         |
| 12 | 가끔          | 9         |
| 13 | 여수밤바다     | 10        |
| 14 | 잠이오질않네요  | 10        |
+----+----------------+-----------+

INNER JOIN


SELECT singer.id, singer.name, singer.birth, song.title
FROM singer
JOIN song
ON singer.id = song.singer_id;

+----+---------------+------------+----------------+
| id | name          | birth      | title          |
+----+---------------+------------+----------------+
| 1  | 아이유        | 1993-05-16 | 밤편지         |
| 1  | 아이유        | 1993-05-16 | 블루밍         |
| 1  | 아이유        | 1993-05-16 | 가을 아침      |
| 2  | 로꼬          | 1989-12-25 | 감아         |
| 2  | 로꼬          | 1989-12-25 | 시간이 들겠지  |
| 3  | 볼빨간 사춘기   | 1995-09-14 | 카운슬링       |
| 3  | 볼빨간 사춘기   | 1995-09-14 | 우주를 줄게    |
| 3  | 볼빨간 사춘기   | 1995-09-14 | 나만 봄       |
| 5  | 박재범        | 1987-04-25 | 좋아          |
| 7  | 태연         | 1989-03-09 | 사계          |
| 8  || 1992-11-10 | D            |
| 9  | 크러쉬        | 1992-05-03 | 가끔         |
| 10 | 장범준        | 1989-05-16 | 여수밤바다     |
| 10 | 장범준        | 1989-05-16 | 잠이오질않네요 |
+----+---------------+------------+----------------+
WHEREはONではなく使用できます.
白芸琳、リル男の子の歌手.id付きsongはないので現れません.

LEFT JOIN, RIGHT JOIN



LEFT JOIN

SELECT singer.id, singer.name, singer.birth, song.title
FROM singer
LEFT OUTER JOIN song
ON singer.id = song.singer_id;

+----+---------------+------------+----------------+
| id | name          | birth      | title          |
+----+---------------+------------+----------------+
| 1  | 아이유        | 1993-05-16 | 밤편지         |
| 1  | 아이유        | 1993-05-16 | 블루밍         |
| 1  | 아이유        | 1993-05-16 | 가을 아침      |
| 2  | 로꼬          | 1989-12-25 | 감아         |
| 2  | 로꼬          | 1989-12-25 | 시간이 들겠지  |
| 3  | 볼빨간 사춘기   | 1995-09-14 | 카운슬링      |
| 3  | 볼빨간 사춘기   | 1995-09-14 | 우주를 줄게    |
| 3  | 볼빨간 사춘기   | 1995-09-14 | 나만 봄       |
| 4  | 백예린        | 1997-06-26 | <null>       |
| 5  | 박재범        | 1987-04-25 | 좋아           |
| 6  | 릴보이        | 1991-06-07 | <null>         |
| 7  | 태연          | 1989-03-09 | 사계           |
| 8  || 1992-11-10 | D            |
| 9  | 크러쉬        | 1992-05-03 | 가끔           |
| 10 | 장범준        | 1989-05-16 | 여수밤바다     |
| 10 | 장범준        | 1989-05-16 | 잠이오질않네요 |
+----+---------------+------------+----------------+

RIGHT JOIN

SELECT song.id, song.title, singer.name, singer.birth
FROM singer
RIGHT OUTER JOIN song
ON singer.id = song.singer_id;
+----+----------------+---------------+------------+
| id | title          | name          | birth      |
+----+----------------+---------------+------------+
| 1  | 밤편지         | 아이유        | 1993-05-16 |
| 2  | 블루밍         | 아이유        | 1993-05-16 |
| 3  | 가을 아침      | 아이유        | 1993-05-16 |
| 4  | 감아           | 로꼬          | 1989-12-25 |
| 5  | 시간이 들겠지  | 로꼬          | 1989-12-25 |
| 6  | 카운슬링       | 볼빨간 사춘기 | 1995-09-14 |
| 7  | 우주를 줄게    | 볼빨간 사춘기 | 1995-09-14 |
| 8  | 나만 봄        | 볼빨간 사춘기 | 1995-09-14 |
| 9  | 좋아           | 박재범        | 1987-04-25 |
| 10 | 사계           | 태연          | 1989-03-09 |
| 11 | D              || 1992-11-10 |
| 12 | 가끔           | 크러쉬        | 1992-05-03 |
| 13 | 여수밤바다     | 장범준        | 1989-05-16 |
| 14 | 잠이오질않네요 | 장범준        | 1989-05-16 |
+----+----------------+---------------+------------+