코딩테스트 준비하다가 SQL 오라클 문법 중 너무 간단한건데 자꾸 헷깔리는게 있어 정리해보겠다.
우선, 들어가기 전에
나는 SQL은 문제를 꼼꼼하게 보지 않는 습관 때문에 오답률이 높다.
<12세 이하인 여자환자의 환자이름, 환자번호, 성별코드, 나이, 전화번호를 조회>
라고 했을 때, 12세 이하만 보고 '여자'를 못본다던가 그런 식
문제 꼼꼼하게 정확하게 읽기!!!!!!!!!!
Oracle에서 문자열 타입은 VARCHAR() 으로 나타내며, '' 작은 따옴표로 표기한다.
별칭
1. 한글은 as "" 큰따옴표
2. 영어는 그냥 as 영어
영어도 "" 큰따옴표 사용 ok
address LIKE '%경기도%'
LIKE 뒤에 문자열에는 '' 작은따옴표!
오라클에서는 mySQL과 달리 group by 뒤에 별칭을 사용하지 못한다.
SELECT substr(PRODUCT_CODE, 0, 2) as category
, count(product_id) as PRODUCTS
from PRODUCT
group by substr(PRODUCT_CODE, 0, 2)
order by 1
이렇게 전체를 쓰던지, 정 group by 뒤에 컬럼명을 쓰고 싶다면
SELECT category, count(product_id) as PRODUCTS
from (
SELECT substr(PRODUCT_CODE, 0, 2) as category
, product_id
from PRODUCT
)
group by category
order by 1
이렇게 컬럼이 그대로 return 되어야지만 컬럼으로 group by 가능
날짜는 그냥 아무생각 말고
to_char(date, 'YYYYMMDD')로 문자열로 바꾸어서 사용하기!!!!!!!!!!!!!!
기간은 date 기준
end_date - start_date +1 해주면 기간이 출력된다.
SUBSTR(str, 시작위치, 길이)
★ 주의할 점
1. 오라클에서는 문자열이 1부터 시작한다..... 진짜 욕나옴 $^%ㅅ!#%ㅋㅍ
2. 3번째 파라미터가 !!!길이!!! 이다
substr(address, 시작위치)
// 4부터 끝까지
substr(address, 시작위치, 길이)
// ★★★★★★★★주의해야 하는 부분이다★★★★★★★
// JAVA는 시작위치, 종료위치 인데 오라클은 시작위치, 길이.......
// 너무너무 헷깔림
JAVA와 동일하게
Floor(score) : 내림
Floor(score, 2) : 소숫점 2자리 까지!(= 3번째 자리에서 내림)
Round(score) : 반올림
Round(score, 2) : 소숫점 2자리 까지!(= 3번째 자리에서 반올림)
Ceil() : 올림
Trunc() : 소숫점 절사(버림)
※ TRUNC(NMB,-1)는 주로 금액 계산 시 1원 단위를 절사 할 때 사용 한다.
컬럼 이어붙이기
concat(id, name) // 아이디+이름 잇기
id || name || '입니다.' // ||도 이어붙이기 가능
안쓰니까 자꾸 까먹네..
answer like case when 조건 then '가%'
when 다른조건 then '나%'
else '다%' end "fee"
※ 주의할 점
7 이상 7프로
10 이상 10프로
이런 조건이 있을 때,
answer like case when a >= 7 then '7%'
when a >= 10 then '10%'
else '다%' end "fee"
이렇게 구현하면, 11은 10프로로 갈 것 같지만 첫번째 when 절에서 걸려서 7%가 되어버림
주의하기!!
★ 그리고 case when 절에서는 as 대신에 그냥 "" 큰따옴표로 별칭을 붙인다.
날짜를 문자열로 변환하면 월을 출력할 때, 01,04 이런식으로 출력하는데 이것을 1,4로 바꾸는 방법
to_number(to_char(date, 'MM'))