티스토리 뷰

공부 노트

[MySQL] JOIN + 컬럼삭제

2021bong 2022. 8. 8. 20:35

JOIN

JOIN(조인)은 데이터베이스 내의 여러 테이블에서 가져온 데이터를 조합하여 하나의 테이블이나 결과로 보여준다. 서로 다른 두 개 이상의 테이블을 관련된 필드를 기준으로 묶어서 한번에 보여주고 싶을 때 사용한다.

 

 

 

INNER JOIN

JOIN이라고 하면 보통 INNER JOIN을 말한다. INNER는 생략해도 된다. 결합 조건을 만족하는 데이터만 보여준다.

서로 다른 테이블의 같은 이름의 컬럼을 SELECT 할 때 ambiguous가 발생하지 않도록 주의해야한다.

// 2개 테이블일 때
SELECT `컬럼명` FROM `테이블명` JOIN `참조할 테이블명` ON `조건` [WHERE 검색조건]
SELECT `컬럼명` FROM `테이블명` INNER JOIN `참조할 테이블명` ON `조건` [WHERE 검색조건]

// 예시
SELECT `table1.id, table1.name, table2.user_id` FROM `table1` JOIN `table2` ON `table1.id = table2.user_id`;

// 3개 이상 테이블일 때
// JOIN ~ ON ~ 을 계속 붙이면 됨
SELECT (결과로 보여줄) `컬럼1`, `컬럼2`, `컬럼3` ... FROM `테이블1` JOIN `테이블2` ON `조건` JOIN `테이블3` ON `조건`;

OUTER JOIN

INNER JOIN은 두 테이블 모두에 내용이 있는 경우에만 결과가 검색되고, OUTER JOIN은 한 테이블만 내용이 있어도 결과가 검색된다. 조건에 맞지 않는 데이터는 NULL로 가져오며 조건에 맞지 않는 데이터까지 표시하고 싶을 때 사용한다.

INNER JOIN은 어느 테이블을 먼저 읽어도 결과가 달라지지 않지만 OUTER JOIN은 OUTER가 되는 테이블에 따라서 결과가 달라진다.

 

LEFT JOIN

첫 번째 테이블의 데이터를 모두 선택한 후 두 번째 테이블의 데이터를 결합 조건에 따라 매칭한다. 매칭되는 데이터가 없는 경우 null로 표시한다. OUTER는 생략할 수 있다. 기준이 되는 테이블(FROM 뒤에 적은 왼쪽 테이블)에 참조할 테이블(LEFT JOIN 뒤에 적은 오른쪽 테이블) 값이 조합되고 값이 없으면 null로 표현된다.

SELECT `컬럼명` FROM `테이블명(기준 테이블)` LEFT JOIN `참조할 테이블명` ON `조건` [WHERE 검색조건]
SELECT `컬럼명` FROM `테이블명(기준 테이블)` LEFT OUTER JOIN `참조할 테이블명` ON `조건` [WHERE 검색조건]

 

RIGHT JOIN

두번째 테이블의 데이터를 모두 선택한 후 첫 번째 테이블의 데이터를 결합 조건에 따라 매칭한다. 매칭되는 데이터가 없는 경우 null로 표시한다. OUTER는 생략할 수 있다. 기준이 되는 테이블(RIGHT JOIN 뒤에 적은 오른쪽 테이블)에 참조할 테이블(FROM 뒤에 적은 왼쪽 테이블) 값이 조합되고 값이 없으면 null로 표현된다.

SELECT `컬럼명` FROM `참조할 테이블명` RIGHT JOIN `테이블명(기준 테이블)` ON `조건` [WHERE 검색조건]
SELECT `컬럼명` FROM `참조할 테이블명` RIGHT OUTER JOIN `테이블명(기준 테이블)` ON `조건` [WHERE 검색조건]

 

FULL OUTER JOIN

FULL OUTER JOIN은 두 테이블의 조건에 맞지 않는 데이터를 모두 보려고 할 때 사용한다. MySQL은 FULL JOIN 명령어를 제공하지 않기 때문에 LEFT JOIN과 RIGHT JOIN의 UNION 명령어로 합집합을 구해 FULL JOIN의 값을 얻을 수 있다.

// 중복을 제거한 집합
UNION

// 중복을 제거하지 않은 집합
UNION ALL
SELECT `컬럼명` FROM `table1(기준테이블)` LEFT JOIN `table2(참조테이블)` ON `조건` [WHERE 검색조건] 
UNION 
SELECT `컬럼명` FROM `table1(참조테이블)` RIGHT JOIN `table2(기준테이블)` ON `조건` [WHERE 검색조건];

// 2개의 테이블을 FULL OUTER JOIN
SELECT * FROM `table1` LEFT JOIN `table2` ON `조건` [WHERE 검색조건] > table1을 기준으로 table2가 합쳐진 결과
UNION 
SELECT * FROM `table1` RIGHT JOIN `table2` ON `조건` [WHERE 검색조건]; > table2을 기준으로 table1이 합쳐진 결과
// 두 테이블의 조건에 맞지 않는 데이터까지 비교해서 볼 수 있음


// 테이블이 3개일 때
SELECT * FROM table1
LEFT JOIN table2 ON table1.id = table2.id
LEFT JOIN table3 ON table1.id = table3.id > table1을 기준으로 JOIN
UNION 
SELECT * FROM table1
RIGHT JOIN table2 ON table1.id = table2.id
LEFT JOIN table3 ON table2.id = table3.id > table2를 기준으로 JOIN
UNION
SELECT * FROM table1
RIGHT JOIN table2 ON table1.id = table2.id
RIGHT JOIN table3 ON table2.id = table3.id; > table3을 기준으로 JOIN
// 결과값들이 모두 합해진 값을 볼 수 있음

CROSS JOIN

조건없이 모든 데이터를 보여준다.

SELECT `컬럼명` FROM `테이블1` CROSS JOIN `테이블2`;

컬럼 삭제

ALTER TABLE `테이블명` DROP COLUMN `컬럼명`;
728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
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 26 27
28 29 30 31
글 보관함