문제 설명
다음은 식당의 정보를 담은
REST_INFO 테이블과 식당의 리뷰 정보를 담은 REST_REVIEW 테이블입니다. REST_INFO 테이블은 다음과 같으며 REST_ID, REST_NAME, FOOD_TYPE, VIEWS, FAVORITES, PARKING_LOT, ADDRESS, TEL은 식당 ID, 식당 이름, 음식 종류, 조회수, 즐겨찾기수, 주차장 유무, 주소, 전화번호를 의미합니다.다음은 종합병원에 속한 의사 정보를 담은
DOCTOR 테이블입니다. DOCTOR 테이블은 다음과 같으며 DR_NAME, DR_ID, LCNS_NO, HIRE_YMD, MCDP_CD, TLNO는 각각 의사이름, 의사ID, 면허번호, 고용일자, 진료과코드, 전화번호를 나타냅니다.Column name | Type | Nullable |
DR_NAME | VARCHAR(20) | FALSE |
DR_ID | VARCHAR(10) | FALSE |
LCNS_NO | VARCHAR(30) | FALSE |
HIRE_YMD | DATE | FALSE |
MCDP_CD | VARCHAR(6) | TRUE |
TLNO | VARCHAR(50) | TRUE |
문제
DOCTOR 테이블에서 진료과가 흉부외과(CS)이거나 일반외과(GS)인 의사의 이름, 의사ID, 진료과, 고용일자를 조회하는 SQL문을 작성해주세요. 이때 결과는 고용일자를 기준으로 내림차순 정렬하고, 고용일자가 같다면 이름을 기준으로 오름차순 정렬해주세요.정답 코드
-- 코드를 입력하세요
-- SELECT * from doctor;
-- 1. 해당 테이블에서 흉부외과(CS), 일반외과(GS)
-- 2. 의사이름, 의사ID, 진료과, 고용일자 조회
-- 3. 고용일자 기준으로 내림차순
-- 고용일자 같을 때, 이름 기준 오름차순
select dr_name 의사이름, dr_id ID, mcdp_cd 진료과, date_format(hire_ymd, '%Y-%m-%d') 고용일자
from doctor
where mcdp_cd = 'CS' or mcdp_cd = 'GS'
order by hire_ymd desc, dr_name asc;✅핵심코드 살펴보기
date_format()
날짜포맷을 작성해야 하는 이유.
정렬이나 연산에 영향을 미치기 때문이다. 문자열로 변환될 때 오류를 발생할 수 있음!
이것때문에 계속 틀렸으니 트러블슈팅에 기재하자^^..
where ~ or ~
~거나 ~거나 와 같은 두 가지 이상의 조건을 찾을 때 사용할 수 있다.
문제를 풀 때 in( ~ , ~ ) 문법(축약형)을 사용했으나 풀리지 않음.
이 문제는 특정 DBMS의 최적화 방식의 차이 혹은 데이터 타입의 문제, null값 처리 방식의 차이 때문일 수 있는데, 같은 타입의 값을 사용했기 때문에 DBMS의 최적화 방식의 차이 혹은 null값 처리 방식의 차이로 인해 발생한 문제인 것 같아보인다. 보다 정확한 연산을 위해 or을 사용하는 편이 좋겠다.
desc / asc
내림차순, 오름차순 정렬.
defalt는 오름차순이기 때문에 오름차순 단독으로 필요할 시 생략 가능하다.
Share article