PRACTICE/SQL

[MySQL] 2단계 36. 부모의 형질을 모두 가지는 대장균 찾기

j1ngerhead 2025. 1. 7. 01:28

 

문제 링크

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

SELECT 
    C.ID AS ID,
    C.GENOTYPE AS GENOTYPE,
    P.GENOTYPE AS PARENT_GENOTYPE
FROM 
    ECOLI_DATA AS C
JOIN 
    ECOLI_DATA AS P 
ON 
    C.PARENT_ID = P.ID
WHERE 
    (C.GENOTYPE & P.GENOTYPE) = P.GENOTYPE
ORDER BY 
    C.ID;
컬럼 선택


C.ID는 자식 대장균의 ID,

C.GENOTYPE은 자식 대장균의 형질,

P.GENOTYPE은 부모 대장균의 형질이다.

자기 조인


ECOLI_DATA AS C는 자식 대장균

ECOLI_DATA AS P는 부모 대장균
ON C.PARENT_ID = P.ID로 조인하여 자식과 부모 대장균을 연결한다.

형질 보유 여부 확인

 

(C.GENOTYPE & P.GENOTYPE) = P.GENOTYPE 조건을 사용하여

자식 대장균이 부모의 모든 형질을 보유했는지 확인한다.

정렬


최종 결과는 C.ID에 대해 오름차순으로 정렬한다.

💡 자기 조인 (=자기 참조 조인) → 셀프조인 

 

동일한 테이블을 두 번 사용하여 각 행을 서로 조합하는 방식이다.
C는 자식 대장균을 나타내고, P는 부모 대장균을 나타낸다.
여기서 C와 P는 모두 ECOLI_DATA 테이블의 별칭(alias)이다.

조인 조건 추가 설명

 

ON C.PARENT_ID = P.ID
1. C.PARENT_ID

자식 대장균의 PARENT_ID는 해당 대장균이 어디에서 분화되었는지를 나타낸다. 
즉, 자식 대장균이 속한 부모 대장균의 ID를 담고 있다.
2. P.ID

부모 대장균의 ID이다. 
이 값은 부모 대장균의 고유 식별자로, 해당 대장균을 식별하는데 사용된다.

이 조인 조건의 의미는 
"C 테이블(자식 대장균)의 부모 ID가 P 테이블(부모 대장균)의 ID와 같으면, 
이 두 대장균이 부모-자식 관계임을 의미한다"는 것이다.

ex ) ECOLI_DATA 테이블
ID  |   PARENT_ID  |  GENOTYPE
1                     NULL                     1
2                             1                    1
3                             1                    3
4                             2                    2

여기서 자식 대장균 ID 2와 3은 부모 대장균 ID 1에 속하고, 

자식 대장균 ID 4는 부모 대장균 ID 2에 속한다.

이 테이블을 자기 조인하면
자식 대장균 ID 2와 부모 대장균 ID 1이 연결되고,
자식 대장균 ID 3과 부모 대장균 ID 1이 연결되고,
자식 대장균 ID 4와 부모 대장균 ID 2가 연결된다.

이 조인을 통해 각 자식 대장균이 어떤 부모 대장균에서 분화되었는지를 파악할 수 있다. 

320x100