본문 바로가기

MySQL

프로그래머스 [SQL] Lv1. 흉부외과 또는 일반외과 의사 목록 출력하기

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

 

프로그래머스

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

programmers.co.kr

문제| DOCTOR테이블에서 진료과가 흉부외과(CS)이거나 일반외과(GS)인 의사의 이름, 의사ID, 진료과, 고용일자를 조회하는 SQL문을 작성해주세요. 이때 결과는 고용일자를 기준으로 내림차순 정렬하고, 고용일자가 같다면 이름을 기준으로 오름차순 정렬해주세요.

 

[1] MySQL

#MYSQL
SELECT DR_NAME
       ,DR_ID
       ,MCDP_CD
       ,DATE_FORMAT(HIRE_YMD,'%Y-%m-%d') AS "HIRE_YMD" --날짜 출력 형식 
FROM DOCTOR
WHERE MCDP_CD IN ('CS','GS')
ORDER BY HIRE_YMD DESC,DR_NAME ASC

[2] Oracle

#ORACLE
SELECT DR_NAME
      ,DR_ID
      ,MCDP_CD
      ,TO_CHAR(HIRE_YMD,'YYYY-MM-DD') AS "HIRE_YMD" -- 날짜 출력 형식
FROM DOCTOR
WHERE MCDP_CD IN ('CS','GS')
ORDER BY HIRE_YMD DESC,DR_NAME ASC

메모1 

[Oracle]

TO_CHAR(데이터, 출력형식) : 숫자 or 날짜 → 문자

TO_DATE(데이터, 날짜형식) : 문자 → 날짜

 

[MySQL]

DATE_FORMAT(날짜데이터, 출력형식) : 날짜 → 문자 

  DATE_FORMAT(HIRE_YMD, '%Y-%M-%D') 로 출력하면 맨앞은 대문자로 출력 

STR_TO_DATE(문자, 날짜 출력 형식) : 문자 → 날짜

 

메모2

OR 보다 IN을 쓰는 게 더 좋은 이유

출처 : https://kchanguk.tistory.com/119

 

SQL IN과 OR의 비교

OR 어떠한 논리합 관계도 표현이 가능합니다. IN 하나의 컬럼이 여러개의 =조건을 가지는 경우에만 가능합니다. IN -> OR(가능) IN SELECT * FROM TAB1 WHERE COL IN (1, 5, 7)OR SELECT * FROM TAB1 WHERE (COL = 1 OR COL = 5

kchanguk.tistory.com

OR : 어떠한 논리합 관계도 가능 

IN : 하나의 컬럼이 여러개의 = 조건을 가지는 경우만 가능

 

IN -> OR(가능)

SELECT *
FROM TAB1
WHERE COL IN (1, 5, 7)

OR

SELECT *
FROM TAB1
WHERE (COL = 1 OR COL = 5 OR COL = 7)

OR -> IN(불가능)

SELECT *
FROM TAB1
WHERE (COL1 = 1 OR COL = 2 OR NAME LIKE '3%')

IN을 사용할 수 있는 경우라면 OR보다 IN을 사용하는 것이 좋다!

IN은 경우에 따라서 서브쿼리를 이용하여 보다 유연한 확장이 가능하다.

IN은 반드시 하나의 컬럼이 비교되어야 하지만 OR는 여러 개의 컬럼이 올 수 있으므로 나중에 인덱스 구성에 대한 전략을 수립할 때도 IN이 유리하다.

그리고 IN절의 경우에는 인덱스를 이용해서 조건을 검색할 수 있지만, OR은 인덱스를 이용하지 못하다.

OR 연산자는 정말 다른 방법이 도저히 없는 경우를 제외하고는 사용하지 않는 것이 바람직.