SQL> select chr(75) from dual;
C
-
K
// 숫자 75를 문자 값으로 변환
SQL> select concat(concat(ename, ' is a'), job) from emp;
CONCAT(CONCAT(ENAME,'ISA
------------------------
SMITH is aCLERK
ALLEN is aSALESMAN
WARD is aSALESMAN
JONES is aMANAGER
MARTIN is aSALESMAN
BLAKE is aMANAGER
CLARK is aMANAGER
SCOTT is aANALYST
KING is aPRESIDENT
TURNER is aSALESMAN
ADAMS is aCLERK
CONCAT(CONCAT(ENAME,'ISA
------------------------
JAMES is aCLERK
FORD is aANALYST
MILLER is aCLERK
14 개의 행이 선택되었습니다.
>> 같은 결과가 나오는 다른 방법
SQL> select ename || ' is a ' || job
2 ;
*
2행에 오류:
ORA-00923: FROM 키워드가 있어야할 곳에 없습니다
SQL> ed
file afiedt.buf(이)가 기록되었습니다
1 select ename || ' is a ' || job
2* from emp
SQL> /
ENAME||'ISA'||JOB
-------------------------
SMITH is a CLERK
ALLEN is a SALESMAN
WARD is a SALESMAN
JONES is a MANAGER
MARTIN is a SALESMAN
BLAKE is a MANAGER
CLARK is a MANAGER
SCOTT is a ANALYST
KING is a PRESIDENT
TURNER is a SALESMAN
ADAMS is a CLERK
ENAME||'ISA'||JOB
-------------------------
JAMES is a CLERK
FORD is a ANALYST
MILLER is a CLERK
14 개의 행이 선택되었습니다.
SQL> ed
file afiedt.buf(이)가 기록되었습니다
1* select concat(concat(ename, ' is a '), job) from emp
SQL> /
CONCAT(CONCAT(ENAME,'ISA'
-------------------------
SMITH is a CLERK
ALLEN is a SALESMAN
WARD is a SALESMAN
JONES is a MANAGER
MARTIN is a SALESMAN
BLAKE is a MANAGER
CLARK is a MANAGER
SCOTT is a ANALYST
KING is a PRESIDENT
TURNER is a SALESMAN
ADAMS is a CLERK
CONCAT(CONCAT(ENAME,'ISA'
-------------------------
JAMES is a CLERK
FORD is a ANALYST
MILLER is a CLERK
14 개의 행이 선택되었습니다.
SQL> select initcap('the soap') from dual;
INITCAP(
--------
The Soap
SQL> sleelct upper('mr. Samuel hellhouse') from dual;
SP2-0734: "sleelct up..."(으)로 시작되는 알 수 없는 명령 - 나머지 줄은 무시?
SQL> ed
file afiedt.buf(이)가 기록되었습니다
1* select initcap('the soap') from dual
SQL> select upper('mr. Samuel hillhouse') from dual;
UPPER('MR.SAMUELHILL
--------------------
MR. SAMUEL HILLHOUSE
SQL> select lower('MR. SAMUEL HILLHOUSE') from dual;
LOWER('MR.SAMUELHILL
--------------------
mr. samuel hillhouse
SQL> select lpad('Page 1', 15, '*.') from dual;
LPAD('PAGE1',15
---------------
*.*.*.*.*Page 1
SQL> select rpad(ename, 11, 'ab') from emp where ename = 'TURNER';
RPAD(ENAME,11,'AB')
----------------------
TURNERababa
SQL> select ltrim('xyxXxyLAST WORD', 'xy') from dual;
LTRIM('XYXXX
------------
XxyLAST WORD
SQL> select rtrim(TURNERyxXxy', 'xy') from dual;
ERROR:
ORA-01756: 단일 인용부를 지정해 주십시오
SQL> select rtrim('TURNERyxXxy', 'xy') from dual;
RTRIM('TU
---------
TURNERyxX
SQL> select substr('ABCDEFG', -3,2) from dual;
SU
--
EF
SQL> select length('CAN') from dual;
LENGTH('CAN')
-------------
3
SQL> select abs(-15) from dual;
ABS(-15)
----------
15
SQL> select ceil(15.7) from dual;
CEIL(15.7)
----------
16
SQL> select floor(15.7) from dual;
FLOOR(15.7)
-----------
15
SQL> select log(10, 100) from dual;
LOG(10,100)
-----------
2
.
SQL> select mod(11,4) from dual;
MOD(11,4)
----------
3
SQL> select power(3,2) from dual; //3의 2제곱
POWER(3,2)
----------
9
SQL> select round(15.193, 1) from dual; //소수점 1번째 자리에서 반올림
ROUND(15.193,1)
---------------
15.2
SQL> select round(15.193, -1) from dual; //소수점 -1번째 자리에서 반올림. -1은 소수점으로부터 앞으로 1번째 자리
ROUND(15.193,-1)
----------------
20
SQL> select trunc(15.79, 1) from dual; //소수점 이하 1번째 자리에서 삭제.
TRUNC(15.79,1)
--------------
15.7
p.194 연습문제 5장
1. EMP Table에서 이름, 급여, 커미션, 총액 (sal+comm)을 구하여 총액이 많은 순서로 출력하라. 단, 커미션이 NULL인 사람은 제외한다.
1 select ename, sal, comm, (sal + comm) total
2 from emp
3* where comm is not null order by total
SQL> /
ENAME SAL COMM TOTAL
---------- ---------- ---------- ----------
TURNER 1500 0 1500
WARD 1250 500 1750
ALLEN 1600 300 1900
MARTIN 1250 1400 2650
SQL> ed
file afiedt.buf(이)가 기록되었습니다
1 select ename, sal, comm, (sal + comm) total
2 from emp
3* where comm is not null order by total asc
SQL> /
ENAME SAL COMM TOTAL
---------- ---------- ---------- ----------
TURNER 1500 0 1500
WARD 1250 500 1750
ALLEN 1600 300 1900
MARTIN 1250 1400 2650
SQL> ed
file afiedt.buf(이)가 기록되었습니다
1 select ename, sal, comm, (sal + comm) total
2 from emp
3* where comm is not null order by total desc
SQL> /
ENAME SAL COMM TOTAL
---------- ---------- ---------- ----------
MARTIN 1250 1400 2650
ALLEN 1600 300 1900
WARD 1250 500 1750
TURNER 1500 0 1500
//nvl 함수를 이용한 nul value 합산
1 select ename, sal, comm, sal+nvl(comm, 0) total
2 from emp
3* order by total desc
SQL> /
ENAME SAL COMM TOTAL
---------- ---------- ---------- ----------
KING 5000 5000
SCOTT 3000 3000
FORD 3000 3000
JONES 2975 2975
BLAKE 2850 2850
MARTIN 1250 1400 2650
CLARK 2450 2450
ALLEN 1600 300 1900
WARD 1250 500 1750
TURNER 1500 0 1500
MILLER 1300 1300
ENAME SAL COMM TOTAL
---------- ---------- ---------- ----------
ADAMS 1100 1100
JAMES 950 950
SMITH 800 800
2. 10번 부서의 모든 사람들에게 급여의 13%를 보너스로 지불하기로 하였다. 이름, 급여, 보너스, 부서 번호를 출력하라.
SQL> select ename, sal, (sal * 0.13) bonus, deptno
2 from emp
3 where deptno=10;
ENAME SAL BONUS DEPTNO
---------- ---------- ---------- ----------
CLARK 2450 318.5 10
KING 5000 650 10
MILLER 1300 169 10
3.30번 부서의 연봉(sal * 12)을 계산하여 이름, 부서번호, 급여, 연봉을 출력하라. 단, 연말에 급여의 150%를 보너스로 지급한다.
SQL> select ename, deptno, sal, (sal*12) year_sal
2 from emp
3 where deptno = 30;
ENAME DEPTNO SAL YEAR_SAL
---------- ---------- ---------- ----------
ALLEN 30 1600 19200
WARD 30 1250 15000
MARTIN 30 1250 15000
BLAKE 30 2850 34200
TURNER 30 1500 18000
JAMES 30 950 11400
6 개의 행이 선택되었습니다.
SQL> ed
file afiedt.buf(이)가 기록되었습니다
1 select ename, deptno, sal, (sal*12) year_sal, (sal * 1.5) bonus
2 from emp
3* where deptno = 30
SQL> /
ENAME DEPTNO SAL YEAR_SAL BONUS
---------- ---------- ---------- ---------- ----------
ALLEN 30 1600 19200 2400
WARD 30 1250 15000 1875
MARTIN 30 1250 15000 1875
BLAKE 30 2850 34200 4275
TURNER 30 1500 18000 2250
JAMES 30 950 11400 1425
6 개의 행이 선택되었습니다.
1 select ename, deptno, sal, (sal*12 + sal*1.5) year_sal
2 from emp
3* where deptno = 30
SQL> /
ENAME DEPTNO SAL YEAR_SAL
---------- ---------- ---------- ----------
ALLEN 30 1600 21600
WARD 30 1250 16875
MARTIN 30 1250 16875
BLAKE 30 2850 38475
TURNER 30 1500 20250
JAMES 30 950 12825
6 개의 행이 선택되었습니다.
4. 부서번호가 20인 부서의 시간당 임금을 계산하여 출력하라. 단, 1달의 근무 일수는 12일이고, 1일 근무시간은 5시간이다. 출력양식은 이름, 급여, 시간당 임금(소수 이하 1번째 자리에서 반올림)을 출력하라.
SQL> select ename, sal, (sal/12/5) hour_sal
2 from emp
3 ;
ENAME SAL HOUR_SAL
---------- ---------- ----------
SMITH 800 13.3333333
ALLEN 1600 26.6666667
WARD 1250 20.8333333
JONES 2975 49.5833333
MARTIN 1250 20.8333333
BLAKE 2850 47.5
CLARK 2450 40.8333333
SCOTT 3000 50
KING 5000 83.3333333
TURNER 1500 25
ADAMS 1100 18.3333333
ENAME SAL HOUR_SAL
---------- ---------- ----------
JAMES 950 15.8333333
FORD 3000 50
MILLER 1300 21.6666667
14 개의 행이 선택되었습니다.
SQL> ed
file afiedt.buf(이)가 기록되었습니다
1 select ename, sal, round((sal/12/5),1) hour_sal
2* from emp
3 /
ENAME SAL HOUR_SAL
---------- ---------- ----------
SMITH 800 13.3
ALLEN 1600 26.7
WARD 1250 20.8
JONES 2975 49.6
MARTIN 1250 20.8
BLAKE 2850 47.5
CLARK 2450 40.8
SCOTT 3000 50
KING 5000 83.3
TURNER 1500 25
ADAMS 1100 18.3
ENAME SAL HOUR_SAL
---------- ---------- ----------
JAMES 950 15.8
FORD 3000 50
MILLER 1300 21.7
14 개의 행이 선택되었습니다.
5. 급여가 1500부터 3000사이의 사람은 급여의 15%를 회비로 지불하기로 하였다. 이를 이름, 급여, 회비(소수점 2째 자리에서 반올림)를 출력하라.
SQL> select ename, sal, round((sal * 0.15), 1) mem_fee
2 from emp
3 where sal between 1500 and 3000;
ENAME SAL MEM_FEE
---------- ---------- ----------
ALLEN 1600 240
JONES 2975 446.3
BLAKE 2850 427.5
CLARK 2450 367.5
SCOTT 3000 450
TURNER 1500 225
FORD 3000 450
7 개의 행이 선택되었습니다.
SQL> ed
file afiedt.buf(이)가 기록되었습니다
1 select ename, sal, round((sal * 0.15), 2) mem_fee
2 from emp
3* where sal between 1500 and 3000
SQL> /
ENAME SAL MEM_FEE
---------- ---------- ----------
ALLEN 1600 240
JONES 2975 446.25
BLAKE 2850 427.5
CLARK 2450 367.5
SCOTT 3000 450
TURNER 1500 225
FORD 3000 450
7 개의 행이 선택되었습니다.
6.
SQL> ed
file afiedt.buf(이)가 기록되었습니다
1 select ename, sal, trunc((sal * 0.15),0) C_C_fee
2 from emp
3* where sal >= 2000
SQL> /
ENAME SAL C_C_FEE
---------- ---------- ----------
JONES 2975 446
BLAKE 2850 427
CLARK 2450 367
SCOTT 3000 450
KING 5000 750
FORD 3000 450
7.
SQL> ED
file afiedt.buf(이)가 기록되었습니다
1 select deptno, ename, hiredate, sysdate, trunc((sysdate-hiredate), 0) working_day, trunc(((sysd
2* from emp
SQL> /
DEPTNO ENAME HIREDATE SYSDATE WORKING_DAY WORKING_YEAR WORKING_MONTH WORKING_WEEK
---------- ---------- -------- -------- ----------- ------------ ------------- ------------
20 SMITH 80/12/17 09/03/23 10323 28 339 1474
30 ALLEN 81/02/20 09/03/23 10258 28 337 1465
30 WARD 81/02/22 09/03/23 10256 28 337 1465
20 JONES 81/04/02 09/03/23 10217 27 335 1459
30 MARTIN 81/09/28 09/03/23 10038 27 329 1434
30 BLAKE 81/05/01 09/03/23 10188 27 334 1455
10 CLARK 81/06/09 09/03/23 10149 27 333 1449
20 SCOTT 87/04/19 09/03/23 8009 21 263 1144
10 KING 81/11/17 09/03/23 9988 27 328 1426
30 TURNER 81/09/08 09/03/23 10058 27 330 1436
20 ADAMS 87/05/23 09/03/23 7975 21 262 1139
DEPTNO ENAME HIREDATE SYSDATE WORKING_DAY WORKING_YEAR WORKING_MONTH WORKING_WEEK
---------- ---------- -------- -------- ----------- ------------ ------------- ------------
30 JAMES 81/12/03 09/03/23 9972 27 327 1424
20 FORD 81/12/03 09/03/23 9972 27 327 1424
10 MILLER 82/01/23 09/03/23 9921 27 326 1417
14 개의 행이 선택되었습니다.
8.
SQL> select ename, sal, (sal - (sal*0.1)) real_sal
2 from emp;
ENAME SAL REAL_SAL
---------- ---------- ----------
SMITH 800 720
ALLEN 1600 1440
WARD 1250 1125
JONES 2975 2677.5
MARTIN 1250 1125
BLAKE 2850 2565
CLARK 2450 2205
SCOTT 3000 2700
KING 5000 4500
TURNER 1500 1350
ADAMS 1100 990
ENAME SAL REAL_SAL
---------- ---------- ----------
JAMES 950 855
FORD 3000 2700
MILLER 1300 1170
14 개의 행이 선택되었습니다.
9.
SQL> ed
file afiedt.buf(이)가 기록되었습니다
1 select ename, hiredate, (hiredate+90) hire_after, sal
2* from emp
SQL> /
ENAME HIREDATE HIRE_AFT SAL
---------- -------- -------- ----------
SMITH 80/12/17 81/03/17 800
ALLEN 81/02/20 81/05/21 1600
WARD 81/02/22 81/05/23 1250
JONES 81/04/02 81/07/01 2975
MARTIN 81/09/28 81/12/27 1250
BLAKE 81/05/01 81/07/30 2850
CLARK 81/06/09 81/09/07 2450
SCOTT 87/04/19 87/07/18 3000
KING 81/11/17 82/02/15 5000
TURNER 81/09/08 81/12/07 1500
ADAMS 87/05/23 87/08/21 1100
ENAME HIREDATE HIRE_AFT SAL
---------- -------- -------- ----------
JAMES 81/12/03 82/03/03 950
FORD 81/12/03 82/03/03 3000
MILLER 82/01/23 82/04/23 1300
14 개의 행이 선택되었습니다.
10.문제자체를 잘모르겠삼
SQL> ed
file afiedt.buf(이)가 기록되었습니다
1 select empno, ename, hiredate, add_months(hiredate, 6), sal
2* from emp
SQL> /
EMPNO ENAME HIREDATE ADD_MONT SAL
---------- ---------- -------- -------- ----------
7369 SMITH 80/12/17 81/06/17 800
7499 ALLEN 81/02/20 81/08/20 1600
7521 WARD 81/02/22 81/08/22 1250
7566 JONES 81/04/02 81/10/02 2975
7654 MARTIN 81/09/28 82/03/28 1250
7698 BLAKE 81/05/01 81/11/01 2850
7782 CLARK 81/06/09 81/12/09 2450
7788 SCOTT 87/04/19 87/10/19 3000
7839 KING 81/11/17 82/05/17 5000
7844 TURNER 81/09/08 82/03/08 1500
7876 ADAMS 87/05/23 87/11/23 1100
EMPNO ENAME HIREDATE ADD_MONT SAL
---------- ---------- -------- -------- ----------
7900 JAMES 81/12/03 82/06/03 950
7902 FORD 81/12/03 82/06/03 3000
7934 MILLER 82/01/23 82/07/23 1300
14 개의 행이 선택되었습니다.
11.
SQL> ed
file afiedt.buf(이)가 기록되었습니다
1* select ename, last_day(hiredate)-hiredate "근무일수" from emp
SQL> /
ENAME 근무일수
---------- ----------
SMITH 14
ALLEN 8
WARD 6
JONES 28
MARTIN 2
BLAKE 30
CLARK 21
SCOTT 11
KING 13
TURNER 22
ADAMS 8
ENAME 근무일수
---------- ----------
JAMES 28
FORD 28
MILLER 8
14 개의 행이 선택되었습니다.
13.
SQL> select ename, hiredate, (sysdate-hiredate) "근무일수" from emp;
ENAME HIREDATE 근무일수
---------- -------- ----------
SMITH 80/12/17 10323.6863
ALLEN 81/02/20 10258.6863
WARD 81/02/22 10256.6863
JONES 81/04/02 10217.6863
MARTIN 81/09/28 10038.6863
BLAKE 81/05/01 10188.6863
CLARK 81/06/09 10149.6863
SCOTT 87/04/19 8009.68625
KING 81/11/17 9988.68625
TURNER 81/09/08 10058.6863
ADAMS 87/05/23 7975.68625
ENAME HIREDATE 근무일수
---------- -------- ----------
JAMES 81/12/03 9972.68625
FORD 81/12/03 9972.68625
MILLER 82/01/23 9921.68625
14 개의 행이 선택되었습니다.
14.
1 select ename, to_char(hiredate, 'YYYY"년" MM"월" DD"일"')
2* from emp
3 /
ENAME TO_CHAR(HIREDATE
---------- ----------------
SMITH 1980년 12월 17일
ALLEN 1981년 02월 20일
WARD 1981년 02월 22일
JONES 1981년 04월 02일
MARTIN 1981년 09월 28일
BLAKE 1981년 05월 01일
CLARK 1981년 06월 09일
SCOTT 1987년 04월 19일
KING 1981년 11월 17일
TURNER 1981년 09월 08일
ADAMS 1987년 05월 23일
ENAME TO_CHAR(HIREDATE
---------- ----------------
JAMES 1981년 12월 03일
FORD 1981년 12월 03일
MILLER 1982년 01월 23일
14 개의 행이 선택되었습니다.
SQL> ed
file afiedt.buf(이)가 기록되었습니다
1 select ename, to_char(hiredate, 'YY||"년"')
2 to_char(hiredate, 'MM||"월"')
3 to_char(hiredate, 'DD||"일"')
4* from emp
SQL> /
to_char(hiredate, 'MM||"월"')
*
2행에 오류:
ORA-00923: FROM 키워드가 있어야할 곳에 없습니다
SQL> ed
file afiedt.buf(이)가 기록되었습니다
1 select ename, to_char(hiredate, 'YYYY')||"년"
2 to_char(hiredate, 'MM')||"월"
3 to_char(hiredate, 'DD')||"일"
4* from emp
SQL> /
to_char(hiredate, 'MM')||"월"
*
2행에 오류:
ORA-00923: FROM 키워드가 있어야할 곳에 없습니다
SQL> ed
file afiedt.buf(이)가 기록되었습니다
1 select ename, to_char(hiredate, 'YYYY')||"년"
2 to_char(hiredate, 'MM')||"월"
3 to_char(hiredate, 'DD')||"일"
4* from emp
SQL> /
to_char(hiredate, 'MM')||"월"
*
2행에 오류:
ORA-00923: FROM 키워드가 있어야할 곳에 없습니다
SQL> ed
file afiedt.buf(이)가 기록되었습니다
1 select ename, to_char(hiredate, 'YYYY')||"년"||
2 to_char(hiredate, 'MM')||"월"||
3 to_char(hiredate, 'DD')||"일"
4* from emp
SQL> /
to_char(hiredate, 'DD')||"일"
*
3행에 오류:
ORA-00904: 열명이 부적합합니다
SQL> ed
file afiedt.buf(이)가 기록되었습니다
1 select ename, to_char(hiredate, 'YYYY')||'년'||
2 to_char(hiredate, 'MM')||'월'||
3 to_char(hiredate, 'DD')||'일'
4* from emp
SQL> /
ENAME TO_CHAR(HIREDA
---------- --------------
SMITH 1980년12월17일
ALLEN 1981년02월20일
WARD 1981년02월22일
JONES 1981년04월02일
MARTIN 1981년09월28일
BLAKE 1981년05월01일
CLARK 1981년06월09일
SCOTT 1987년04월19일
KING 1981년11월17일
TURNER 1981년09월08일
ADAMS 1987년05월23일
ENAME TO_CHAR(HIREDA
---------- --------------
JAMES 1981년12월03일
FORD 1981년12월03일
MILLER 1982년01월23일
14 개의 행이 선택되었습니다.
15.
SQL> ed
file afiedt.buf(이)가 기록되었습니다
1 select lower(substr(ename,1,3)) as name
2 from emp
3* where length(ename) >=6
SQL> /
NAME
------
mar
tur
mil
16.
SQL> select avg(sal), max(sal), min(sal), count(empno)
2 from emp
3 where deptno=10;
AVG(SAL) MAX(SAL) MIN(SAL) COUNT(EMPNO)
---------- ---------- ---------- ------------
2916.66667 5000 1300 3
17.
SQL> ed
file afiedt.buf(이)가 기록되었습니다
1 select deptno, avg(sal), max(sal), min(sal), count(empno)
2 from emp
3* group by deptno
SQL> /
DEPTNO AVG(SAL) MAX(SAL) MIN(SAL) COUNT(EMPNO)
---------- ---------- ---------- ---------- ------------
10 2916.66667 5000 1300 3
20 2175 3000 800 5
30 1566.66667 2850 950 6
18. 미해결
19. 미해결
20. 미해결
SQL> ed
file afiedt.buf(이)가 기록되었습니다
1 select row_number() over(order by sal desc), empno, sal,
2 rank() over(order by sal desc) salary_rank,
3 dense_rank() over(order by sal desc) rank2
4* from emp order by sal desc
SQL> /
ROW_NUMBER()OVER(ORDERBYSALDESC) EMPNO SAL SALARY_RANK RANK2
-------------------------------- ---------- ---------- ----------- ----------
1 7839 5000 1 1
2 7788 3000 2 2
3 7902 3000 2 2
4 7566 2975 4 3
5 7698 2850 5 4
6 7782 2450 6 5
7 7499 1600 7 6
8 7844 1500 8 7
9 7934 1300 9 8
10 7521 1250 10 9
11 7654 1250 10 9
ROW_NUMBER()OVER(ORDERBYSALDESC) EMPNO SAL SALARY_RANK RANK2
-------------------------------- ---------- ---------- ----------- ----------
12 7876 1100 12 10
13 7900 950 13 11
14 7369 800 14 12
14 개의 행이 선택되었습니다.
case
SQL> ed
file afiedt.buf(이)가 기록되었습니다
1 select job, sal,
2 case when sal >= 3000 then 1
3 when sal between 2000 and 3000 then 2
4 when sal between 1000 and 2000 then 3
5 when sal between 0 and 1000 then 4
6 End AS grade
7* from emp
SQL> /
JOB SAL GRADE
--------- ---------- ----------
CLERK 800 4
SALESMAN 1600 3
SALESMAN 1250 3
MANAGER 2975 2
SALESMAN 1250 3
MANAGER 2850 2
MANAGER 2450 2
ANALYST 3000 1
PRESIDENT 5000 1
SALESMAN 1500 3
CLERK 1100 3
JOB SAL GRADE
--------- ---------- ----------
CLERK 950 4
ANALYST 3000 1
CLERK 1300 3
14 개의 행이 선택되었습니다.
'Fundamental Notes > Data Base' 카테고리의 다른 글
[DB] Quiz1_1 해답 (0) | 2009.04.06 |
---|---|
[DB] 09. 03. 16 - CH3 기본적인 SELCT문 & CH5 함수 (0) | 2009.03.16 |
[DB] 09. 03. 13 - Ch3. 기본적인 SELECT문 연습문제 (0) | 2009.03.13 |
[DB] 2009. 03. 09 - SQL*PLUS (0) | 2009.03.09 |