본문 바로가기

SQL

SELECT 연습(3)

조건에 맞는 개발자 찾기

예를 들어 어떤 개발자의 SKILL_CODE가 400 (=b'110010000')이라면, 이는 SKILLCODES 테이블에서 CODE가 256 (=b'100000000'), 128 (=b'10000000'), 16 (=b'10000') 에 해당하는 스킬을 가졌다는 것을 의미합니다.

-> 이 부분에서 알아야 할 것은 비트 연산자 사용이다!

 

  • AND 연산자(&)는 두 수의 각 비트를 비교하여, 두 비트 모두 1일 경우 결과가 1
    • 개발자의 SKILL_CODE가 400 (b'110010000')이고, Python의 CODE가 256 (b'100000000')이라면:
       
      400 & 256 = 256 (b'100000000')
      결과가 0이 아니기 때문에, 해당 개발자는 Python 스킬을 가지고 있는 것
select ID, EMAIL, FIRST_NAME, LAST_NAME
from DEVELOPERS
where (0 < SKILL_CODE & (select CODE from SKILLCODES where name = 'Python')) 
        or (0 < SKILL_CODE & (select CODE from SKILLCODES where name = 'C#'))
order by ID;

 

 

 

특정 물고기를 잡은 총 수 구하기

select count(*) FISH_COUNT
from 
(select f.FISH_TYPE, n.FISH_NAME
from FISH_INFO f
left join FISH_NAME_INFO n on n.FISH_TYPE = f.FISH_TYPE) a
where FISH_NAME = 'BASS' or FISH_NAME = 'SNAPPER'

 

 

대장균들의 자식의 수 구하기

부모컬럼에 자식의 정보까지 합쳐서 결과를 내서 join을 수행하면 이렇게 부모가 자식의 갯수만큼 생성이 된다

select e.ID, coalesce(count(d.ID), 0) CHILD_COUNT
from ECOLI_DATA e
left join ECOLI_DATA d on e.ID = d.PARENT_ID #부모컬럼에 자식의 정보를 붙여서 테이블 생성
group by e.ID
order by 1

 

대장균의 크기에 따라 분류하기 1

select ID, 
        case when SIZE_OF_COLONY <= 100 then 'LOW'
            when SIZE_OF_COLONY > 100 and SIZE_OF_COLONY <= 1000 then 'MEDIUM'
            when SIZE_OF_COLONY > 1000 then 'HIGH' end SIZE
from ECOLI_DATA

 

 

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

부모의 형질을 모두 보유한 대장균

-> 이므로 조건은 p.GENOTYPE = (c.GENOTYPE & p.GENOTYPE) 이렇게 가야 함

-> 자식의 형질이 부모의 형질보다 크거나 같아야 하기 때문에 저렇게 식을 줌

select c.ID, c.GENOTYPE, p.GENOTYPE PARENT_GENOTYPE
from ECOLI_DATA c #자식
    left join ECOLI_DATA p on c.PARENT_ID = p.ID
where p.GENOTYPE = (c.GENOTYPE & p.GENOTYPE) 
order by 1

 

'SQL' 카테고리의 다른 글

SQL 총연습 (1)  (1) 2024.12.24
SELECT 연습(4)  (0) 2024.12.20
SELECT 연습(2)  (2) 2024.12.18
SELECT 연습(1)  (0) 2024.12.17
SQL 실전! 실제 DB에서 연습해요(5) - Lv5. 예산이 가장 큰 프로젝트는?  (1) 2024.12.10