본문 바로가기
서버/Mysql

[Mysql] Join Query

by 코딩히어로 2023. 11. 6.
728x90

MySQL의 JOIN은 관계형 데이터베이스 관리 시스템에서 중요한 부분을 차지합니다. 

다른 테이블의 관련된 데이터를 결합하여 필요한 정보를 추출하는 데 사용됩니다

 

1. INNER JOIN

INNER JOIN은 두 테이블에서 일치하는 레코드만 반환합니다. 기본 구문은 다음과 같습니다

 

SELECT columns
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;

 

응용하자면 employees 테이블과 departments 테이블이 있으며 각 직원이 속한 부서 정보를 얻고 싶다면 다음과 같습니다

 

SELECT employees.name, departments.name
FROM employees
INNER JOIN departments
ON employees.department_id = departments.id;

 

이 쿼리는 employees 테이블과 departments 테이블에서 department_id와 id가 일치하는 모든 직원의 이름과 부서 이름을 반환합니다.

 

2. LEFT (OUTER) JOIN

LEFT JOIN (또는 LEFT OUTER JOIN)은 왼쪽 테이블의 모든 레코드와 오른쪽 테이블의 일치하는 레코드를 반환합니다. 일치하는 레코드가 없는 경우, 결과는 NULL로 채워집니다.

 

SELECT columns
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;

 

만약 모든 직원의 이름과 해당되는 경우 부서 이름도 함께 보고 싶다면 다음과 같습니다

 

SELECT employees.name, departments.name
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.id;

 

이 쿼리는 부서에 할당되지 않은 직원까지 포함하여 모든 직원의 이름과, 가능한 경우 해당 부서 이름을 반환합니다.

 

3. RIGHT (OUTER) JOIN

RIGHT JOIN (또는 RIGHT OUTER JOIN)은 LEFT JOIN의 반대로, 오른쪽 테이블의 모든 레코드와 왼쪽 테이블의 일치하는 레코드를 반환합니다.

 

SELECT columns
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;

 

만약 모든 부서와 해당되는 경우 부서에 속한 직원의 이름을 보고 싶다면 다음과 같습니다

 

SELECT employees.name, departments.name
FROM employees
RIGHT JOIN departments
ON employees.department_id = departments.id;

 

이 쿼리는 직원이 없는 부서까지 포함하여 모든 부서의 이름과, 가능한 경우 그 부서에 속한 직원의 이름을 반환합니다.

 

4. FULL (OUTER) JOIN

MySQL은 FULL OUTER JOIN을 직접 지원하지 않습니다. 그러나 LEFT JOIN과 RIGHT JOIN의 결과를 결합하여 시뮬레이션할 수 있습니다.

 

모든 직원과 모든 부서를 보여주고 일치하는 경우에 연결한다면 다음과 같습니다

SELECT employees.name, departments.name
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.id
UNION
SELECT employees.name, departments.name
FROM employees
RIGHT JOIN departments
ON employees.department_id = departments.id;

 

이 쿼리는 모든 직원과 모든 부서를 반환하며, 일치하는 경우 직원과 부서가 연결되어 표시됩니다. 일치하지 않는 레코드는 NULL 값으로 표시됩니다.

728x90
반응형

'서버 > Mysql' 카테고리의 다른 글

InnoDB와 Mysql 이해하기  (2) 2023.12.02
[mysql] 클러스터링이란?  (0) 2023.10.30
[Mysql] Order by 구문 활용  (0) 2023.10.28
[Mysql] Select Query 성능 최적화  (0) 2023.10.27
[Mysql] Insert Query 성능 최적화  (2) 2023.10.27

댓글