본문 바로가기

프로그래밍/네트워크 프로그래밍

네트워크 프로그래밍-DB(함수, 조건문)

ㄴ앞서 oracle에는 기본 계정 hr과 scott 두 가지가 존재한다고 했음.

이전에 hr은 alter user hr account unlock; 명령어를 통해 풀어줬음.

scott 계정은 해당 방식으로 풀 수 없음.


C:\oraclexe\app\oracle\product\11.2.0\server\rdbms\admin 경로명으로가서 scott.sql을 우클릭

해당 위치를 복사한다.

SQL> @C:\oraclexe\app\oracle\product\11.2.0\server\rdbms\admin\scott.sql

scott.sql을 실행시켜주고

SQL> alter user scott identified by tiger;

비밀번호 또한 생성해준다.

SQL> connect scott/tiger;



dual table

oracle에는 dual table이라는 것이 있다. 일종의 oracle 시스템 테이블이며 주로 테스트의 용도로 쓰인다.

연산, 계산식, 문자열 등의 입력 값을 반환하는데 많이 사용한다.

예를 들어 10*20 결과 값을 반환하고 싶을 때

select 10*20 from dual; 명령어를 사용한다.

여기서 dual은 아무 의미 없는 dummy table이며 결과 값을 그대로 반환한다.


ex)

SQL> select 10*20 from dual;


     10*20

----------

       200



문자열 함수

문자열에 관련된 여러가지 함수가 있다.

lower, upper함수는 문자를 각각 소문자, 대문자로 바꿔주는 역할을 한다.



SQL> select lower('NETDREAM') from dual;

NETDREAM을 소문자 netdream으로 바꾸라는 명령어

LOWER('NETDREAM'

----------------

netdream



SQL> select upper('netdream') from dual;

netdream을 대문자 NETDREAM으로 바꾸라는 명령어

UPPER('NETDREAM'

----------------

NETDREAM


substr 함수는 특정 문자열을 출력할 때 사용한다.

SQL> select substr('net dream',5,5) from dual;

net dream이라는 문자열을 5번째 글자부터 총 5글자를 출력하라는 뜻.

맨 앞이 문자열, 처음 숫자가 시작 문자열, 두번째 숫자가 문자열 길이를 나타낸다.

SUBSTR('NE

----------

dream



ltrim과 rtrim은 공백을 없앨 때 사용한다.


SQL> select ltrim('                             netdream') from dual;

 netdream의 왼쪽 공백을 제거하고 출력하라는 명령어.

LTRIM('NETDREAM'

----------------

netdream


concat은 문자열을 결합할 때 사용한다.


SQL> select concat('net','dream') from dual;

net과 dream을 합쳐서 출력하라는 뜻.

CONCAT('NET','DR

----------------

netdream



concat은 ||와 같은 의미를 가진다. 사용이 가능하다.

|| 또한 문자열을 합칠 때 사용하는 연산자이다.


SQL> select 'net' || 'dream' from dual;

net과 drea을 합쳐서 출력하라는 명령어, 위의 concat과 같은 결과가 나온다.

'NET'||'DREAM'

----------------

netdream



length 함수는 문자열의 길이를 출력하는 명령어이다.


SQL> select length('abc') from dual;

abc 문자열의 길이를 출력하라는 명령어.

LENGTH('ABC')

-------------

            3


ascii 함수는 특정 문자를 숫자로 바꿀 때 사용한다.

컴퓨터는 문자를 이해할 수 없다. 따라서 우리가 문자를 입력해주면 이것을 숫자로 바꾸어 인식한다. 이것이 ascii 코드이다.

예를들어 우리가 a를 입력할 경우 컴퓨터는 a가 아닌 97이라는 숫자로 인식한다.


SQL> select ascii('a') from dual;

ascii code를 기준으로  a에 해당하는 숫자를 출력하라.

ASCII('A')

----------

        97


chr 함수는 숫자를 반대로 문자로 바꿀 때 사용한다.

SQL> select chr(97) from dual;

ascii 코드를 기준으로 97에 해당하는 문자를 출력해라.

CH

--

a



숫자함수


abs는 절대값을 출력해주는 함수이다.


SQL> select abs(-97) from dual;

-97의 절대값을 출력하라는 명령어.

  ABS(-97)

----------

        97


mod 함수는 나머지를 구하는 함수이다.

SQL> select mod(15,4) from dual;

15를 4로 나누었을 때의 나머지를 출력해준다.

 MOD(15,4)

----------

         3


round 함수는 반올림을 해주는 함수이다.

SQL> select round(25.55,1) from dual;

25.55를 소수점 첫번째 자리까지 출력하라는 명령어이다. 즉 반올림은 소수점 두번째  자리에 수행하라는 명령어이다.


ROUND(25.55,1)

--------------

          25.6


trunc는 절삭을 해주는 함수이다.

SQL> select trunc(25.666,2) from dual;

25.666울 두번째 자리까지 출력하고 나머지는 절삭하라는 명령어이다.

TRUNC(25.666,2)

---------------

          25.66



sign 명령어는 음수면 -1, 0이면 0, 양수면 1을 출력하는 명령어이다.

SQL> select sign(100) from dual;

100이므로 1을 출력한다.

 SIGN(100)

----------

         1


ceil 명령어는 정수형 최대 숫자를 출력하는 명령어이며

floor 명령어는 정수형 최소 숫자를 출력하는 명령어이다.


SQL> select ceil(1234.11) from dual;

1234.11의 정수형 최대 숫자는 1235이다. 즉 ceil 함수는 양의 실수인 경우 올림을 해준다고 생각하면 된다.

CEIL(1234.11)

-------------

         1235


SQL> select floor(1234.11) from dual;

1234.11의 정수형 최대 숫자는 1234이다. 즉 floor 함수는 양의 실수인 경우 내림을 해준다고 생각하면 된다.

FLOOR(1234.11)

--------------

          1234


SQL> select ceil(-1234.11) from dual;

ceil 함수는 음의 실수인 경우는 반대로 -1234 그대로 출력해준다.

CEIL(-1234.11)

--------------

         -1234


SQL> select floor(-1234.11) from dual;

floor 함수는 음의 실수인 경우 -1235 즉 하나 숫자를 올려서 출력해준다.

FLOOR(-1234.11)

---------------

          -1235


power 함수는 지수승을 출력해주는 함수이다.


SQL> select power(2,2) from dual;

2^2(2의 2승)을 출력해주는 명령어이다.

POWER(2,2)

----------

         4


sqrt는 반대로 제곱근(루트)을 출력해주는 함수이다.


SQL> select sqrt(16) from dual;

루트 16, 즉 4를 출력해준다.

  SQRT(16)

----------

         4


날짜함수

oracle에는 날짜 데이터형이 존재하며, 그에 따른 날짜형 함수 또한 존재한다.

sysdate 함수는 현재 날짜를 출력해준다. sysdate 함수는 ()를 쓰지않는다.


SQL> select sysdate from dual;

현재 날짜를 출력하라는 명령어

SYSDATE

--------

18/09/21


to_date 함수는 문자열을 날짜형 데이터로 바꿔주는 명령어이다.

SQL> select to_date('2018-09-29','yy-mm-dd') from dual;

'2018-09-22' 문자열을  날짜형 데이터로 바꿔라.

TO_DATE(

--------

18/09/29


to_char 함수는 반대로 날짜형 데이터를 문자로 변경해주는 명령어이다.


SQL> select to_char(sysdate,'yyyy-mm-dd') from dual;

현재 날짜를 'yyyy-mm-dd' 문자열 형태로 출력해라.

TO_CHAR(SYSDATE,'YYY

--------------------

2018-09-21


SQL> select to_char(sysdate,'dd-mm-yy') from dual;

현재 날짜를 'dd-mm-yy'형태로 출력해라.

TO_CHAR(SYSDATE,

----------------

21-09-18


SQL> select to_char(sysdate,'day-mon-yy') from dual;

현재 날짜를 'day-mon-yy'형태로 출력해라.

TO_CHAR(SYSDATE,'DAY-MON-YY')

------------------------------------------------

금요일-9월 -18


to_char은 숫자를 문자열 형태로 바꿀 때 사용한다.

SQL> select to_char(3275,'$9,999') from dual;

숫자를 $9,999 형태로 출력한다.

TO_CHAR(3275,'

--------------

 $3,275



extract 함수는 날짜형 데이터의 일부분을 추출할 때 사용한다.

SQL> select extract(year from sysdate) from dual;

현재날짜에서 연도를 추출해서 출력하라는 명령어.

EXTRACT(YEARFROMSYSDATE)

------------------------

                    2018


SQL> select extract(month from sysdate) from dual;

현재 날짜에서 월을 추출해서 출력하라는 명령어

EXTRACT(MONTHFROMSYSDATE)

-------------------------

                        9


SQL> select extract(day from sysdate) from dual;

현재 날자에서 일을 추출해서 출력하라는 명령어

EXTRACT(DAYFROMSYSDATE)

-----------------------

                     21



null 함수

NVL함수는 null이 있으면 이것을 다른 숫자나 문자로 대체하는 함수이다.

SQL> connect scott/tiger;

우선 scott 계정에 접속해주자.  scott 계정의 emp 테이블에서 실습을 진행한다.


SQL> select ename, comm from emp;

해당 테이블의 comm attribute를 보면 null 값이 있는 것을 확인 가능하다.

ENAME                      COMM

-------------------- ----------

SMITH

ALLEN                       300

WARD                        500

JONES

MARTIN                     1400

BLAKE

CLARK

KING

TURNER                        0

JAMES

FORD

MILLER


SQL> select ename, nvl(comm,0) from emp;

nvl함수를 통해 comm의 모든 null 값을 0으로 바꿔서 출력하라는 명령어이다.

ENAME                NVL(COMM,0)

-------------------- -----------

SMITH                          0

ALLEN                       300

WARD                       500

JONES                          0

MARTIN                   1400

BLAKE                          0

CLARK                          0

KING                           0

TURNER                        0

JAMES                          0

FORD                           0

MILLER                         0


12 rows selected.



nullif 함수는 반대로 특정 attribute 값을 null 값으로 수행할 떄 사용하는 명령어이다.


SQL> select deptno from emp;

우선 deptno를 출력해보자 여기서 30 값을 모두 null로 바꿔서 출력할 것이다.

    DEPTNO

----------

        20

        30

        30

        20

        30

        30

        10

        10

        30

        30

        20

        10


SQL> select nullif(deptno,30) from emp;

deptno 값이 30인 것을 모두 null로 바꿔서 출력하라는 명령어이다.

NULLIF(DEPTNO,30)

-----------------

               20



               20



               10

               10



               20

               10



조건문

oracle에서는 특정 조건을 걸어 출력을 바뀌게 할 수 있다.


1. simple case: 특정 attribute 값을 하나하나 지정해줄 떄 사용하는 방식이다.


SQL> select deptno,  ->deptno를 출력하고.

  2  case deptno  -> deptno가 만약

  3  when 10 then '기술부'  ->10인 경우에는 기술부를

  4  when 20 then '기획부'  ->20인 경우에는 기획부를

  5  else '총무부'  ->나머지 경우에는 총무부를 출력하며

  6  end "부서"  ->해당 필드명은 부서로 지정해라.

  7  from emp;


 DEPTNO  부서

----------  ------------------

        20  기획부

        30  총무부

        30  총무부

        20  기획부

        30  총무부

        30  총무부

        10  기술부

        10  기술부

        30  총무부

        30  총무부

        20  기획부




simple case는 decode 문으로 변경해서 출력이 가능하다.


SQL> select deptno, decode(deptno, 10, '기술부', 20, '기획부', 30, '총무부') from emp;

decode문의 처음은 필드명을 주고 그 후에 값, 출력형식을 반복한다.

여기서는 deptno가 10이면 기술부, 20이면 기획부, 30이면 총무부를 출력하라는 명령어로 해석이 가능하다.

DEPTNO DECODE(DEPTNO,10,'

---------- ------------------

        20  기획부

        30  총무부

        30  총무부

        20  기획부

        30  총무부

        30  총무부

        10  기술부

        10  기술부

        30  총무부

        30  총무부

        20  기획부



2.searched case 방식은 값을 하나하나 지정해주기보다 조건으로 지정해주는 방식이다.


SQL> select sal,  ->sal을 출력하고

  2  case when sal>=3000 then 'HIGH'  ->만약 sal이 3000이상이면 HIGH로

  3  when sal>=1000 then 'MID' ->만약 (3000미만) 1000이상이면 MID로

  4  else 'LOW' ->그 외의 경우 LOW로 출력하며

  5  end "GRADE"  -> 해당 필드명을 grade로 바꿔라 라는 명령어이다.

  6  from emp;


       SAL  GRADE

----------  --------

       800  LOW

      1600  MID

      1250  MID

      2975  MID

      1250  MID

      2850  MID

      2450  MID

      5000  HIGH

      1500  MID

       950   LOW

      3000  HIGH

serched 방식은 위처럼 특정 범위를 조건으로 할 수도 있으며, = 기호를 사용해서 simple처럼 특정 값을 조건으로 사용하는 것 모두 가능하다.