문제 링크
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가 연결된다.
이 조인을 통해 각 자식 대장균이 어떤 부모 대장균에서 분화되었는지를 파악할 수 있다.
'PRACTICE > SQL' 카테고리의 다른 글
[MySQL] 3단계 2. 조건별로 분류하여 주문상태 출력하기 (0) | 2025.01.08 |
---|---|
[MySQL] 3단계 1. 오랜 기간 보호한 동물(1) (0) | 2025.01.07 |
[MySQL] 2단계 35. 연도별 대장균 크기의 편차 구하기 (0) | 2025.01.05 |
[MySQL] 2단계 34. 조건에 맞는 개발자 찾기 (0) | 2025.01.04 |
[MySQL] 2단계 33. 조건에 맞는 사원 정보 조회하기 (0) | 2025.01.03 |