ECOLI_DATA 테이블에는 실험실에서 배양한 대장균의 정보가 들어 있습니다. 각 대장균은 GENOTYPE이라는 형질 정보를 갖고 있으며, 자식 개체는 부모의 ID(PARENT_ID)를 참조합니다.
각 개체는 최대 4개의 형질(1~4)을 보유할 수 있으며, 이는 이진수 형태로
GENOTYPE컬럼에 저장되어 있습니다.
목표:
부모의 형질을 모두 보유한 자식 개체의 ID, GENOTYPE, 부모의 GENOTYPE을 출력합니다.
결과는 ID 오름차순 정렬로 출력합니다.
| 컬럼명 | 설명 |
|---|---|
| ID | 대장균 고유 ID |
| PARENT_ID | 부모 대장균의 ID (NULL인 경우 최초 개체) |
| GENOTYPE | 형질 정보 (정수, 이진수로 해석 가능) |
자식의 GENOTYPE이 부모의 GENOTYPE을 모두 포함하는지 판단하려면
한 줄에서 자식과 부모 정보를 함께 가져와야 함.
따라서 ECOLI_DATA 테이블을 자기 자신과 JOIN해야 함.
FROM ECOLI_DATA c
JOIN ECOLI_DATA p ON c.PARENT_ID = p.ID
c: 자식 개체 (child)p: 부모 개체 (parent)WHERE (c.GENOTYPE & p.GENOTYPE) = p.GENOTYPE
&: 비트 AND 연산자자식 AND 부모 = 부모 조건이 성립예:
3 (011)7 (111)111 & 011 = 011 ⇒ 조건 만족SELECT
c.ID,
c.GENOTYPE,
p.GENOTYPE AS PARENT_GENOTYPE
FROM ECOLI_DATA c
JOIN ECOLI_DATA p ON c.PARENT_ID = p.ID
WHERE (c.GENOTYPE & p.GENOTYPE) = p.GENOTYPE
ORDER BY c.ID;
| ID | GENOTYPE | PARENT_GENOTYPE |
|---|---|---|
| 2 | 1 | 1 |
| 3 | 3 | 1 |
| 7 | 5 | 1 |
| 8 | 13 | 5 |
SQL에서는 같은 테이블이라도 두 개체 간 값을 비교하려면
JOIN을 통해 두 줄을 하나의 줄로 합쳐야 합니다.
JOIN ECOLI_DATA p ON c.PARENT_ID = p.ID
c는 자식 개체p는 부모 개체