본문 바로가기

DB/오라클

[oracle] 코딩테스트 대비

코딩 테스트 대비해서 정리

 

 

🤩주의🤩

답이 아무리 생각해도 맞는거 같을때

혹시 type 형이 일치하지는 않는지 확인!
(e.g.) date를 String으로 출력해서 틀리는 경우

 

 

 

 select 문의 별칭

select name 'qwe'  -- X 오류!
select name "qwe"  -- O
select name as qwe  -- O
select name as "qwe"  -- O
-- 별칭을 줄때는 큰 따옴표!

 

substr(문자열, 시작인덱스, 끝인덱스)
(시작인덱스는 포함 ,끝 인덱스는 포함x)

음수는 뒤에서부터

SELECT substr('012345',1,3)  -- 012
SELECT substr('012345',-3,2)  --  34

 

연결 연산자 -  ||

 

null  검색 - is null, is not null

 

in 연산자

 

like 연산자

% - 글자수 무관

_  - 한글자씩

 

order by

select 하는 컬럼으로 가능

select empno
from emp
order by 1

 

initcap

 

lower - upper

 

length

 

lpad - rpad

 

ltrim - rtrim

 

replace

 

round

 

trunc

 

mod

 

ceil

 

floor

 

power

 

숫자형 -> 문자형 변환

to_char(1234, '999999') -- 9 개수만큼 자리스

to_char(1234, '009999') -- 빈자리 0으로 채움

to_char(1234, '9999.99') 

to_char(1234, '999,999')

 

nvl

 

decode(name, 'min', ' 민찬', 'sm' , '상민', '누구냐 넌')

 name이 min 이면 민찬 sm 이면 상민 출력 else이면 누구냐 넌 출력

 

 

case 문

SELECT ORDER_ID, PRODUCT_ID, OUT_DATE,
    case when OUT_DATE <= to_date('2022-05-01','YYYY-MM-DD') then '출고완료'
         when OUT_DATE > to_date('2022-05-01','YYYY-MM-DD')  then '출고대기'
         else '출고미정' end as 출고여부
from FOOD_ORDER
order by 1

 

 

 

 

count sum avg  max min

 

Having 

그룹바이 다음에 조건문 또 쓸수있다고 보면됨

select USER_ID, product_id
from online_sale
group by user_id, product_id
having count(*)>1
order by 1,2 desc

 

join - inner-> 교집합?

from table1 a [inner] join table2 b on a.id=b.id

 

3개조인(ansi)

from appointment a join patient p
        on a.PT_NO=p.PT_NO
        join doctor d
        on a.MDDR_ID = d.DR_ID

 

 

Join

테이블 두개를 더해서 컬럼은 그대로고 행을 증가시키기 위해서 사용

컬럼이 일치해야한다
컬럼이 다를 경우 null as .. 을 이용한다

select to_char(SALES_DATE, 'YYYY-MM-DD') as SALES_DATE, PRODUCT_ID, null as USER_ID, SALES_AMOUNT
from OFFLINE_SALE 
where to_char(SALES_DATE, 'YYYY-MM') = '2022-03'

union all

select to_char(SALES_DATE, 'YYYY-MM-DD') as SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
from ONLINE_SALE 
where to_char(SALES_DATE, 'YYYY-MM') = '2022-03'

order by 1, PRODUCT_ID, USER_ID