728x90
JOIN이 필요한 이유
Join이란 2개 이상의 Table에 있는 Data를 한번에 조회하는 기능입니다.
지금까지는 2개의 Table을 참조하는 경우에 WHERE절에 PK와 FK가 같은지를 비교연산해서
2개의 Table을 조회했습니다. 이런 방식을 implict join이라고 합니다. 하지만 query문이 복잡해지고 참조하는
table수가 많아지면 query문에 오류가 발생할 가능성이 높습니다.
이를 해결하기 위해 Explicit JOIN을 사용합니다
Explicit JOIN
Explicit JOIN을 사용하는 방법은 FROM절에 (table1) JOIN (table2) ON (JOIN 조건) 형식으로 작성하는 것입니다.
예를 들어 게시판 서비스에 table은 board, comment 2개가 있다고 하겠습니다.
Example Comment/Board Table
위와 같은 Data들이 있을 때 사용자가 comment의 content가 easy인 board의 titile을 알고 싶다면 다음과 같은 query 문을 만들 수 있습니다.
위와 같은 방식을 implicit join이라고 합니다. 그렇다면 이제 Explicit Join을 사용한 query문을 사용해 보겠습니다.
위의 query문을 보면 변경된 점은 WHERE절에 있던 table을 참조하는 부분이 FROM절에 작성된 것 뿐입니다.
하지만 WHERE절을 사용하지 않고 조회를 할 수 있습니다.
즉, JOIN 키워드를 사용하면 WHERE절의 조건문들을 FROM절에 적을 수 있게 됩니다.
JOIN의 동작과정
그렇다면 join의 동작과정을 살펴보겠습니다. join키워드를 사용하면 참조하는 table 2개를 양쪽에 작성하고 join 조건문에 True를 반환하는 Tuple들만을 Table로 만듭니다. 위의 query문을 예로 들면 참조하는 Table은 board, comment입니다. 그 중 comment의 content 값이 easy이고 board의 id와 board_id가 같은 tuple만을 table로 만들고 title 속성값만 반환합니다. 다시 말해 join은 조건에 맞는 tuple들로 생성한 새로운 table을 반환합니다.
만약 SELECT 문에 모든 속성을 출려하게 한다면 아래 사진과 같은 Table을 반환합니다.
JOIN의 여러가지 기능
1. (table 1) OUTER JOIN (table 2) ON (join 조건문)
- join 조건문을 만족하지 않는 Tuple들도 포함해서 모두 출력
2. (table 1) LEFT JOIN (table 2) ON (join 조건문)
- table 1의 Tuple중 조건을 만족하지 않는 Tuple을 포함해서 출력
3. (table 1) RIGHT JOIN (table 2) ON (join 조건문)
- table 2의 Tuple중 조건을 만족하지 않는 Tuple을 포함해서 출력
4. (table 1) FULL JOIN (table 2) ON (join 조건문)
- table 1,table 2의 Tuple중 조건을 만족하지 않는 Tuple을 포함해서 출력
5. (table 1) JOIN (table 2) USING (같은 이름의 속성 값)
- 만약 table 1, table2에 같은 이름의 속성 값이 있다고 가정했을 때 그 속성값이 같은 값인 Tuple들만 출력
6. (table 1) NATURAL JOIN (table 2)
- table1, table2의 속성 값들중 이름이 같은 것을 찾고 그 속성 값이 같은 Tuple만을 출력
'DataBase' 카테고리의 다른 글
MSA에서의 DB (0) | 2024.03.05 |
---|---|
Order By, Group By,Aggregation Function이란 (1) | 2024.01.04 |
SubQuery (1) | 2024.01.03 |
MySQL문법 (0) | 2024.01.02 |
관계형 데이터베이스 (1) | 2024.01.02 |