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 |