● 과제 09/04/24
** 함수 :좀더 강력한 질의문을 작성하기 위해서
1)오라클제공 내장함수
- 단일행함수
- 문자형함수:lower,upper,initcap,substr,instr,
lpad,rpad,ltrim,rtrim등
- 숫자형함수 :round,trunc,mod등
- 날짜형함수 :add_months,months_between,
next_day,last_day,sysdate등
- 형변환함수 : to_char,to_number,to_date등
- 기타 함수 :nvl,decode,case등
- 그룹행함수 :sum,count,max,min,avg등
2)사용자 함수 : pl/sql로 작성
** 단일행함수의 사용예
1.select문장에서
select round(72.15,1),round(72.15,-1),round(72.15,0)
from dual; ==>함수를 사용법,결과를 테스트하고자 할때
- select ename,sal,round(sal,-1)
from emp;
- select ename,sal,round(sal,-2),hiredate ==>표현에 관계되는 절
from emp
where round(sal,-2)>=1000; ==>행을 제한하는 조건절
2.그외문장에서
- update emp
set sal=round(sal,-1)
where ename='SCOTT';
문제1) EMP 테이블에서 scott의 사원번호,성명,담당업무(소문자로),부서번호를 출력하여라.
select empno,ename,lower(job),deptno
from emp
where lower(ename)='scott';
문제2) DEPT 테이블에서 모든 부서의 부서명,위치를 첫 글자들만 대문자로 변환하여 출력하여라.
select initcap(dname),initcap(loc)
from dept;
문제3) EMP 테이블에서 이름의 첫글자가 ‘K’ 보다 크고 ‘Y’보다 작은 사원의 사원번호, 이름, 업무, 급여, 부서번호를 출력하여라. 단 이름순으로 정렬하여라.
select ename,substr(ename,1,1),substr(ename,1),substr(ename,2,2)
from emp;
select empno,ename,job,sal,deptno
from emp
where substr(ename,1,1)>'K' and substr(ename,1,1)<'Y'
order by ename;
문제4) EMP 테이블에서 부서가 20번인 사원의 사원번호, 이름, 이름의 자릿수, 급여, 급여의 자릿수를 출력하여라.
select empno,ename,length(ename),sal,length(sal)
from emp
where deptno=20;
문제5) EMP 테이블에서 급여를 30으로 나눈 나머지를 구하여 출력하여라.
select ename,sal,mod(sal,30)
from emp;
** 오라클 날짜타입:date
- 반드시 값이 세기,년,월,일,시,분,초 7개의 값이 저장된다.
select * from nls_session_parameters; ==>현재 세션에 설정된 환경설정값들을 확인
alter session set nls_date_format='rrrr/mm/dd:hh24:mi:ss'; ==>현재 세션의 날짜표현방법을 이런패턴으로 바꿔라~
select * from emp;
alter session set nls_date_format='dd/mm/rr';
select * from emp
where hiredate >'81/01/01'; ==>?(에러)
alter session set nls_date_format='rr/mm/dd';
select * from emp
where hiredate >'81/01/01'; ==>?
- 오라클 날짜값은 표현하는 범위가 BC xxxx~ AD 9999까지 표현된다.
- 날짜 기본연산이 가능
날짜 - 숫자 ==>날짜
날짜 - 날짜 ==>day
날짜 + 숫자/24 ==>날짜
날짜 - 숫자/24
select sysdate,sysdate-to_date('2009/03/16','rrrr/mm/dd'),sysdate+20/24
from dual;
문제6) EMP 테이블에서 현재까지의 근무일수가 몇 주 몇 일인가를 출력하여라. 단 근무 일수가 많은 사람순으로 출력하여라.
select ename,hiredate,trunc(sysdate-hiredate) "총근무일수",trunc(trunc(sysdate-hiredate)/7) "총근무주수",trunc(mod((sysdate-hiredate),7)) "나머지일수"
from emp
order by 3 desc;
문제7) EMP 테이블에서 10번 부서원의 현재까지의 근무 월수를 계산하여 출력하여라.
select ename,hiredate,trunc(months_between(sysdate,hiredate))
from emp
where deptno=10
문제8) EMP 테이블에서 10번 부서원의 입사 일자로부터 5개월이 지난 후 날짜를 계산하여 출력하여라.
select ename,hiredate,add_months(hiredate,5)
from emp
where deptno=10;
문제9) EMP 테이블에서 10번 부서원의 입사 일자로부터 돌아오는 금요일을 계산하여 출력하여라.
select ename,hiredate,next_day(hiredate,6)
from emp
where deptno=10;
문제10) EMP 테이블에서 입사한 달의 근무 일수를 계산하여 출력하여라. 단 토요일과 일요일도 근무 일수에 포함한다.
select ename,hiredate,last_day(hiredate),last_day(hiredate)-hiredate
from emp;
** 형변환 :데이터타입이 변환
- 자동형변환 :오라클이 자동으로 변환
- 수동형변환 :개발자가 함수를 사용해서 변환
** 자동형변환의 예
create table test(
id number,
name varchar2(10));
desc test
select * from test;
insert into test(id,name)
values(1,10); ==>?(성공 : 숫자10을 자동으로 문자10으로 형변환시켜서 입력)
select * from test;
select ename+100 from emp; ==>?(에러)
select id+10,name+100 from test; ==>?(성공 : 문자 10을 자동으로 숫자10으로 변환시켜서 처리)
** 수동형변환
- to_char 함수 :날짜나 숫자를 문자로 변환하는 함수
날짜변환의 예
-현재의 세기,년,월,일,시,분,초정보및 요일정보를 확인
select sysdate,
to_char(sysdate,'rrrr/mm/dd:hh24:mi:ss:day')
from dual;
- rr과 yy의 차이점
rr : 년도가 0~49년도일 경우에는 현재세기로 인식하고, 50~99년도일 경우에는 이전세기로 인식
yy :무조건 현재세기
select * from nls_session_parameters;
==>현재 nls_date_format의 값이 rr/mm/dd로 설정되어 있음
select *
from emp
where hiredate >'81/01/01'; ==>결과1
alter session set nls_date_format='yy/mm/dd';
select *
from emp
where hiredate >'81/01/01'; ==>결과1과의 차이점
2)숫자변환의 예
emp테이블의 사원들의 급여를 돈의 단위처럼 표
- to_date함수 : 문자를 날짜로 변환시켜주는 함수
insert into emp(empno,ename,hiredate)
values(8000,'홍길동',to_date('10-12-2009:10','dd-mm-rrrr:hh24'));
select * from emp;
** DECODE/CASE함수
select ename,deptno,
decode(deptno,10,'10번부서',20,'20번부서',30,'30번부서','기타부서') "부서",
case when deptno=10 then '10번부서'
when deptno=20 then '20번 부서'
when deptno=30 then '30번 부서'
else '기타부서'
end "case문"
from emp;
SQL : RDB 조작하는 언어
1) SELECT : 조회
2) Create, Alter, Drop, Truncate ....
: DDL(Data Definition Language) - 생성, 수정, 삭제
3) Insert, Update, delete
: DML(Data Manipuation Language) - 데이터 입력, 수정, 삭제
4) Commit, Rollback, Savepoint
: TCL (Transaction Control Language) - 트랜잭션 종료 및 취소
5) Grant, Revoke
: DCL(Data Control Language) - 권한부여, 취소
Data dictionary table
= System table
= catalog table
ex) tab, nls_session_parameters, all_users, user_tab_columns
※ 왜(Why!!! Tell me Why! )!? 에 집중하라!!
실행순서 | Select 문 |
3) 1) 2) 4) |
Select => 검색 컬럼 From = > 테이블명 지정 Where = > 행을 제한하는 조건절 Order by 컬럼명 / 숫자 / 별칭 + [ ASC / DESC ] |
SELECT * FROM dual; dual 테이블은 함수 test를 위해서 오라클에서 제공하는 1행 1열의 테이블이다.
단일행함수
- SELECT ROUND(72.15, 1), ROUND(72.15, -1), ROUND(72.15, 0) FROM dual;
ROUND(72.15,1) ROUND(72.15,-1) ROUND(72.15,0)
-------------- --------------- --------------
72.2 70 72
- SELECT ename, sal, round(sal, -1) from emp;
ENAME SAL ROUND(SAL,-1)
---------- ---------- -------------
SMITH 800 800
ALLEN 1600 1600
WARD 1250 1250
JONES 2975 2980
MARTIN 1250 1250
BLAKE 2850 2850
CLARK 2450 2450
SCOTT 3000 3000
KING 5000 5000
TURNER 1500 1500
ADAMS 1100 1100
JAMES 950 950
FORD 3000 3000
MILLER 1300 1300
- SELECT ename, sal, round(sal, -1), hiredate FROM emp WHERE ROUND(sal, -1) >= 2000;
ENAME SAL ROUND(SAL,-1) HIREDATE
---------- ---------- ------------- --------
JONES 2975 2980 81/04/02
BLAKE 2850 2850 81/05/01
CLARK 2450 2450 81/06/09
SCOTT 3000 3000 87/04/19
KING 5000 5000 81/11/17
FORD 3000 3000 81/12/03
문제 1) EMP 테이블에서 scott의 사원번호, 성명, 담당업무(소문자로), 부서번호를 출력하여라.
- SELECT empno, ename, LOWER(job) "JOB" FROM emp WHERE ename = 'SCOTT'; //LOWER() 소문자 만들어줘라.
- SELECT empno, ename, LOWER(job) "JOB" FROM emp WHERE LOWER(ename) = 'scott'; // 요로코롬 해주는 게 나을듯. 이름 대소문자 구분할 필요 없음.
EMPNO ENAME LOWER(JOB
---------- ---------- ---------
7788 SCOTT analyst
문제 2) DEPT 테이블에서 모든 부서의 부서명, 위치를 첫 글자만 대문자로 변환하여 출력하여라.
- SELECT dname, INITCAP(loc) FROM dept; // 두 개 항목 모두를 변경하는 것이군요.
- SELECT INITCAP(dname), INITCAP(loc) FROM dept;
INITCAP(DNAME) INITCAP(LOC)
-------------- -------------
Accounting New York
Research Dallas
Sales Chicago
Operations Boston
문제 3) EMP 테이블에서 이름의 첫글자가 'K'보다 크고 'Y'보다 작은 사원의 사원번호, 이름, 업무, 급여, 부서번호를 출력하여라. 단, 이름순으로 정렬하여라.
- SELECT empno, ename, job, sal, deptno FROM emp WHERE ( SUBSTR(ename,1,1) > 'K' ) AND ( SUBSTR(ename,1,1) < 'Y' ) ORDER BY ename;
EMPNO ENAME JOB SAL DEPTNO
---------- ---------- --------- ---------- ----------
7654 MARTIN SALESMAN 1250 30
7934 MILLER CLERK 1300 10
7788 SCOTT ANALYST 3000 20
7369 SMITH CLERK 800 20
7844 TURNER SALESMAN 1500 30
7521 WARD SALESMAN 1250 30
- SELECT ename, substr(ename, 1), substr(ename, 1, 1), substr(ename, 2, 2) FROM emp;
SQL> SELECT ename, substr(ename, 1), substr(ename, 1, 1), substr(ename, 2, 2) FROM emp;
ENAME SUBSTR(ENAME,1) SU SUBS
---------- -------------------- -- ----
SMITH SMITH S MI
ALLEN ALLEN A LL
WARD WARD W AR
JONES JONES J ON
+.
.
MARTIN MARTIN M AR
BLAKE BLAKE B LA
CLARK CLARK C LA
SCOTT SCOTT S CO
KING KING K IN
TURNER TURNER T UR
ADAMS ADAMS A DA
JAMES JAMES J AM
FORD FORD F OR
MILLER MILLER M IL
문제 4) EMP 테이블에서 부서가 20번인 사원의 사원번호, 이름, 이름의 자릿수, 급여, 급여의 자릿수를 출력하여라.
- SELECT empno, ename, LENGTH(ename), sal, LENGTH(sal) FROM emp WHERE deptno = 20;
EMPNO ENAME LENGTHB(ENAME) SAL LENGTHB(SAL)
---------- ---------- -------------- ---------- ------------
7369 SMITH 5 800 3
7566 JONES 5 2975 4
7788 SCOTT 5 3000 4
7876 ADAMS 5 1100 4
7902 FORD 4 3000 4
문제 5) emp 테이블에서 급여를 30으로 나눈 나머지를 구하여 출력하여라.
- SELECT MOD(sal,30) FROM emp;
MOD(SAL,30)
-----------
20
10
20
5
20
0
20
0
20
0
20
20
0
10
날짜 관련 변경
- select * from nls_session_parameters;
- //현재 세션(현재창에서만)에 설정된 환경파라미터의 값들을 조회
- alter session set nls_date_format='rrrr/mm/dd:hh24:mi:ss';
- //날짜 관련 출력형식을 YYYY/MM/DD:24시:분:초 로 출력한다.
- ALTER SESSION SET NLS_DATE_FORMAT='dd/mm/rr';
- ALTER SESSION SET NLS_DATE_FORMAT='rr/mm/dd';
- SELECT '2000/01/01' +30 from dual;
- // 오류 발생
- SELECT to_date('2000/01/01', 'rrrr/mm/dd') +30 from dual;
- // '2000/01/01' 문자열을 'rrrr/mm/dd' 형식으로 변경하는 함수 to_date(,)
- SELECT to_date('2000/01/01', 'rrrr/mm/dd') +30, sysdate from dual;
TO_DATE( SYSDATE
-------- --------
00/01/31 09/04/24
- SELECT SYSDATE, SYSDATE-TO_DATE('2009/03/16', 'RRRR/MM/DD') from dual;
SYSDATE SYSDATE-TO_DATE('2009/03/16','RRRR/MM/DD')
-------- ------------------------------------------
09/04/24 39.4715741
- SELECT SYSDATE, SYSDATE-TO_DATE('2009/03/16', 'RRRR/MM/DD'), sysdate + 20/24 from dual;
- 시간을 더하는 것은 + Hour / 24
SYSDATE SYSDATE-TO_DATE('2009/03/16','RRRR/MM/DD') SYSDATE+
-------- ------------------------------------------ --------
09/04/24 39.4720718 09/04/25
문제 6) emp 테이블에서 현재까지의 근무일수가 몇 주 몇 일 인가를 출력하여라. 단, 근무 일수가 많은 사람순으로 출력하여라.
- SELECT ename, sysdate, TRUNC(sysdate-hiredate,0) "총 근무일수", TRUNC( ( TRUNC(sysdate-hiredate,0) - TRUNC(MOD( (sysdate-hiredate), 7)) ) / 7 , 0 ) "주", TRUNC(MOD( (sysdate-hiredate), 7)) "일" FROM emp ORDER BY (sysdate-hiredate) DESC;
- // 아래 것도 결과는 같다.
- SELECT ename, sysdate, TRUNC(sysdate-hiredate,0) "총 근무일수", TRUNC(TRUNC( (sysdate-hiredate)/ 7) , 0 ) "주", TRUNC(MOD( (sysdate-hiredate), 7)) "일" FROM emp ORDER BY (sysdate-hiredate) DESC;
iredate,0) - TRUNC(MOD( (sysdate-hiredate), 7)) ) / 7 , 0 ) "주", TRUNC(MOD( (sysdate-hiredate),
7)) "일" FROM emp ORDER BY (sysdate-hiredate) DESC;
ENAME SYSDATE 총 근무일수 주 일
---------- -------- ----------- ---------- ----------
SMITH 09/04/24 10355 1479 2
ALLEN 09/04/24 10290 1470 0
WARD 09/04/24 10288 1469 5
JONES 09/04/24 10249 1464 1
BLAKE 09/04/24 10220 1460 0
CLARK 09/04/24 10181 1454 3
TURNER 09/04/24 10090 1441 3
MARTIN 09/04/24 10070 1438 4
KING 09/04/24 10020 1431 3
JAMES 09/04/24 10004 1429 1
FORD 09/04/24 10004 1429 1
MILLER 09/04/24 9953 1421 6
SCOTT 09/04/24 8041 1148 5
ADAMS 09/04/24 8007 1143 6
문제 7) emp 테이블에서 10번 부서원의 현재까지의 근무 월수를 계산하여 출력하여라.
- SELECT ename, hiredate, TRUNC( MONTHS_BETWEEN( sysdate, hiredate) ) From emp WHERE deptno = 10;
ENAME HIREDATE TRUNC(MONTHS_BETWEEN(SYSDATE,HIREDATE))
---------- -------- ---------------------------------------
CLARK 81/06/09 334
KING 81/11/17 329
MILLER 82/01/23 327
문제 8) emp 테이블에서 10번 부서원의 입사 일자부터 5개월이 지난 후 날짜를 계산하여 출력하여라.
- SELECT ename, hiredate, ADD_MONTHS(hiredate, 5) FROM emp WHERE deptno = 10;
- // ADD_MONTH 사용6
ENAME HIREDATE ADD_MONT
---------- -------- --------
CLARK 81/06/09 81/11/09
KING 81/11/17 82/04/17
MILLER 82/01/23 82/06/23
문제 9) emp 테이블에서 10번 부서원의 입사 일자로부터 돌아오는 금요일을 계산하여 출력하여라.
- SELECT ename, hiredate, NEXT_DAY(hiredate, 6) FROM emp WHERE deptno = 10;
- SELECT ename, hiredate, NEXT_DAY(hiredate, '금') FROM emp WHERE deptno = 10;
- //NEXT_DAY 사용
ENAME HIREDATE NEXT_DAY
---------- -------- --------
CLARK 81/06/09 81/06/12
KING 81/11/17 81/11/20
MILLER 82/01/23 82/01/29
SQL> SELECT ename, hiredate, NEXT_DAY(hiredate, '금') FROM emp WHERE deptno = 10;
ENAME HIREDATE NEXT_DAY
---------- -------- --------
CLARK 81/06/09 81/06/12
KING 81/11/17 81/11/20
MILLER 82/01/23 82/01/29
문제 10) emp 테이블에서 입사한 달의 근무 일수를 계산하여 출력하여라. 단, 일요일과 일요일도 근무 일수에 포함된다.
- SELECT ename, hiredate, LAST_DAY(hiredate) - hiredate FROM emp;
- // LAST_DAY 사용
ENAME HIREDATE LAST_DAY(HIREDATE)-HIREDATE
---------- -------- ---------------------------
SMITH 80/12/17 14
ALLEN 81/02/20 8
WARD 81/02/22 6
JONES 81/04/02 28
MARTIN 81/09/28 2
BLAKE 81/05/01 30
CLARK 81/06/09 21
SCOTT 87/04/19 11
KING 81/11/17 13
TURNER 81/09/08 22
ADAMS 87/05/23 8
JAMES 81/12/03 28
FORD 81/12/03 28
MILLER 82/01/23 8
- create table test (
id number,
name varchar2(10));
이름 널? 유형
----------------------------------------------------- -------- ------------------------------------
ID NUMBER
NAME VARCHAR2(10)
- SELECT * FROM test;
선택된 레코드가 없습니다.
- INSERT INTO test(id, name) VALUES(1, 10);
1 개의 행이 만들어졌습니다.
ID NAME
---------- ----------
1 10
- SELECT ename+100 FROM emp;
select ename+100 from emp
*
1행에 오류:
ORA-01722: 수치가 부적합합니다
- SELECT id+10, name+100 FROM test;
ID+10 NAME+100
---------- ----------
11 110
현재의 세기, 년, 월, 일, 시, 분, 초 정보 및 요일 정보를 확인
- SELECT sysdate, to_char(sysdate, 'rrrr/mm/dd:hh24:mi:ss:day') FROM dual;
SYSDATE TO_CHAR(SYSDATE,'RRRR/MM/DD:H
-------- -----------------------------
09/04/24 2009/04/24:13:57:11:금요일
rr 과 yy의 차이점
rr : 년도가 0~49년도일 경우에는 현재세기로 인식하고, 50~99년도일 경우에는 이전세기로 인식
yy : 무조건 현재세기로 인식
- SELECT * FROM emp WHERE hiredate > '81/01/01';
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
7499 ALLEN SALESMAN 7698 81/02/20 1600 300 30
7521 WARD SALESMAN 7698 81/02/22 1250 500 30
7566 JONES MANAGER 7839 81/04/02 2975 20
7654 MARTIN SALESMAN 7698 81/09/28 1250 1400 30
7698 BLAKE MANAGER 7839 81/05/01 2850 30
7782 CLARK MANAGER 7839 81/06/09 2450 10
7788 SCOTT ANALYST 7566 87/04/19 3000 20
7839 KING PRESIDENT 81/11/17 5000 10
7844 TURNER SALESMAN 7698 81/09/08 1500 0 30
7876 ADAMS CLERK 7788 87/05/23 1100 20
7900 JAMES CLERK 7698 81/12/03 950 30
7902 FORD ANALYST 7566 81/12/03 3000 20
7934 MILLER CLERK 7782 82/01/23 1300 10
- alter session set nls_date_format='yy/mm/dd';
- SELECT * FROM emp WHERE hiredate > '81/01/01'; '81/01/01' = 2081/01/01 값 없음!!
- SELECT ename, sal, to_char(sal, '$9,999.9') FROM emp;
ENAME SAL TO_CHAR
---------- ---------- -------
SMITH 800 $800
ALLEN 1600 $1,600
WARD 1250 $1,250
JONES 2975 $2,975
MARTIN 1250 $1,250
BLAKE 2850 $2,850
CLARK 2450 $2,450
SCOTT 3000 $3,000
KING 5000 $5,000
TURNER 1500 $1,500
ADAMS 1100 $1,100
JAMES 950 $950
FORD 3000 $3,000
MILLER 1300 $1,300
14 개의 행이 선택되었습니다.
SQL> SELECT ename, sal, to_char(sal, '$9,999.9') FROM emp;
ENAME SAL TO_CHAR(S
---------- ---------- ---------
SMITH 800 $800.0
ALLEN 1600 $1,600.0
WARD 1250 $1,250.0
JONES 2975 $2,975.0
MARTIN 1250 $1,250.0
BLAKE 2850 $2,850.0
CLARK 2450 $2,450.0
SCOTT 3000 $3,000.0
KING 5000 $5,000.0
TURNER 1500 $1,500.0
ADAMS 1100 $1,100.0
JAMES 950 $950.0
FORD 3000 $3,000.0
MILLER 1300 $1,300.0
- SELECT ename, sal, to_char(sal, 'L9,999.9') FROM emp;
- //L은 로컬
ENAME SAL TO_CHAR(SAL,'L9,99
---------- ---------- ------------------
SMITH 800 ₩800.0
ALLEN 1600 ₩1,600.0
WARD 1250 ₩1,250.0
JONES 2975 ₩2,975.0
MARTIN 1250 ₩1,250.0
BLAKE 2850 ₩2,850.0
CLARK 2450 ₩2,450.0
SCOTT 3000 ₩3,000.0
KING 5000 ₩5,000.0
TURNER 1500 ₩1,500.0
ADAMS 1100 ₩1,100.0
JAMES 950 ₩950.0
FORD 3000 ₩3,000.0
MILLER 1300 ₩1,300.0
- SELECT ename, sal, to_char(sal, 'L9,999.9'), TO_CHAR(sal, '999') FROM emp;
ENAME SAL TO_CHAR(SAL,'L9,99 TO_C
---------- ---------- ------------------ ----
SMITH 800 ₩800.0 800
ALLEN 1600 ₩1,600.0 ####
WARD 1250 ₩1,250.0 ####
JONES 2975 ₩2,975.0 ####
MARTIN 1250 ₩1,250.0 ####
BLAKE 2850 ₩2,850.0 ####
CLARK 2450 ₩2,450.0 ####
SCOTT 3000 ₩3,000.0 ####
KING 5000 ₩5,000.0 ####
TURNER 1500 ₩1,500.0 ####
ADAMS 1100 ₩1,100.0 ####
JAMES 950 ₩950.0 950
FORD 3000 ₩3,000.0 ####
MILLER 1300 ₩1,300.0 #### // 자릿수를 넘어서면 # 정자로 표시됨. 엑셀처럼? 아니면 엑셀이 DB처럼!?
- INSERT into emp(empno, ename, hiredate) VALUES(8000, '홍길동', '10-12-2009:10시');
INSERT into emp(empno, ename, hiredate) VALUES(8000, '홍길동', '10-12-2009:10시')
*
1행에 오류:
ORA-01830: 날짜 형식의 지정에 불필요한 데이터가 포함되어 있습니다
- INSERT into emp(empno, ename, hiredate) VALUES(8000, '홍길동', TO_DATE('10-12-2009:10', 'dd-mm-rrrr:hh24') );
rrrr:hh24') );
1 개의 행이 만들어졌습니다.
SQL> select * from emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- ---------- ---------- ---------- ----------
8000 홍길동 2009/12/10
7369 SMITH CLERK 7902 1980/12/17 800 20
7499 ALLEN SALESMAN 7698 1981/02/20 1600 300 30
7521 WARD SALESMAN 7698 1981/02/22 1250 500 30
7566 JONES MANAGER 7839 1981/04/02 2975 20
7654 MARTIN SALESMAN 7698 1981/09/28 1250 1400 30
7698 BLAKE MANAGER 7839 1981/05/01 2850 30
7782 CLARK MANAGER 7839 1981/06/09 2450 10
7788 SCOTT ANALYST 7566 1987/04/19 3000 20
7839 KING PRESIDENT 1981/11/17 5000 10
7844 TURNER SALESMAN 7698 1981/09/08 1500 0 30
7876 ADAMS CLERK 7788 1987/05/23 1100 20
7900 JAMES CLERK 7698 1981/12/03 950 30
7902 FORD ANALYST 7566 1981/12/03 3000 20
7934 MILLER CLERK 7782 1982/01/23 1300 10
- SELECT ename, deptno, DECODE(deptno, 10, '10번 부서', 20, '20번 부서', 30, '30번 부서', '기타부서') "부서",
- CASE WHEN deptno = 10 THEN '10번 부서'
- WHEN deptno = 20 THEN '20번 부서'
- WHEN deptno = 30 THEN '30번 부서'
- ELSE '기타부서' end "case문" FROM emp;
타부서') "부서",
2 CASE WHEN deptno = 10 THEN '10번 부서'
3 WHEN deptno = 20 THEN '20번 부서'
4 WHEN deptno = 30 THEN '30번 부서'
5 ELSE '기타부서' end "case문" FROM emp;
ENAME DEPTNO 부서 case문
---------- ---------- --------- ---------
홍길동 기타부서 기타부서
SMITH 20 20번 부서 20번 부서
ALLEN 30 30번 부서 30번 부서
WARD 30 30번 부서 30번 부서
JONES 20 20번 부서 20번 부서
MARTIN 30 30번 부서 30번 부서
BLAKE 30 30번 부서 30번 부서
CLARK 10 10번 부서 10번 부서
SCOTT 20 20번 부서 20번 부서
KING 10 10번 부서 10번 부서
TURNER 30 30번 부서 30번 부서
ADAMS 20 20번 부서 20번 부서
JAMES 30 30번 부서 30번 부서
FORD 20 20번 부서 20번 부서
MILLER 10 10번 부서 10번 부서
이 글은 스프링노트에서 작성되었습니다.
'허니몬의 IT 이야기 > 프로그래머, '코드 엔지니어'' 카테고리의 다른 글
자바 앱스토어의 탄생, 앱스토어 세계 탄생의 빅뱅, 신호탄이 되지 않을까? (0) | 2009.05.22 |
---|---|
허니몬의 자바guru 개설. (0) | 2009.05.06 |
Oracle_20090423(ORACLE 입문, SELECT 문 기초) (0) | 2009.04.30 |
Windwos에서 Oracle 삭제하기 (0) | 2009.04.26 |
Oracle에 관하여. (0) | 2009.04.20 |