2013년 2월 8일 금요일

[MySql] left join right join inner join 조인 정리


MySQL LEFT JOIN, RIGHT JOIN, INNER JOIN

테스트 테이블을 준비
CREATE TABLE test1 (
    my_id VARCHAR (255) PRIMARY KEY,
    data1 VARCHAR (255)
);

CREATE TABLE test2 (
    id INT PRIMARY KEY AUTO_INCREMENT,
    my_id VARCHAR (255) NOT NULL,
    data2 VARCHAR (255)
);

테이블 결과
SELECT * FROM test1;

| my_id | data1 |
------------------
| aaaaa | aa1 |
| bbbbb | aa2 |
| ccccc | aa3 |
| ddddd | aa3 |

SELECT * FROM test2;

| id | my_id | data2 |
-----------------------
| 1 | aaaaa | bb1 |
| 2 | aaaaa | bb2 |
| 3 | bbbbb | cc1 |
| 4 | ccccc | dd3 |
| 5 | eeeee | NULL |

1) LEFT JOIN
2) RIGHT JOIN
3) INNER JOIN

1) JOIN 왼쪽 테이블의 데이터는 기본적으로 모두 표시합니다 (WHERE 절에서 제외하지 않는 ). 그리고 거기에 해당하는 오른쪽 테이블의 데이터를 추가합니다. 오른쪽 테이블에 해당하는 데이터가 존재하지 않는 경우는 NULL 대신에 사용됩니다.

SELECT
    test1.my_id AS id_1,
    test2.my_id AS id_2,
    data1,
    data2
FROM
    test1 LEFT JOIN test2
ON
    test1.my_id = test2.my_id;

| id_1 | id_2 | data1 | data2 |
-------------------------------
| aaaaa | aaaaa | aa1 | bb1 |
| aaaaa | aaaaa | aa1 | bb2 |
| bbbbb | bbbbb | aa2 | cc1 |
| ccccc | ccccc | aa3 | dd3 |
| ddddd | NULL | aa3 | NULL |

2) 1)의역으로 JOIN 오른쪽 테이블의 데이터는 기본적으로 모든 표시됩니다. 그리고 거기에 해당하는 왼쪽 테이블의 데이터를 추가합니다. 왼쪽 테이블에 해당하는 데이터가 존재하지 않는 경우는 NULL 대신에 사용됩니다.

SELECT
    test1.my_id AS id_1,
    test2.my_id AS id_2,
    data1,
    data2
FROM
    test1 RIGHT JOIN test2
ON
    test1.my_id = test2.my_id;

| id_1 | id_2 | data1 | data2 |
-------------------------------
| aaaaa | aaaaa | aa1 | bb1 |
| aaaaa | aaaaa | aa1 | bb2 |
| bbbbb | bbbbb | aa2 | cc1 |
| ccccc | ccccc | aa3 | dd3 |
| NULL | eeeee | NULL | NULL |

3) 좌우 테이블에서 해당 데이터가 존재하는 밖에 표시하지 않습니다

SELECT
    test1.my_id AS id_1,
    test2.my_id AS id_2,
    data1,
    data2
FROM
    test1 INNER JOIN test2
ON
    test1.my_id = test2.my_id;

| id_1 | id_2 | data1 | data2 |
-------------------------------
| aaaaa | aaaaa | aa1 | bb1 |
| aaaaa | aaaaa | aa1 | bb2 |
| bbbbb | bbbbb | aa2 | cc1 |
| ccccc | ccccc | aa3 | dd3 |

댓글 없음:

댓글 쓰기