티스토리 뷰

Join에 관해 학습하던 도중,
조인의 다양한 종류 중 Self Join을 마주하게 되었습니다👀

같은 테이블끼리 조인한다는 점에서
어떤 상황에서 유용하게 사용되는지 찾아보았습니다.

 


 

부모 자식 관계가 존재하는 경우

한 테이블 내에서 부모 자식과 같이, 상하 관계가 명시되어 있는 경우 Self Join이 유용하게 사용될 수 있습니다

예를 들면, 게시글에 대한 "댓글과 대댓글"의 관계를 떠올릴 수 있습니다.

 

게시글에 대한 댓글 내용을 저장하는 테이블 comment

CREATE TABLE comment (
    id INT PRIMARY KEY, -- 댓글 고유 ID
    content VARCHAR(255), -- 댓글 내용
    parent_comment_id INT, -- 부모 댓글이 있는 경우, 부모 댓글 ID
    user_id INT, -- 댓글 작성자 ID
    article_id INT, -- 게시글 ID
);

 

아래 어플 사진에 대해, 데이터는 아래와 같이 저장이 됩니다.

 

테이블 데이터

 

 

이 때, 부모 댓글과 그에 대한 자식 댓글을 검색할 때, SELF JOIN을 사용하면 편리합니다👍

같은 테이블끼리 조인하므로, 각각 parent와 reply라는 이름을 지정한 후,

parent의 id와 reply의 parent_comment_id가 같은 경우에 대해 조인을 진행합니다.

 

SELECT 
    parent.id AS parent_comment_id,
    parent.content AS parent_comment_content,
    reply.id AS reply_comment_id,
    reply.content AS reply_comment_content
FROM comment AS parent
JOIN comment AS reply ON parent.id = reply.parent_comment_id;

 

SELF JOIN 결과

 


정리하면

각 행의 데이터들이 서로 연관이 있는 경우, SELF JOIN을 유용하게 사용할 수 있습니다!

처음 SELF JOIN을 접했을 때는, 자주 사용되긴 할까? 싶었는데, 해당 개념이 존재하는 이유가 있었습니다.

인스타그램, 페이스북과 같은 SNS 친구 관계에서, 자신과 연결된 친구를 찾기 위해 유용하게 사용될 수 있다고 하니, 알아두고 프로젝트 할 때, 적용해보면 좋을 것 같습니다😀

'백엔드 > 데이터베이스' 카테고리의 다른 글

[데이터베이스] Explain SQL, Index  (0) 2023.10.06
[데이터베이스] 다양한 JOIN  (0) 2023.10.05