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 연산자는 정말 다른 방법이 도저히 없는 경우를 제외하고는 사용하지 않는 것이 바람직.
'MySQL' 카테고리의 다른 글
| [해커랭크] [SQL] The PADs (1) | 2023.01.30 |
|---|---|
| [leetcode] [MySQL] 176. Second Highest Salary (1) | 2022.12.27 |
| [oracle] [mysql] group by 시 유의사항 (0) | 2022.12.11 |
| [프로그래머스 ] [sql] lv1. 12세 이하인 여자 환자 목록 출력하기 (1) | 2022.12.08 |
| [MYSQL], [ORACLE] CASE WHEN 여러개 사용하기 (0) | 2022.11.24 |