🤔 < Join?>
DataBase는 현대 Business의 핵심 요소 중 하나이다. 기업은 수십, 수백, 심지어는 수억 개의 Recode를 관리해야 할 수도 있다. 이런 Data를 효과적으로 관리하려면 구조화된 방식이 필요하고, 그래서 RDBMS를 사용하고 있다.
RDBMS에서 가장 기본 개념 중 하나가 바로 "Join"이다.
📟 < Join! >
Join은 여러 Data Table을 관련성이 있는 Column을 기준으로 연결하는 방법이다. 이를 통해 단일 쿼리로 여러 Table의 Data를 수집할 수 있게 된다. 대표적으로 INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN 등이 있다.
이제 INNER JOIN부터 해서, FULL JOIN까지 자세히 알아보자.
🔥 < Inner Join >
Inner Join : "두 개 이상"의 Table에서 공통으로 존재하는 Recode만을 반환한다.
Inner Join은 Join 방식 중 가장 엄격한 일치 조건을 필요로 한다. 즉, Join 하는 Table 간에 일치 값이 없다면 결과는 아무것도 표시되지 않는다.
🌈 < Inner Join 장점 >
정확성 : Table 간에 완벽 일치하는 Recode를 반환하기에, 정확성을 보장한다.
효율성 : 불필요한 Recode를 제거함으로써 Database 효율성을 높인다.
간결성 : Inner Join을 통해 여러 Table 관련 정보를 한 줄의 Query로 가져온다.
< 예제 SQL >
'Employees' 'Departments' Table이 있다.
< Employees Table>
EmployeeID | EmployeeName | DepartmentID |
1 | 김남준 | 100 |
2 | 윤태영 | 200 |
3 | 김태형 | 300 |
4 | 김지민 | 400 |
< Departments Table >
DepartmentID | DepartmentName |
100 | HR |
200 | Sales |
300 | IT |
500 | Marketing |
다음 SQL Query는 Inner Join을 사용하여 'Employees' Table과 Departments Table을 Join 하고, 각 직원의 이름과 해당 직원이 속한 부서의 이름을 반환한다.
SELECT Employees.EmployeeName, Departments.DepartmentName
FROM Employees
INNER JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;
이 쿼리의 결과 Table은 다음과 같다.
EmployeeName | DepartmentName |
김남준 | HR |
윤태영 | Sales |
김태형 | IT |
여기에서 "김지민"은 결과에 제외되어있다. 이유는 그의 DepartmentID인 400은 Departments Table에 존재하지 않기 때문이다. 이처럼 INNER JOIN은 양쪽 테이블에서 일치하는 레코드만 반환한다.
다른 예제를 또 보자면, 이번에는 Employees Table에서 DepartmnetID가 200 이상인 직원과 그들의 부서를 찾는 쿼리다.
SELECT Employees.EmployeeName,Departments.DepartmentName
FROM Employees
INNER JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID
WHERE Employees.DepartmentID >= 200;
이 Query의 결과 Table은 다음과 같다.
EmployeeName | DepartmentName |
윤태영 | Sales |
김태형 | IT |
김지민은 DepartmentID가 400이어서 200이상인 조건에 만족하지만, Departments Table에 DepartmentID가 400이 없기에 Inner Join의 결과에서 제외된다.
🔥 < Left Join >
Left Join은 SQL의 주요 명령어 중 하나로, Left Table의 모든 Recode와 Right Table에서 일치된 Recode를 반환해준다.Right Table에서 일치하는 Recode가 없으면 null값.
🐱👤 < Left Join 장점 >
완정성 : Left Table의 모든 Data를 보존하면서 동시에 Right Table의 일치 데이터를 가져올 수 있다. 이는 데이터 완전성을 보장한다.유연성 : 일치하는 Data가 없더라도 Left Table의 Data를 모두 표시한다. 이로 인해 데이터 분석 시 유연성을 제공한다.
< 예제 SQL >
(앞서 언급한 Employees Table과 Departments Table을 다시 사용한다)
아래의 SQL Query는 Left Join을 사용하여서 Employees Table과 Departments Table을 Join 해서 각 직원의 이름과 해당 직원이 속한 부서의 이름을 반환한다.
SELECT Employees.EmployeeName, Departments.DepartmentName
FROM Employees
LEFT JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;
이 Query의 결과는 다음과 같다.
EmployeeName | DepartmentName |
김남준 | HR |
윤태영 | Sales |
김태형 | IT |
김지민 | NULL |
여기서 김지민의 부서 이름이 NULL로 표시된다. 왜냐하면 김지민의 DepartmentID인 400이 Departments Table에 존재하지 않기 때문이다.
다른 예제를 보자. 이번에는 Employees Table에서 DepartmentID가 200 이상인 직원과 그들의 부서를 찾는 Query다.
SELECT Employees.EmployeeName, Departments.DepartmentName
FROM Employees
LEFT JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID
WHERE Employees.DepartmentID >= 200;
이 Query의 결과는 다음과 같다.
EmployeeName | DepartmentName |
윤태영 | Sales |
김태형 | IT |
김지민 | NULL |
이와 같이, Left Join은 Left Table의 모든 Recode를 보존하면서도 Right Table의 일치하는 Recode를 가져오므로
데이터의 완정성을 유지하면서 동시에 필요한 정보를 추출할 수 있다.
🔥 < Right Join>
Right Join은 SQL의 주요 명령어 중 하나로, Right Table의 모든 Recode와 Left Table에서 일치된 Recode를 반환한다.
Left Table에 일치 Recode가 없으면 Null값.
🐱🏍 < Right Join 장점 >
Right Table 중심 : Right Table의 모든 Data를 보존과 동시에 Left Table Data를 가져온다.
이는 Right Table에 중점을 두면서 Data를 조사하려는 경우 유용하다.
유연성 : 일치하는 Data가 없더라도 Right Table의 Data를 모두 표시한다. 이로 인해 데이터 분석 시 유연하다.
< 예제 SQL >
( Employees와 Departments Table을 다시 사용한다 )
아래의 SQL Query는 Right Join을 사용하여서 Employees Table과 Departments Table을 Join 하여서, 각 직원 이름과 해당 직원이 속한 부서의 이름을 반환한다.
SELECT Employees.EmployeeName, Departments.DepartmentName
FROM Employees
RIGHT JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;
이 Query의 결과는 아래와 같다.
EmployeeName | DepartmentName |
김남준 | HR |
윤태영 | Sales |
김태형 | IT |
NULL | Marketing |
여기서 Marketing 부서는 직원이 없기 때문에 EmployeeName은 NULL 표시된다.
이번에는 Departments Table에서 DepartmentID가 200 이상인 부서와 그 부서에 속한 직원들을 찾는 Query다.
SELECT Employees.EmployeeName, Departments.DepartmentName
FROM Employees
RIGHT JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID
WHERE Departments.DepartmentID >= 200;
이 Query 결과 Table은 아래와 같다.
EmployeeName | DepartmentName |
윤태영 | Sales |
김태형 | IT |
NULL | Marketing |
이처럼, Right Join은 Right Table의 모든 Recode를 보존함과 동시에 Left Table의 일치 Recode를 가져오므로, 완정성 유지와 필요 정보를 추출할 수 있다.
Reference Documents :
https://dev.mysql.com/doc/refman/8.0/en/join.html
https://www.w3schools.com/sql/sql_join.asp
'SQL 이론' 카테고리의 다른 글
인덱스(Index) (0) | 2023.06.06 |
---|---|
뷰(View) (0) | 2023.06.05 |
정규화(Normalization) (0) | 2023.05.16 |
DBMS의 동시성 제어 (0) | 2023.05.16 |
DataBase Key (0) | 2023.05.16 |