변환함수
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 |