*날짜 데이터는 문자 자료형의 특징과 수치 자료형의 특징 모두 가지고 있다.
*날짜 데이터는 산술 연산을 했을 때 일(day)로 계산한다.
[날짜 관련 함수]
| SYSDATE | 현재 날짜와 시각 출력한다. |
| MONTHS_BETWEEN(d1,d2) | 날짜 d1과 d2 사이의 기간이 몇 개월인지 반환한다. |
| ADD_MONTHS(d1,m1) | d1에 m1개월을 더한 날짜 계산 |
| LAST_DAY(d) | 날짜 d가 속한 달의 마지막 날짜를 반환한다. |
| NEXT_DAY(d,'요일') | 날짜 d를 기준으로 다음 첫째 주 중에서 지정한 '요일'의 날짜를 반환한다. (1= 일요일) |
--select now() --ㅡmysql
--날짜 데이터는문자자료형의 특징과 수치자료형의 특징 모두 가지고 있다.
--[SYSDATE] : 현재 날짜와 시각 출력
select sysdate
from dual
select sysdate+2 --2일을 더한다.
from dual
select sysdate -2
from dual
select sysdate +100
from dual
--날짜 데이터는 산술연산을 했을때 일(day)로 계산한다.
select empno,ename,hiredate,trunc(sysdate - hiredate,0)
from emp
--------------------------------------------------
--[MONTHS_BETWEEN] : 날짜와 날짜 사이의 개월 계산.
select empno, ename , hiredate,trunc(months_between(sysdate,hiredate),0)
from emp
--------------------------------------------------
--[ADD_MONTHS] : 날짜에 개월을 더한 날짜 계산.
select sysdate , add_months(sysdate,4)
from dual
select empno,ename,hiredate,add_months(hiredate,6)
from emp
--------------------------------------------------
--[LAST_DAY] : 날짜 d가 속한 달의 마지막 날짜를 반환한다.
select sysdate, last_day(sysdate)
from dual
select empno,ename,hiredate , last_day(hiredate)
from emp
--------------------------------------------------
--[NEXT_DAY] :날짜 후 오는 요일의 날짜 계산
--1은 일요일
select sysdate, next_day(sysdate,3)
from dual
[형변환 함수]
| TO_CHAR ( 숫자나 날짜 ,문자로 변환) | 숫자나 날짜를 주어진 문자열 타입으로 변환한다. |
| TO_NUMBER(문자열, 숫자로 변환) | 문자열을 숫자 타입으로 변환한다. |
| TO_DATE(문자열, 날짜 형식) | 문자열을 날짜 형식으로 변환한다. |
--[형변환 함수]
select '3'+5
--select to_number('3')+5 --업데이트되면서 자동 형변환됨 외울필요X
from dual
--[TO_CHAR] :날짜나 숫자형을 문자로 변환
select sysdate - to_date('2022-12-02','yyyy-mm-dd')
from dual
select sysdate, to_char(sysdate,'mm/dd/yy')
from dual
--12/14/22
[NVL(nullvalue) : NULL에 대한 대처 값]
| NVL(표현식1, 표현식2) | 표현식 1의 결과값이 NULL이면 표현식 2의 값을 반환 |
--[nvl(데이터, 문자)] : nullvalue :null에 대한 대처값
select empno,ename,hiredate,sal,sal *12 ,comm,sal*12+nvl(comm,0)
from emp
select empno, ename,nvl(to_char(mgr),'CEO')as mgr
from emp
desc emp
[DECODE, CASE 함수 : C언어의 else if문과 같은 함수]
| DECODE (데이터, 값, (참)표현식1, (거짓)표현식2) | 데이터의 값이 참이면 표현식1을 수행한다. |
| 다중 DECODE( 데이터, 값1 , (참)표현식1, 값2, (참)표현식2, 거짓(표현식1) | 데이터의 값1이 참이면 표현식 1을 수행하고 거짓이면 데이터의 값2가 참인지 확인하고 참이면 표현식 2를 수행한다. |
| CASE WHEN 조건1 THEN 결과 1 WHEN 조건 2 THEN 결과2 ELSE 결과 N END |
조건 1이 참이면 결과 1을 수행하고 조건 2가 참이면 결과 2를 수행한다. 참이 없으면 결과 N을 수행한다. |
--[DECODE 함수: C언어의 else if 문과 같은 함수]]
--(데이터, 값,조건이 참, 거짓)
--다중 조건 ( 데이터, 값 , 조건 참, 값, 조건참,값,조건참)
select *
from tab
select empno, ename, hiredate,deptno,
decode(deptno,10,'ACCOUNTING',20,'RESEARCH',30,'SALES',40,'OPERATIONS')as dname
from emp
--사원의 번호와 직무 이름, 급여 출력
--직무가 매니저이면 현재급여 +15%,세일즈이면 5% 급여 인상
select empno,job,sal,
decode(job,'SALESMAN',sal*1.05,'MANAGER',sal*1.15,sal) as sal2
from emp
--[CASE END]
select *from dept
select empno, ename, deptno,
case
when deptno = 10 then 'ACCOUNTING'
when deptno = 20 then 'RESEARCH'
when deptno = 30 then 'SALES'
when deptno = 40 then 'OPERATIONS'
end as dname
from emp
select empno,ename,job,sal,
case
when job = 'SALESMAN' then sal*1.05
when job = 'MANAGER' then sal*1.15
else sal
end as sal2
from emp
[그룹 함수 = 통계 함수 ] // 여러 개의 데이터를 통해 결과가 하나만 나온다.
**일반컴럼은 일반 칼럼끼리/ 그룹 칼럼은 그룹 칼럼끼리 나열할 수 있다.
ㄴ 일반 칼럼과 그룹 칼럼은 같이 출력될 수 없음! (1대1 매칭이 되지 않기 때문에)
| COUNT(*) | NULL 값을 포함한 행의 개수를 출력한다. |
| COUNT(표현식) | 표현식의 행의 개수를 출력 (NULL값 제외) |
| SUM(표현식) | 표현식의 합계를 출력( NULL값 제외) |
| AVG (표현식) | 표현식의 평균을 출력 (NULL 값 제외) |
| MIN(표현식) | 표현식의 최대값 출력(문자, 날짜 데이터 타입도 가능) |
| MAX(표현식) | 표현식의 최소값 출력(문자, 날짜, 데이터 타입도 가능) |
--[그룹함수=통계 함수] 여러개에 대한 데이터를 통해 결과가 **하나만** 나온다.
select sum(sal) from emp
select avg(sal) from emp
select max(sal),ename from emp --에러
--그룹컬럼은 그룹걸럼끼리/ 일반컬럼은 일반컬럼끼리 나열.
--일반컬럼과 그룹컬럼은 같이 출력될 수 없다.
select max(sal),min(sal) from emp
select max(ename), min(ename), min(hiredate),max(hiredate)
from emp
select count(*)--low의 개수
from emp
select count (comm) from emp
--그룹 함수에서 null제외하고 연산.
select avg(sal) from emp
where deptno =10
--직무의 종류 개수를 출력
select count(distinct job)
from emp
---실습
select count(*)as "total",
sum(decode (substr(hiredate,1,4),1980,1,0))as "1980",
sum(decode(to_char(hiredate,'yyyy'),1981,1,0)) as "1981",
count(decode(to_char(hiredate,'yyyy'),1982,1))as "1982"
from emp
select /from / where/ group by /having /order by
실행 순서 : from > where> group by > having > order by > select
[GROUP BY절과 HAVING 절]
group by : 특정데이터를 그룹화해서 그룹 함수를 만들수 있음
having : group by 절에 의해 생성된 그룹을 대상으로 특정 조건에 맞는 그룹을 선택할 때 사용
일반 칼럼 - where
그룹 칼럼 - having
--[GROUP BY 절] select sum(sal) from emp where deptno = 20 select sum(sal),deptno from emp group by deptno --부서별 최저 급여와 최고 급여 select min(sal),max(sal),deptno from emp group by deptno --부서별 전체 사원수와 커미션을 받는 사원수 출력 select deptno,count(*),count(comm) from emp group by deptno --select 6개의절: select /from / where/ group by /having /order by --실행순서 from > where> group by > having > order by > select --[HAVING 절] 조건: 일반 컬럼 - where/ 그룹 컬럼- having select deptno, avg(sal) from emp group by deptno having avg(sal)>=2000 select deptno ,avg(sal) from emp where sal>=1000 group by deptno having avg(sal)>=2000 order by deptno asc
'개발자 > 백엔드 웹 개발자 과정(국비)' 카테고리의 다른 글
| [DB] JOIN,서브쿼리 (0) | 2022.12.15 |
|---|---|
| [DB]정리 (0) | 2022.12.14 |
| [DB]특정 데이터 추출,SQL함수 (0) | 2022.12.13 |
| [DB] 데이터 베이스,SQL,물리/논리 (0) | 2022.12.12 |
| 2022년 12월 09일 _ 23회차 (종속 Thread,독립 Thread,동기화) (0) | 2022.12.09 |