본문 바로가기
프로그래머스/SQL

ORACLE 코테 준비 정리

by 몰라닉네임 2023. 10. 21.

 

SELECT 문의 실행 순서

 

FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY 순으로 실행

1. FROM  대상 테이블 참조
2. WHERE   조건
3. GROUP BY: 특정 컬럼을 기준으로 그룹화합니다. (행들을 소그룹화)
4. HAVING: 그룹에 대한 조건절, 그룹 중 조건에 맞는 그룹만 남깁니다.
5. SELECT 질의/출력
6. ORDER BY 데이터 정렬

 

 

내림차순 DESC , 오르차순 ASC (DEFAULT)

ASC (오름차순) : Default 알파벳순 A-Z
DESC(내림차순) : 알파벳순 Z-A
여러개의 컬럼으로 정렬이 필요할 경우 컬럼을 순서대로 기술하면 된다.

 

 

TO_CHAR(변수, 형식)

날짜형과 숫자형 데이터를 문자형으로 변환하여 출력
SELECT TO_CHAR(SYSDATE, 형태),
       TO_CHAR(숫자, 형태),
 FROM 테이블;
SELECT SYSDATE
, TO_CHAR(SYSDATE, 'YYYYMMDD') AS 형태1
, TO_CHAR(SYSDATE, 'YYYY-MM-DD') AS 형태2
, TO_CHAR(SYSDATE, 'YYYY-MM-DD') AS 형태3
, TO_CHAR(SYSDATE, 'YYYYMMDD HH24:MI:SS') AS 형태4
FROM DUAL;

참고 문제 : 조건에 부합하는 중고거래 댓글 조회하기 LV1

 

 

ROUND(N, 반올림 할 위치)

--아무것도 없으면 소수점 첫째 자리에서 반올림 
SELECT ROUND(57.2742) FROM DUAL; -- 57
SELECT ROUND(57.8742) FROM DUAL; -- 58
--0를 적으면 소수점 첫째 자리에서 반올림
SELECT ROUND(57.2742, 0) FROM DUAL; --57
--2를 적으면 소수점 셋째 자리에서 반올림
SELECT ROUND(57.2742, 2) FROM DUAL; --57.27
--정수 반올림
SELECT ROUND(6757.2742, -1) FROM DUAL; --6760
SELECT ROUND(6757.2742, -3) FROM DUAL; --7000

평균 요금 구하고 소수 첫번 째 자리에서 반올림

SELECT ROUND(AVG(DAILY_FEE)) AS AVERAGE_FEE
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE = 'SUV';

 

 

NVL()함수

NVL (값, '지정값')

값이 null 인 경우, 지정 값을 출력하고 그렇지 않으면 원래 값 출력 

 

 

SELECT PT_NAME, PT_NO, GEND_CD, AGE, NVL(TLNO,'NONE') AS TLNO
FROM PATIENT 
WHERE GEND_CD = 'W' AND AGE <= 12
ORDER BY AGE DESC, PT_NAME ASC;

 

참고 문제 12세 이하인 여자 환자 목록 출력하기 ( https://school.programmers.co.kr/learn/courses/30/lessons/132201 )

 


SUM, MAX, MIN

 

ROWNUM

특정 개수의 행만 조회하기 

 

SELECT DATETIME AS 시간 
FROM (SELECT DATETIME FROM ANIMAL_INS  ORDER BY DATETIME DESC)
WHERE ROWNUM<2;

 

참고 문제 (최대값 구하기) : https://school.programmers.co.kr/learn/courses/30/lessons/59415?language=oracle

 

 

Distinct 

중복 제거! 
select count(distinct name) 
from animal_ins

기본적으로 집계함수(Count, Sum..등)는 NULL 값에 대해 처리하지 않는다

 


GROUP BY

가격대별 상품 개수 구하기 

그리고 LEVEL 3~4는 JOIN 풀어보고 다시  다음에 풀기 

.


ISNULL

유형 모음

https://donotknowwhat.tistory.com/manage/newpost/?type=post&returnURL=%2Fmanage%2Fposts%2F

 

NVL(값, '지정값')

값이 null 인 경우, 지정 값을 출력하고 그렇지 않으면 원래 값 출력 

 

 

IS NULL

NULL  인 값 찾기

 

WHERE 컬럼 IS NULL 

.


JOIN

참고

https://donotknowwhat.tistory.com/153


STRING, DATE

https://donotknowwhat.tistory.com/154

 

CASE WHEN

SELECT ename
     , deptno
     , CASE WHEN deptno = '1' THEN 'seoul'
            WHEN deptno = '2' THEN 'busan'
            ELSE 'Unknown'
       END AS loc_name
  FROM emp
 WHERE job = 'MANAGER'

END AS 컬럼명

where 절 안에서도 사용 가능하다.

 

다시 풀어보기: 자동차 대여 기록에서 장기/단기 대여 구분하기 https://school.programmers.co.kr/learn/courses/30/lessons/151138

 

 

 날짜 계산 ORACLE

종료일 - 시작일 +1 

 

 

 ROUND 함수

ROUND(DATE, FORMAT)
ROUND(192.283) -> 192
ROUND(192.283, 2) -> 192.28
ROUND(192.283, 1) -> 192.3

 

 

SUBSTR 

오라클 문자열 자르는 방법이다

 

SUBSTR(문자열, 시작위치)
SUBSTR(문자열, 시작위치, 길이)

  * 시작 위치는 추출 시작 자리 위치, 추출할 길이

SELECT SUBSTR('ABCDEFGH',4) "Substring" FROM DUAL;

--결과 : DEFGH

SELECT SUBSTR('ABCDEFGH',-4) "Substring" FROM DUAL;

--결과 : EFGH


--길이를 지정한 경우
SELECT SUBSTR('ABCDEFGH',4,2) "Substring" FROM DUAL;

--결과 : DE

SELECT SUBSTR('ABCDEFGH',4,0) "Substring" FROM DUAL;

--결과 : NULL

SELECT SUBSTR('ABCDEFGH',-4,2) "Substring" FROM DUAL;

--결과 : EF

SELECT SUBSTR('ABCDEFGH',-4,-1) "Substring" FROM DUAL;

--결과 : NULL