변환함수
TO_CHAR : 숫자->문자,날짜->문자
TO_NUMBER : 문자->숫자
TO_DATE : 문자->날짜

TO_CHAR
날짜 -> 문자로 변환
SELECT TO_CHAR(날짜,포맷문자) FROM dual;


숫자->문자 변환
실제 자리수와 일치
SELECT TO_CHAR(1234,9999) FROM dual;
SELECT TO_CHAR(1234,'9999') FROM dual;
SELECT TO_CHAR(1234,'0000') FROM dual;
##으로 출력 오류 발생
SELECT TO_CHAR(1234,0000) FROM dual;

자리수가 모자람->####
SELECT TO_CHAR(1234,999) FROM dual;
SELECT TO_CHAR(1234,'999') FROM dual;
SELECT TO_CHAR(1234,'000') FROM dual;

실제 자리수 보다 많은 자리수 지정
SELECT TO_CHAR(1234,99999) FROM dual;  -- 공백1234
SELECT TO_CHAR(1234,'99999') FROM dual; -- 공백1234
SELECT TO_CHAR(1234,'00000') FROM dual; -- 01234

소수점 자리
SELECT TO_CHAR(1234,9999.99) FROM dual; -- 1234.00
SELECT TO_CHAR(1234,'9999.99') FROM dual; -- 1234.00
SELECT TO_CHAR(1234,'0000.00') FROM dual; -- 1234.00

반올림해서 소수점 둘째자리까지 표시
SELECT TO_CHAR(25.897,'99.99') FROM dual; -- 25.90
인상된 급여를 소수점 첫째자리까지 표시
SELECT TO_CHAR(sal*1.15,'9,999.9') FROM emp;

통화표시
$
SELECT TO_CHAR(1234,'$0000') FROM dual; --$1234
지역통화 표시
SELECT TO_CHAR(1234,'L0000') FROM dual; -- \(원화)1234

TO_DATE
문자 -> 날짜
SELECT TO_DATE('22-10-31','YYYY-MM-DD') FROM dual;

TO_NUMBER
문자 -> 숫자
SELECT TO_NUMBER('100','999') FROM dual;
SELECT TO_NUMBER('100') FROM dual; --포맷 형식 생략 가능

일반 함수
NVL(value1,value2) : value1이 null이면 value2를 씀.    value1과 value2의 자료형이 일치
                     
NVL2(value1,value2,value3) : value1이 null인지 평가. null이면 value3 , null 아니면 value2. 자료형이 일치하지 않아도 됨

NULLIF(value1,value2) : 두개의 값이 일치하면 NULL, 두개의 값이 일치하지 않으면 value1

ex)
SELECT NULLIF(LENGTH(ename),LENGTH(job)) "NULLIF" FROM emp;                        

 


COALESCE(value1,value2,value3,....) : null값이 아닌 값을 사용
                                      (자료형 일치)
                                      

CASE 컬럼 WHEN 비교값 THEN 결과값
         WHEN        THEN
         WHEN        THEN
         (ELSE 결과값)
END



DECODE : 오라클 전용, = 비교만 가능
         DECODE(컬럼,비교값,반환값,
                    비교값,반환값,
                    비교값,반환값,
                    반환값)
FROM dual;
                    
ex)
SELECT ename,sal,job,
       DECODE(TRUNC(sal/1000),5,'A',
                              4,'A',
                              3,'B',
                              2,'C',
                              1,'D',
                              'F') "Grade"
FROM emp ORDER BY "Grade",sal DESC;                              

 

 

 


그룹함수
AVG() : NULL을 제외한 모든 값들의 평균을 반환, NULL값은 평균 계산에서 무시됨
SELECT ROUND(AVG(sal)) FROM dual;

 

 


COUNT() : NULL을 제외한 값을 가진 모든 레코드의 수를 반환.  COUNT(*) 형식을 사용하면 NULL도 계산에 포함
SELECT COUNT(*) FROM dual;

 

 


MAX() : 레코드 내에 있는 여러 값 중 가장 큰 값을 반환
SELECT MAX(sal) FROM dual;
SELECT MAX(ename) FROM emp;
SELECT MAX(hiredate) FROM emp;

 

 


MIN() : 레코드 내에 있는 여러 값 중 가장 작은 값을 반환
SELECT MIN(sal) FROM dual;

 


SUM() : 레코드들이 포함하고 있는 모든 값을 더하여 반환
SELECT SUM(sal) FROM 여미;

 

 


null값까지 카운트하고 싶을 경우
SELECT COUNT(NVL(sal,0)) FROM dual;

 

 


GROUP BY
SELECT절에 집합함수 적용시 개별 컬럼을 지정할 수 없다.
개별 컬럼을 지정할 경우에는 반드시 GROUP BY 절에 지정된 컬럼만 가능

ex)

SELECT deptno, MAX(sal) FROM emp GROUP BY deptno;
SELECT MAX(sal),MIN(sal),deptno FROM emp 
GROUP BY deptno ORDER BY deptno;


HAVING절 : 그룹 처리 결과를 제한하고자 할 때 HAVING절 사용
(WHERE절에는 집합함수를 사용해서 조건 체크할 수 없고 HAVING절에서 가능)
알리아스 사용X

[오류발생]
SELECT deptno,ROUND(AVG(sal)) FROM emp
WHERE ROUND(AVG(sal))>=2000
GROUP BY deptno;

[정상구문]
SELECT deptno,ROUND(AVG(sal)) FROM emp
GROUP BY deptno HAVING ROUND(AVG(sal))>=2000;


'ORACLE SQL' 카테고리의 다른 글

ORACLE SQL-기본문법6  (0) 2022.11.03
ORACLE SQL-기본문법5  (0) 2022.11.01
ORACLE SQL-기본문법3  (0) 2022.10.30
ORACLE SQL - 기본 문법2  (1) 2022.10.29
Oracle SQL- 기본문법  (0) 2022.10.28

+ Recent posts