본문 바로가기
MYSQL/프로그래머스 LV02

부모의 형질을 모두 가지는 대장균 찾기

by 수스리 2025. 2. 13.

https://school.programmers.co.kr/learn/courses/30/lessons/301647

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

더보기

SELECT ED1.ID, ED1.GENOTYPE, ED2.GENOTYPE AS PARENT_GENOTYPE
FROM ECOLI_DATA ED1
JOIN ECOLI_DATA ED2 ON ED1.PARENT_ID = ED2.ID
WHERE (ED1.GENOTYPE & ED2.GENOTYPE = ED2.GENOTYPE)
ORDER BY ED1.ID

여기서 처음으로 SELF JOIN을 배웠다.

SELF JOIN은 무엇일까? 이름에서 짐작 할 수 있듯이 자기 자신을 참조하는 JOIN 기법이다. 

1. SELF JOIN이란?

SELF JOIN은 같은 테이블을 두 번 사용하여 서로 다른 행을 조인하는 방식이야.

  • 일반적으로 "상사-직원 관계", "부모-자식 관계" 같은 계층적 데이터에서 많이 사용된다
  • 같은 테이블을 e1, e2 처럼 **별칭(Alias)**을 사용해서 구별해야 한다.
  •  

GPT에게 물어본 답변이다. 내가 실수 한 부분은 FROM절이다. JOIN은 FROM절을 기준으로 매칭을 한다. 기존 테이블을 두고 오른쪽에 JOIN하는 테이블을 매칭해서 붙이는 형태다. 난 어짜피 합쳐지면 그만 아님? 심정으로 아무렇게나 막 같다 붙였는데 여기서는 신중하게 합쳐야 했다. 

문제로 들어가 보자. 문제에서 JOIN ECOLI_DATA ED2 ON ED1.PARENT_ID = ED2.ID 구문이 있다. ED1의 PARENT_ID와 ED2 ID가 같은 행을 찾아서 매칭한다. 그러면 기존 ED1 테이블에 ID가 부모인 것들이 찾아져서 매칭이 된다.

 

SQL 대장균 문제는 참 어렵다! 그래도 SELF JOIN을 알아서 너무 좋다.