본문 바로가기
Computer/Algorithm_SQL

[Programmers] 흉부외과 또는 일반외과 의사 목록 출력하기 (Success)

by HJ0216 2023. 9. 10.
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

📝 Language: Oracle

 

1
2
3
4
5
6
7
8
9
10
  SELECT DR_NAME, 
         DR_ID, 
         MCDP_CD, 
         TO_CHAR(HIRE_YMD, 'YYYY-MM-DD') HIRE_YMD
    FROM DOCTOR
   WHERE MCDP_CD = 'CS' 
      OR MCDP_CD = 'GS'
ORDER BY HIRE_YMD DESC, 
         DR_NAME;
 
 

🙂 확인 사항

1. DOCTOR 테이블

2. 진료과가 흉부외과거나 일반외과

3. 의사 이름, 의사 ID, 진료과, 고용일자 조회

4. 고용일자 기준 내림차순 → 이름 기준 오름차순 정렬

 

😮  외의 풀이

1
2
3
4
5
6
7
8
9
  SELECT DR_NAME, 
         DR_ID, 
         MCDP_CD, 
         TO_CHAR(HIRE_YMD, 'YYYY-MM-DD') HIRE_YMD
    FROM DOCTOR
   WHERE MCDP_CD IN ('CS''GS'
ORDER BY HIRE_YMD DESC, 
         DR_NAME;
 
 

 

⭐ OR 보다는 IN을 사용
1. IN은 서비쿼리를 사용하여 보다 유연한 확장이 가능
2. IN은 반드시 하나의 컬럼이 비교되어야 하므로 나중에 인덱스 구성에 대한 전략을 수립할 때 유리
3. 옵티마이저는 복잡한 OR에 매우 취약

 

 

🔗 소스 코드
GitHub

 

📚 참고 자료

 

1. 논리합(OR, IN) 연산자의 이해 - [종료]대용량 데이터베이스 스터디 - 개발자, DBA가 함께 만들어

Added by 이신재, last edited by study.gurubee on 7월 18, 2011 AND vs. OR(IN) 엑세스 처리방법(OR는 분리), 처리범위(OR는 증가)에 있어 AND와 OR는 매우 큰 차이를 가진다. 이 장에서는 OR(IN)연산자의 정확한 활용방

wiki.gurubee.net