'분류 전체보기'에 해당되는 글 304건

  1. 2009.06.02 SQL연산자
  2. 2009.06.02 연산자 우선 순위
  3. 2009.06.02 정렬
  4. 2009.06.02 자형 함수
  5. 2009.06.02 숫자형 함수
  6. 2009.06.02 DUAL 테이블
  7. 2009.06.02 날짜형함수
  8. 2009.06.02 데이터형 변환
  9. 2009.06.02 TO_CHAR 함수
  10. 2009.06.02 기타 함수

SQL연산자

DB 2009. 6. 2. 13:55
연산자 설명
 BETWEEN a AND b  a와 b 사이에 있다. (a, b값 포함)
 IN (list)  list의 값 중 어느 하나와 일치 한다.
 LIKE  문자 형태와 일치한다. (%, _ 사용)
 IS NULL  NULL 값을 갖는다.
 NOT BETWEEN a AND b  a와 b 사이에 있지 않다. (a, b값 포함하지 않음)
 NOT IN (list)  list의 값과 일치 하지 않는다.
 NOT LIKE  문자 형태와 일치 하지 않는다.
 NOT IS NULL (10g에서는 IS NOT NULL을 쓴다.)  NULL값을 갖지 않는다.

1. BETWEEN 연산자
   : 두 값의 범위에 해당하는 행을 출력하기 위해 사용한다.
   1) EMP 테이블에서 급여가 1300 에서 1500 사이의 사원의 성명, 담당업무, 급여, 부서 번호를 출력하여라.

      SELECT ename, job, sal, deptno
      FROM emp
      WHERE sal BETWEEN 1300 AND 1500;

     결과>
      ENAME                    JOB                       SAL          DEPTNO
      -------------------- ------------------ ---------- ----------
      TURNER                   SALESMAN                     1500             30
      MILLER                   CLERK                            1300             10
      BETWEEN AND 구문을 사용할 때는 작은 값이 앞에 와야 한다.

      위의 예제에서 1500을 먼저 쓰고 1300을 뒤에 쓰면 선택된 레코드가 없다는 결과가 나온다.

      BETWEEN AND 구문을 사용하지 않고 AND구문을 사용해서 sal >= 1300 AND sal <=1500 이라고 해도 같은 결과가 출력된다.


2. IN 연산자

   : 목록에 있는 값에 대해서 출력하기 위해 사용한다.

   1) EMP 테이블에서 사원번호가 7902, 7788, 7566인 사원의 사원번호, 성명, 담당업무, 급여, 입사일자를 출력하여라.

       SELECT empno, ename, job, sal, hiredate
       FROM emp
       WHERE empno IN (7902, 7788, 7566);

      결과>

       EMPNO ENAME                JOB                       SAL          HIREDATE
       ----- -------------------- ------------------ ---------- --------
         7566 JONES                    MANAGER                       2975 81/04/02
         7788 SCOTT                    ANALYST                        3000 87/04/19
         7902 FORD                     ANALYST                         3000 81/12/03

       IN 구문을 OR절을 사용해서 empno = 7902 OR empno = 7788 OR empno = 7902 와 같이 사용해도 같은 결과가 출력된다.


3. LIKE 연산자

   1) 검색 STRING 값에 대한 와일드 카드 검색을 위해서 LIKE연산자를 사용한다.

   2) 검색 조건은 LITERAL 문자나 숫자를 포함할 수 있다.

   3) %는 문자가 없거나 하나 이상의 문자를, 즉 *와 같이 모든 것을 의미하고, _는 하나의 문자, 즉 ?와 같은 와일드카드로 사용된다.

   4) 패턴 일치 문자를 조합할 수 있다.

   5) %나 _에 대해서 검색하기 위해서는 Escape 식별자를 이용할 수 있다.

       예를 들어 X_Y가 포함된 값을 찾고 싶은데 _는 와일드카드 문자이므로 이 기능을 없애야 한다.

       그럴 때는 뒤에 ESCAPE문자를 지정해서 사용하면 된다.

       예) WHERE name LIKE '%X\_Y%' ESCAPE '\';

            ESCAPE문자를 \로 지정했다. \말고 다른 것으로 지정해도 된다.

   6) EMP 테이블에서 입사일자가 82년도에 입사한 사원의 사번, 성명, 담당업무, 급여, 입사일자, 부서번호를 출력하여라.

       SELECT empno, ename, job, sal, hiredate, deptno
        FROM emp
        WHERE hiredate LIKE '82%';

        위와 같이 명령을 내리면 hiredate 칼럼에 속한 투플 중에서 82로 시작하는 값은 모두 출력된다.


4. IS NULL 연산자

   NULL값을 조회할 때 사용한다.

   SELECT empno, ename, job, sal, hiredate, deptno
   FROM emp
   WHERE comm IS NULL;

   위와 같이 명령을 내리면 comm(보너스)이 NULL값인 레코드는 모두 출력된다.


5. NOT BETWEEN a AND b, NOT IN, NOT LIKE, NOT IS NULL은 앞서 설명한 연산자들의 반대의 명령을 실행하는 구문이라고 이해하자.

[출처] SQL연산자|작성자 이경모


'DB' 카테고리의 다른 글

[오라클] 패스워드 잊었을때  (0) 2012.01.11
비교 연산자  (0) 2009.06.02
연산자 우선 순위  (0) 2009.06.02
정렬  (0) 2009.06.02
자형 함수  (0) 2009.06.02
Posted by 으랏차
,

연산자 우선 순위

DB 2009. 6. 2. 13:55

1. 괄호

2. 숫자 연산자

3. 연결 연산자

4. 모든 비교 연산자

5. IS [NOT] NULL, LIKE, [NOT] IN

6. [NOT] BETWEEN

7. NOT 논리 연산자

8. AND 논리 연산자

9. OR 논리 연산자


여러 개의 연산자가 중복될 경우 위와 같은 우선 순위로 동작한다고 한다. 참고하자

'DB' 카테고리의 다른 글

비교 연산자  (0) 2009.06.02
SQL연산자  (0) 2009.06.02
정렬  (0) 2009.06.02
자형 함수  (0) 2009.06.02
숫자형 함수  (0) 2009.06.02
Posted by 으랏차
,

정렬

DB 2009. 6. 2. 13:54

ORDER BY절을 이용해서 데이터를 정렬할 수 있다.

`ORDER BY [컬럼] ASC(오름차순) 나 DESC(내림차순)` 와 같은 형식으로 사용한다.

ORDER BY [컬럼] 뒤에 아무 구문도 없으면 디폴트는 오름차순이다.

Null값의 경우에는 오름차순에서는 가장 뒤에, 내림차순에서는 가장 앞에 오게 된다.


SELECT empno, ename, job, sal, hiredate, deptno
FROM emp
ORDER BY hiredate;


위와 같이 SQL문을 작성하면 hiredate의 오름 차순으로 정렬되고, hiredate 뒤에 DESC를 넣어주면 내림차순으로 정렬된다.


SELECT empno, ename, job, sal, sal*12 annsal
FROM emp
ORDER BY annsal;

결과>

 EMPNO ENAME                JOB                       SAL     ANNSAL
 ----- -------------------- ------------------ ---------- ----------
 7369 SMITH                CLERK                     800       9600
 7900 JAMES                CLERK                     950      11400
 7876 ADAMS                CLERK                    1100      13200
 7521 WARD                 SALESMAN                 1250      15000
 7654 MARTIN               SALESMAN                 1250      15000
 7934 MILLER               CLERK                    1300      15600
 7844 TURNER               SALESMAN                 1500      18000
 7499 ALLEN                SALESMAN                 1600      19200
 7782 CLARK                MANAGER                  2450      29400
 7698 BLAKE                MANAGER                  2850      34200
 7566 JONES                MANAGER                  2975      35700

 EMPNO ENAME                JOB                       SAL     ANNSAL
 ----- -------------------- ------------------ ---------- ----------
 7788 SCOTT                ANALYST                  3000      36000
 7902 FORD                 ANALYST                  3000      36000
 7839 KING                 PRESIDENT                5000      60000


위 구문은 sal*12를 annsal로 alias시킨 명령문이다. alias시킨 칼럼도 오름차순 정렬이 되는 것을 확인할 수 있다.


 SELECT empno, ename, job, sal, sal*12 annsal
 FROM emp
 ORDER BY sal*12;

 결과>

  EMPNO ENAME                JOB                       SAL     ANNSAL
------ -------------------- ------------------ ---------- ----------
  7369 SMITH                CLERK                     800       9600
  7900 JAMES                CLERK                     950      11400
  7876 ADAMS                CLERK                    1100      13200
  7521 WARD                 SALESMAN                 1250      15000
  7654 MARTIN               SALESMAN                 1250      15000
  7934 MILLER               CLERK                    1300      15600
  7844 TURNER               SALESMAN                 1500      18000
  7499 ALLEN                SALESMAN                 1600      19200
  7782 CLARK                MANAGER                  2450      29400
  7698 BLAKE                MANAGER                  2850      34200
  7566 JONES                MANAGER                  2975      35700

 EMPNO ENAME                JOB                       SAL     ANNSAL
------ -------------------- ------------------ ---------- ----------
  7788 SCOTT                ANALYST                  3000      36000
  7902 FORD                 ANALYST                  3000      36000
  7839 KING                 PRESIDENT                5000      60000


 위 구문처럼 annsal로 alias시킨 것과 별개로 sal*12로 정렬시킨 것을 볼 수 있다.

 이처럼 계산식도 정렬에 활용할 수 있다.


 SELECT empno, ename, job, sal, sal*12 annsal
 FROM emp
 ORDER BY 5

 결과>

EMPNO ENAME                JOB                       SAL     ANNSAL
----- -------------------- ------------------ ---------- ----------
 7369 SMITH                CLERK                     800       9600
 7900 JAMES                CLERK                     950      11400
 7876 ADAMS                CLERK                    1100      13200
 7521 WARD                 SALESMAN                 1250      15000
 7654 MARTIN               SALESMAN                 1250      15000
 7934 MILLER               CLERK                    1300      15600
 7844 TURNER               SALESMAN                 1500      18000
 7499 ALLEN                SALESMAN                 1600      19200
 7782 CLARK                MANAGER                  2450      29400
 7698 BLAKE                MANAGER                  2850      34200
 7566 JONES                MANAGER                  2975      35700

EMPNO ENAME                JOB                       SAL     ANNSAL
----- -------------------- ------------------ ---------- ----------
 7788 SCOTT                ANALYST                  3000      36000
 7902 FORD                 ANALYST                  3000      36000
 7839 KING                 PRESIDENT                5000      60000


위 구문은 출력 칼럼 중 5번째 칼럼의 오름차순으로 정렬하라는 명령이다.

이처럼 칼럼의 순서로 지정해 줄 수도 있다.


정렬하려는 값이 같은 값이 여러 개라면 그것도 정렬해줄 수 있게하는 방법이 있다.

아래 구문을 참고하자.


SELECT ename, job, deptno, sal
FROM emp
ORDER BY deptno, sal DESC;


위 구문은 deptno의 오름차순으로 정렬하고 같은 값이 있으면 sal의 내림차순으로 정렬하라는 명령이다.

결과는 아래와 같다.

ENAME                JOB                    DEPTNO        SAL
-------------------- ------------------ ---------- ----------
KING                 PRESIDENT                  10       5000
CLARK                MANAGER                    10       2450
MILLER               CLERK                      10       1300
SCOTT                ANALYST                    20       3000
FORD                 ANALYST                    20       3000
JONES                MANAGER                    20       2975
ADAMS                CLERK                      20       1100
SMITH                CLERK                      20        800
BLAKE                MANAGER                    30       2850
ALLEN                SALESMAN                   30       1600
TURNER               SALESMAN                   30       1500

ENAME                JOB                    DEPTNO        SAL
-------------------- ------------------ ---------- ----------
MARTIN               SALESMAN                   30       1250
WARD                 SALESMAN                   30       1250
JAMES                CLERK                      30        950


문제> EMP 테이블에서 첫번째 정렬은 부서번호로, 두번째 정렬은 업무로, 세번째 정렬은 급여가 많은 순으로 정렬하여

         사원번호, 성명, 입사일자, 부서번호, 업무, 급여를 출력하여라.

          SELECT empno, ename, hiredate, deptno, job, sal
        FROM emp
        ORDER BY deptno, job, sal DESC;

[출처] 정렬|작성자 이경모

'DB' 카테고리의 다른 글

SQL연산자  (0) 2009.06.02
연산자 우선 순위  (0) 2009.06.02
자형 함수  (0) 2009.06.02
숫자형 함수  (0) 2009.06.02
DUAL 테이블  (0) 2009.06.02
Posted by 으랏차
,

자형 함수

DB 2009. 6. 2. 13:54

IT에서 함수는 기능이라고 이해하면 될 것 같다.

SQL 함수들은 기본적인 Query문을 더욱 강력하게 해주고 데이터 값을 조작하는데 사용된다.


문자를 입력 받고 문자와 숫자 값 모두를 RETURN 할 수 있는 문자형 함수가 있다.


1. LOWER 함수

   대소문자가 혼합되어 있거나 대문자인 문자열을 소문자로 변환한다.

   사용법>

      LOWER(column | expression)

   예>

      LOWER('MANAGER')  ==> manager

   문제> EMP 테이블에서 scott의 사원번호, 성명, 담당업무(소문자로), 부서번호를 출력하여라.

            SELECT empno, ename, LOWER(job), deptno

            FROM emp

            WHERE ename = 'scott';

           

               EMPNO ENAME                LOWER(JOB)             DEPTNO
              ----- -------------------- ------------------ ----------
                7788 SCOTT                analyst                    20


2. UPPER 함수

   대소문자가 혼합되어 있거나 소문자인 문자열을 대문자로 변환한다.

   사용법>

      UPPER(column | expression)

   예>

      UPPER('manager')  ==> MANAGER

   문제> EMP 테이블에서 scott의 사원번호, 성명, 담당업무, 부서번호를 출력하여라.

            SELECT empno, ename, job, deptno
            FROM emp
            WHERE ename = UPPER('scott');


            EMPNO ENAME                JOB                    DEPTNO
            ----- -------------------- ------------------ ----------
              7788 SCOTT                ANALYST                    20


3. INITCAP 함수

   각 단어의 첫번째 문자를 대문자로, 나머지 문자는 소문자로 변경한다.

   사용법>

      INITCAP(column | expressioni)

    예>

      INITCAP('ORACLE SERVER')  ==> Oracle Server

    문제> DEPT 테이블에서 컬럼의 첫 글자들만 대문자로 변환하여 모든 정보를 출력하여라.

             SELECT deptno, INITCAP(dname), INITCAP(loc)

             FROM dept;

          

             DEPTNO INITCAP(DNAME)               INITCAP(LOC)
             ------ ---------------------------- ------------
                   10 Accounting                   New York
                   20 Research                     Dallas
                   30 Sales                        Chicago
                   40 Operations                   Boston


4. CONCAT 함수

   두 개의 문자열을 연결한다. 두 개의 매개변수만 사용 가능.

   사용법>

      CONCAT(column1 | expression1, column2 | expression2)

   예>

      CONCAT('ORACLE', 'SERVER')  ==> ORACLESERVER


5. SUBSTR 함수

   지정된 길이만큼의 문자열을 추출한다.

   사용법>

      SUBSTR(column | expression, m, (,n))

   예>

      SUBSTR('000101-3234232', 8, 1) ==> 3

   문제> EMP 테이블에서 이름의 첫글자가 'K'보다 크고 'Y'보다 작은 사원의 사원번호, 이름, 업무, 급여, 부서번호를 출력하여라.

            단, 이름순으로 정렬하여라.

            SELECT empno, ename, job, sal, deptno
            FROM emp
            WHERE SUBSTR(ename, 1, 1) > 'K' AND SUBSTR(ename, 1, 1) < 'Y'

            // ename의 첫번째 글자니까 ename, 1, 1로 한것이다. ename 뒤에 1, 1의 의미는 1번째 자리부터 1자리까지 추출하는 것이다.

            // 만약 1, 3 이면 1번째 자리부터 3자리를 추출할 것이다.
            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


6. LENGTH 함수

   문자열의 길이를 숫자값으로 RETURN 한다.

   사용법> LENGTH(column | expression)

   예> LENGTH('000101-3234232')  ==> 14

   문제> EMP 테이블에서 부서가 20번인 사원의 사원번호, 이름, 이름의 자리수, 급여, 급여의 자리수를 출력하여라.

            SELECT empno, ename, LENGTH(ename), sal, LENGTH(sal)
            FROM emp
           WHERE deptno = 20;


           EMPNO ENAME                LENGTH(ENAME)        SAL LENGTH(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


7. INSTR 함수

   명명된 문자의 위치를 숫자 값으로 RETURN 한다.

   사용법> INSTR(column | expression, m(,n))

   예> LENGTH('MILLER', 'L', 1, 2) ==> 4

   문제> EMP 테이블에서 이름 중 'L'자의 위치를 출력하여라.

            SELECT ename, INSTR(ename, 'L') e_null, INSTR(ename, 'L', 1, 1) e_11,
            INSTR(ename, 'L', 1, 2) e_12, INSTR(ename, 'L', 4, 1) e_41,
            INSTR(ename, 'L', 4, 2) e_42

            // ename, 'L', 4, 2 의 의미는 enama의 4번째 자리를 기준으로 2번째 자리부터 L을 검색해서 위치를 리턴하는 것이다.
            FROM emp
            ORDER BY ename;


            ENAME                    E_NULL       E_11       E_12       E_41       E_42
            -------------------- ---------- ---------- ---------- ---------- ----------
             ADAMS                         0          0          0          0          0
             ALLEN                         2          2          3          0          0
             BLAKE                         2          2          0          0          0
             CLARK                         2          2          0          0          0
             FORD                          0          0          0          0          0
             JAMES                         0          0          0          0          0
             JONES                         0          0          0          0          0
             KING                          0          0          0          0          0
             MARTIN                        0          0          0          0          0
             MILLER                        3          3          4          4          0
             SCOTT                         0          0          0          0          0

            ENAME                    E_NULL       E_11       E_12       E_41       E_42
            -------------------- ---------- ---------- ---------- ---------- ----------
             SMITH                         0          0          0          0          0
             TURNER                        0          0          0          0          0
             WARD                          0          0          0          0          0


8. LPAD 함수

    문자값을 좌측부터 채운다.

    사용법> LPAD(column | expression, n, 'string')

    예) LPAD('MILLER', 10, '*') => ****MILLER

         // 10자리의 공간을 확보하고 MILLER를 넣고 남은 자리에 *가 들어가게 되는 것이다.

         // 만약 실제 데이터보다 확보한 공간이 작으면 그 확보한 공간까지만 데이터가 출력된다.


9. RPAD 함수

   문자값을 우측부터 채운다.

   나머지 사용법이나 예는 위에 LPAD의 형식이다. 결과는 string이 우측부터 채워진다.


10. TRIM 함수

   왼쪽 문자를 지우는 함수이다.

   사용법> TRIM(leading/trailing/both trim_character FROM trim_source)

              leading은 왼쪽에 있는 문자를 지우는 옵션이고, trailing은 오른쪽 문자, both는 양쪽에 있는 문자를 지우는 옵션이다.

              디폴트는 both이다.

              trim은 가장자리에 있는 문자만 지우고 가운데에 있는 문자는 지우지 못한다.

              앞 뒤 공백을 지우는 데 쓰면 유용하겠다.

   예> TRIM('H' FROM 'HelloWorld')  ==> elloWorld

   문제> EMP 테이블에서 10번 부서의 사원에 대하여 담당 업무 중 좌측에 'M'을 삭제하여 출력하여라.

            SELECT TRIM('M' FROM job)
            FROM emp
            WHERE deptno = 10;


            TRIM('M'FROMJOB)
            ------------------
            ANAGER
            PRESIDENT
            CLERK


11. REPLACE 함수

   특정 문자열을 대신하는 함수이다.

   사용법> REPLACE(column | expression1, 'string1', 'string2')

   예> REPLACE('JACK and JUE', 'J', 'BL')  ==> BLACK and BLUE

   문제> EMP 테이블에서 JOB에 'A'를 '$'로 바꾸어 출력하여라.

            SELECT job, REPLACE(job, 'A', '$')
            FROM emp;


            JOB                REPLACE(JOB,'A','$
           ------------------ ------------------
           CLERK              CLERK
           SALESMAN           S$LESM$N
           SALESMAN           S$LESM$N
           MANAGER            M$N$GER
           SALESMAN           S$LESM$N
           MANAGER            M$N$GER
           MANAGER            M$N$GER
           ANALYST            $N$LYST
           PRESIDENT          PRESIDENT
           SALESMAN           S$LESM$N
           CLERK              CLERK

           JOB                REPLACE(JOB,'A','$
          ------------------ ------------------
          CLERK              CLERK
          ANALYST            $N$LYST
          CLERK              CLERK


[출처] 문자형 함수|작성자 이경모


'DB' 카테고리의 다른 글

연산자 우선 순위  (0) 2009.06.02
정렬  (0) 2009.06.02
숫자형 함수  (0) 2009.06.02
DUAL 테이블  (0) 2009.06.02
날짜형함수  (0) 2009.06.02
Posted by 으랏차
,

숫자형 함수

DB 2009. 6. 2. 13:54

1. ROUND 함수

   명시된 소수점으로 반올림하는 함수이다.

   숫자를 n자리까지 반올림한다. n이 양수이면 소수자리를, 음수이면 정수 자리를 반올림한다.

   생략할 수 있으며, 생략할 경우 디폴트는 0 이다.

   사용법> ROUND(column | expression, n)

   예> ROUND(456.789, 2)  ==> 456.79

        ROUND(4567.678,0), //반올림을 하되 소수점 자리를 남기지 않는다.

      ROUND(456.678,2),  //반올림을 하되 소수점 2번째 자리까지 남긴다,

                         // 즉 소수 3번째자리에서 반올림하면 된다.

      ROUND(4567.678,-2) // -2가 붙으면 소수점을 기준으로 좌측에 2자리를 0으로 만든다.

                        // 0으로 만들되 반올림을 하면서 0으로 만든다.

 

2. TRUNC 함수

   ROUND가 반올림하는 함수였다면, TRUNC는 명시된 자리까지 절삭하는 함수이다.

   사용법> TRUNC(column1 | expresion1, n(

   예> TRUNC(456.789, 2)  ==> 456.78

       //뒤에 명시된 2자리까지만 남기고 나머지는 절삭한 값이다.

       TRUNC(4567.678)

       // 위와 같이 자리수를 지정하지 않으면 디폴트값은 0으로써 정수자리만 남기고,

       // 소수자리는 절삭한다.

       TRUNC(4567.678,0) // 위에 0을 생략한 것과 동일한 결과이다.
       TRUNC(4567.678,2), //소수 2자리까지 남기고 나머지는 절삭.

       TRUNC(4567.678,-2) // 소수점을 기준 좌측의 2자리를 0으로 만든다.

                          // ROUND와 차이점은 반올림을 하지 않는 것이다.

 

3. MOD 함수

   나눗셈 연산을 하고난 나머지 값을 구하는 함수이다.

   사용법> MOD(column1 | expression1, n)

   예> MOD(10, 3)  ==> 1

 

4. POWER 함수

   거듭제곱을 구하는 함수이다.

   사용법> POWER(column1 | expression1, n)

   예> POWER(2, 3)  ==> 8  //2의 3제곱이다.

 

5. SQRT 함수

   제곱근을 구하는 함수이다.

   사용법> SQRT(column1 | expression1)

   예> SQRT(4)  ==> 2

 

6. SIGN 함수

   주어진 숫자가 양수인지 음수인지 또는 0인지를 구하는 함수이다.

   사용법> SIGN(column1 | expression1)

   예> SIGN(100)  ==> 1

       // 양수이면 1을 출력, 0이면 0을 출력, 음수이면 -1을 출력한다.

 

7. CHR 함수

   아스키 코드에 해상하는 문자를 구하는 함수이다.

   사용법> CHR(column1 | expression1)

   예> CHR(65)  ==> A

[출처] 숫자형 함수|작성자 이경모

'DB' 카테고리의 다른 글

정렬  (0) 2009.06.02
자형 함수  (0) 2009.06.02
DUAL 테이블  (0) 2009.06.02
날짜형함수  (0) 2009.06.02
데이터형 변환  (0) 2009.06.02
Posted by 으랏차
,

DUAL 테이블

DB 2009. 6. 2. 13:53

DUAL 테이블은 가상의 테이블이라고 보면 될 것 같다.

어떤 값을 알고자 할 때, 굳이 실제 테이블에 결과를 보지 않아도 DUAL테이블을 사용하면 된다.

예를 들어 아래와 같이 ROUND함수를 써서 그 값을 조회해본다고 가정하자.

SELECT ROUND(4567.678), ROUND(4567.678,0),

             ROUND(4567.678,2), ROUND(4567.678,-2)

FROM dual;

여기서는 특정 테이블의 칼럼을 가져다가 쓰는 것이 아니고 실제 값을 입력한 것이기 때문에 굳이 실제 테이블이 필요없다. 이럴 때는 dual을 쓰는 것이 유용하다.

[출처] DUAL 테이블|작성자 이경모


'DB' 카테고리의 다른 글

자형 함수  (0) 2009.06.02
숫자형 함수  (0) 2009.06.02
날짜형함수  (0) 2009.06.02
데이터형 변환  (0) 2009.06.02
TO_CHAR 함수  (0) 2009.06.02
Posted by 으랏차
,

날짜형함수

DB 2009. 6. 2. 13:53

날짜 함수는 오라클 날짜에 대해 연산을 한다.

모든 날자 함수는 숫자값을 리턴하는데 MONTHS_BETWEEN을 제외하고는 DATE형을 리턴한다.


1. MONTHS_BETWEEN 함수

   1) 날짜와 날짜 사이의 월수를 계산한다.

   2) 결과는 음수 또는 양수가 될 수 있다.

   3) 결과의 정수부분은 월을, 소수부분은 일을 나타낸다.

   사용법> MONTHS_BETWEEN(date1, date2)

   예> MONTHS_BETWEEN(sysdate, hiredate)  ==> 212.04794

   문제> EMP 테이블에서 10번 부서원의 현재까지의 근무 월수를 계산하여 출력하여라.

      SELECT ename, hiredate, SYSDATE, MONTHS_BETWEEN(SYSDATE, hiredate) m_between,
       TRUNC(MONTHS_BETWEEN(SYSDATE, hiredate), 0) t_between
       FROM emp
       WHERE deptno = 10
       ORDER BY MONTHS_BETWEEN(SYSDATE, hiredate) DESC


      ENAME                HIREDATE SYSDATE   M_BETWEEN  T_BETWEEN
      -------------------- -------- -------- ---------- ----------
      CLARK                81/06/09 08/12/29 330.667913        330
      KING                 81/11/17 08/12/29 325.409848        325
      MILLER               82/01/23 08/12/29   323.2163        323


2. ADD_MONTHS 함수

   날짜에 월을 더하고 빼는 함수이다. 결과는 날짜형.

   사용법> ADD_MONTHS(date1, n)

   예> ADD_MONTHS(hiredate , 5)  => 82/06/23

        //기존의 날짜에서 5개월을 더한 값이다.

   문제> EMP 테이블에서 10번 부서원의 입사 일자로부터 5개월이 지난 후 날짜를 계산하여 출력.

      SELECT ename, hiredate, ADD_MONTHS(hiredate, 5) a_month
      FROM emp
      WHERE deptno = 10
      ORDER BY hiredate DESC;


      ENAME                HIREDATE A_MONTH
      -------------------- -------- --------
      MILLER               82/01/23 82/06/23
      KING                 81/11/17 82/04/17
      CLARK                81/06/09 81/11/09


3. NEXT_DAY 함수

   1) 명시된 요일의 돌아오는 날짜를 계산한다.

   2) 요일 뿐 아니라 숫자도 기술 가능(SUNDAY:1, MONDAY:2......)

   3) NLS_LANG이 KOREAN_KOREA.KO16KSC5601로 되어 있으면 한글도 사용 가능.

       월요일, 화요일...(월,화,수..와 같이 넣을 수 도 있다.)

   사용법> NEXT_DAY(date1, 'string' | n)

   예> NEXT_DAY(hiredate, 'FRIDAY')  ==> 82/01/29

         // 10g에서는 'FRIDAY', 'SUNDAY'와 같은 영문 표시형식이 안되는데,

         // 다른 표기법이 있을지도 므르겠지만 아무튼 위 표시형식은 안된다.

         NEXT_DAY(hiredate, '금요일')  ==> 82/01/29

   문제> EMP테이블에서 10번 부서원의 입사 일자로부터 돌아오는 금요일을 계산하여 출력하여라.

      SELECT ename, hiredate, NEXT_DAY(hiredate, '금요일') n_day,
      NEXT_DAY(hiredate, 6) n_6, NEXT_DAY(hiredate, 7) n_7, NEXT_DAY(hiredate, '금') n_금
      FROM emp
      WHERE deptno = 10
      ORDER BY hiredate DESC


      ENAME                HIREDATE N_DAY    N_6      N_7      N_금
      -------------------- -------- -------- -------- -------- --------
      MILLER               82/01/23 82/01/29 82/01/29 82/01/30 82/01/29
      KING                 81/11/17 81/11/20 81/11/20 81/11/21 81/11/20
      CLARK                81/06/09 81/06/12 81/06/12 81/06/13 81/06/12


4. LAST_DAY

   월의 마지막 날짜를 계산. 윤년, 평년은 자동 계산

   사용법> LAST_DAY(date1)

   예> LAST_DAY(hiredate)  ==> 81-11-30

   문제> EMP 테이블에서 입사한 달의 근무 일 수를 계산하여 출력하여라.

            단, 토요일과 일요일도 근무 일수에 포함한다.

       SELECT empno, ename, hiredate, LAST_DAY(hiredate) l_last,
       LAST_DAY(hiredate) - hiredate l_day
       FROM emp
       WHERE deptno = 10
       ORDER BY hiredate DESC


       EMPNO ENAME                HIREDATE L_LAST        L_DAY
       ----- -------------------- -------- -------- ----------
       7934 MILLER               82/01/23 82/01/31          8
       7839 KING                 81/11/17 81/11/30         13
       7782 CLARK                81/06/09 81/06/30         21


5. ROUND 함수

   날짜도 반올림이 가능하다. 7개월부터 올림된다고 이해하면 되겠다.

   사용법> ROUND(date1 [,fmt])

   예> ROUND('99-06-25', 'MONTH')  ==> 99-07-01

         ROUND('98-06-25', 'YEAR')  ==> 98-01-01


6. TRUNC 함수

    숫자형 함수와 마찬가지로 명시된 형식으로 절삭한다.

    사용법> TRUNC(date1, [,fmt])

    예> TRUNC('99-06-25', 'MONTH')  ==> 99-06-01

          TRUNC('99-06-25', 'YEAR')  ==> 99-01-01

   문제> EMP 테이블에서 10번 부서 중 입사한 달의 ROUND와 TRUNC 함수를 비교한다.

      SELECT ename, hiredate, ROUND(hiredate, 'MONTH') m_round,
      TRUNC(hiredate, 'MONTH') m_trunc, ROUND(hiredate, 'YEAR') y_round,
      TRUNC(hiredate, 'YEAR') y_trunc
      FROM emp
      WHERE deptno = 10
      ORDER BY hiredate DESC;


      ENAME                HIREDATE M_ROUND  M_TRUNC  Y_ROUND  Y_TRUNC
      -------------------- -------- -------- -------- -------- --------
      MILLER               82/01/23 82/02/01 82/01/01 82/01/01 82/01/01
      KING                 81/11/17 81/12/01 81/11/01 82/01/01 81/01/01
      CLARK                81/06/09 81/06/01 81/06/01 81/01/01 81/01/01

[출처] 날짜형함수|작성자 이경모


'DB' 카테고리의 다른 글

숫자형 함수  (0) 2009.06.02
DUAL 테이블  (0) 2009.06.02
데이터형 변환  (0) 2009.06.02
TO_CHAR 함수  (0) 2009.06.02
기타 함수  (0) 2009.06.02
Posted by 으랏차
,

데이터형 변환

DB 2009. 6. 2. 13:52

오라클은 데이터를 적용할 DB의 데이터형이 서로 다르더라도 형변환에 의해 데이터를 사용할 수 있게 한다.

오라클 시스템에서 자동으로 변환해주는 암시적인 데이터형 변환과 변환 함수를 통한 명시적인 데이터형 변환으로 나눌 수 있겠다.


1. 암시적인 데이터형 변환

   값 할당시 오라클 서버는 아래와 같이 자동으로 변환할 수 있다.

  

 FROM

 TO

 VARCHAR2 or CHAR  NUMBER
 VARCHAR2 or CHAR  DATE
 NUMBER  VARCHAR2
 DATE  VARCHAR2

   CHAR에서 NUMBER로의 변환은 문자열이 적절한 숫자로 나타낼 수 있는 경우에만 가능하고,

   CHAR에서 DATE로의 변환은 디폴트 데이터형이 같을 경우에만 가능하다.

   비록 암시적인 데이터형 변환을 이용할 수 있더라도, SQL문장의 안정성을 위해서

   명시적 데이터형 변환을 할 것을 권장한다.


2. 명시적인 데이터형 변환

   SQL은 변환 함수를 통하여 어떤 데이터형의 값을 다른 데이터형의 값으로 변환 해준다.

[출처] 데이터형 변환|작성자 이경모


'DB' 카테고리의 다른 글

DUAL 테이블  (0) 2009.06.02
날짜형함수  (0) 2009.06.02
TO_CHAR 함수  (0) 2009.06.02
기타 함수  (0) 2009.06.02
그룹 함수  (0) 2009.06.02
Posted by 으랏차
,

TO_CHAR 함수

DB 2009. 6. 2. 13:52

숫자, 날짜, 문자열을 지정한 형식의 VARCHAR2 문자열로 변환하는 함수이다.


1. 날짜 형식을 변환하는 경우

   사용법> TO_CHAR(date, 'fmt')

   예> TO_CHAR(hiredate, 'RR/MM/DD')  => 81/11/17

   특정 포맷(fmt)형식으로 출력할 수 있다.


   <날짜 포맷 형식>

  

 구성 요소

 설명

 SCC or CC  세기 : BC 날짜에는 _S를 붙인다.
 Years in dates YYYY or SYYYY  년 : BC 날짜에는 _S를 붙인다.
 YYY or YY of Y  년의 마지막 3 또는 2 또는 1자리 수
 Y, YYY  콤마가 있는 년
 IYYY, IYY, IY, I  ISO 표준에 바탕을 둔 4, 3, 2 또는 1자리 수
 SYSER or YEAR

 문자로 표현된 년;

 BC날짜에는 _S를 붙인다.

 BC or AD  BC / AD 지시자
 B.C or A.D  .이 있는 BC/AD 지시자
 Q  년의 4분의 1 (Quarter)
 MM  두 자리 값의 월(숫자)
 MONTH  월의 Full Name
 MON  세 자리의 약어로 된 월 이름
 RM  로마 숫자 월
 WW or W  년이나 월의 주
 DDD or DD or D  년, 월 또는 주의 일
 DAY  요일의 Full Name
 DY  세 자리 약어로 된 요일 이름
 J

 Julian day;

 BC4713년 12월 31일 이후의 요일 수


   <시간 포맷 형식>

 구성 요소

 설명

 AM or PM  정오 지시자
 A.M or P.M  .이 있는 정오 지시자
 HH or HH12 or HH24  하루 중 시간 (1~12, 0~23)
 MI  분(0~59)
 SS  초(0~59)
 SSSSS  자정 이후의 초 (0~86399)


   <기타 포맷 형식>

 구성 요소

 설명

 / . ,  사용 문자가 결과에 다시 나타난다.
 "of the"  인용 부호 내의 문자가 결과에 함께 출력


   <숫자에 영향을 주는 접미사>

 구성 요소

 설명

 TH  서수 (DDTH ==> 4TH)
 SP  명시한 수 (DDSP ==> FOUR)
 SPTH or THSP  명시한 서수 (DDSPTH ==> FOURTH)


   문제> EMP 테이블에서 10번 부서 중 입사 일자를 '01/05/1981'과 '1998년 1월 1일'의 형태로

           출력하여라.

      SELECT ename, hiredate, TO_CHAR(hiredate, 'DD/MM/YYYY') eng, TO_CHAR

      (hiredate, 'yyyy"년" mm"월" dd"일"') kor
      FROM emp
      WHERE deptno = 10
      ORDER BY hiredate DESC;

     

      ENAME                          HIREDATE ENG             KOR
      ------------------------------ -------- --------------- ---------------
      MILLER                         82/01/23 23/01/1982      1982년 01월 23일
                                                    

      KING                           81/11/17 17/11/1981      1981년 11월 17일
                                                       

      CLARK                          81/06/09 09/06/1981      1981년 06월 09일
                                                       

2. 숫자 형식을 변환하는 경우

   1) 숫자 값을 문자로 변환할 때, 즉 NUMBER형을 VARCHAR2로 전환 할 때 사용.

   2) 이 기법은 연결(Concatenation) 시에 유용하다고 한다.

   3) 형식에 제공되는 자리수를 초과하는 숫자에 대해서는 #을 출력한다.


   <숫자형식 모델>

 요소  설명  예  결과
 9  출력폭을 결정.  999999

 1234 (값이 6자리가 안되므로 4자리만 나옴)

 0  빈자리를 0으로 채움  099999  001234
 $  달러 기호를 붙임  $999999  $1234
 L  지역 화폐 기호  L999999  \1234
 .  명시한 위치에 소수점  999999.99  1234.00
 ,  명시한 위치에 콤마  999,999  1,234
 MI  우측에 마이너스 기호  999999MI  1234- (값이 음수일 때만 -로 출력됨.)
 PR  음수를 <>로 묶음  999999PR  <1234>
 EEEE  지수 부호 표기  99.999EEEE  1.234E+03
 V  10을 n번 곱한다.  9999V99  123400 (V뒤에 있는 자리 수대로 곱함. 여기는 두 자리므로 100을 곱한다.)
 B  0을 공백으로 출력.  B9999.990  1234.00

   문제> EMP 테이블에서 20번 부서 중 급여 앞에 $를 삽입하고 3자리마다 ,를 출력하라.

      SELECT ename, sal, TO_CHAR(sal, '$999,999') sal_test
      FROM emp
      WHERE deptno = 20
      ORDER BY sal DESC;


      ENAME                                 SAL SAL_TEST
      ------------------------------ ---------- ------------
      SCOTT                                3000    $3,000
      FORD                                 3000    $3,000
      JONES                                2975    $2,975
      ADAMS                                1100    $1,100
      SMITH                                 800      $800

[출처] TO_CHAR 함수|작성자 이경모


'DB' 카테고리의 다른 글

날짜형함수  (0) 2009.06.02
데이터형 변환  (0) 2009.06.02
기타 함수  (0) 2009.06.02
그룹 함수  (0) 2009.06.02
GROUP BY  (0) 2009.06.02
Posted by 으랏차
,

기타 함수

DB 2009. 6. 2. 13:50

기타 함수 Oracle

2008/12/31 18:13

복사 http://blog.naver.com/kyungmer/130039963000

1. NVL 함수

   Null 값을 어떤 특정한 값(실제 값)으로 변환하는데 사용한다.

   사용법> NVL(expr1, expr2)

   예> NVL(comm, 0)


2. NVL2 함수

   값이 Null인 경우와 Null이 아닌 경우의 리턴값이 다르다.

   사용법> NVL2(col | expr, expr1, expr2)

   예> NVL2(comm, 'SAL+COMM', 'SAL')

      값이 Null이 아니면 'SAL+COMM'을, 값이 Null이면 'SAL'을 리턴한다.

   문제> EMP 테이블에서 모든 사원들의 이름, 급여, 보너스와 보너스가 있으면 SAL+COMM을,

            보너스가 없으면 SAL이라는 문자열을 출력하라.

      SELECT ename, sal, comm, NVL2(comm, 'SAL+COMM', 'SAL') income
      FROM emp;

  

      ENAME                       SAL       COMM INCOME
      -------------------- ---------- ---------- ---------------
      SMITH                       800            SAL
      ALLEN                      1600        300 SAL+COMM
      WARD                       1250        500 SAL+COMM
      JONES                      2975            SAL
      MARTIN                     1250       1400 SAL+COMM
      BLAKE                      2850            SAL
      CLARK                      2450            SAL
      SCOTT                      3000            SAL
      KING                       5000            SAL
      TURNER                     1500          0 SAL+COMM
      ADAMS                      1100            SAL

      ENAME                       SAL       COMM INCOME
      -------------------- ---------- ---------- ---------------
      JAMES                       950            SAL
      FORD                       3000            SAL
      MILLER                     1300            SAL


3. NULLIF 함수

   두 개의 값을 비교하여 같으면 Null 값을 리턴하고 서로 다른 값을 가지면 첫번째 expr을 리턴한다.

   사용법> NULLIF(expr1, expr2)

   예> NULLIF(comm, 0)


4. COALESCE 함수

   나열된 값을 순차적으로 체크하여 NULL이 아닌 값을 리턴해주는 함수.

   사용법> COALESCE(expr1, expr2....exprn)

   예> COALESCE(comm, sal, 10)

   문제> EMP 테이블에서 사원의 이름, 보너스 및 급여를 출력하는데 급여가 널이면 보너스를,

            보너스가 널이면 급여를 출력하시오.

      SELECT ename, sal, comm, COALESCE(sal, comm)
      FROM emp;


      ENAME                       SAL       COMM COALESCE(SAL,COMM)
      -------------------- ---------- ---------- ------------------
      SMITH                       800                           800
      ALLEN                      1600        300               1600
      WARD                       1250        500               1250
      JONES                      2975                          2975
      MARTIN                     1250       1400               1250
      BLAKE                      2850                          2850
      CLARK                      2450                          2450
      SCOTT                      3000                          3000
      KING                       5000                          5000
      TURNER                     1500          0               1500
      ADAMS                      1100                          1100

      ENAME                       SAL       COMM COALESCE(SAL,COMM)
      -------------------- ---------- ---------- ------------------
      JAMES                       950                           950
      FORD                       3000                          3000
      MILLER                     1300                          1300


5. DECODE 함수

   CASE나 IF-ELSE 문의 역할을 한다.

   사용법> DECODE(col | expr, search1, result1[,search2, result2, ...][,default])

   예> DECODE(deptno, 10, sal*1.1, 20, sal*1.5, sal*1.2, sal)

   문제> EMP 테이블에서 JOB이 ANALYST이면 급여 증가는 10%이고 JOB이 CLERK이면

            급여 증가는 15%이고 JOB이 MANAGER이면 급여 증가는 20%이다.

            다른 업무에 대해서는 급여 증가가 없다.

            사원번호, 이름, 업무, 급여, 증가된 급여를 출력하여라.

     

      SELECT empno, ename, job, sal,
      DECODE(job, 'ANALYST', sal*1.1, 'CLERK', sal*1.15, 'MANAGER', sal+sal*0.2, sal) d_sal
      FROM emp
      ORDER BY sal DESC;


      EMPNO ENAME                JOB                       SAL      D_SAL
      ----- -------------------- ------------------ ---------- ----------
       7839 KING                 PRESIDENT                5000       5000
       7902 FORD                 ANALYST                  3000       3300
       7788 SCOTT                ANALYST                  3000       3300
       7566 JONES                MANAGER                  2975       3570
       7698 BLAKE                MANAGER                  2850       3420
       7782 CLARK                MANAGER                  2450       2940
       7499 ALLEN                SALESMAN                 1600       1600
       7844 TURNER               SALESMAN                 1500       1500
       7934 MILLER               CLERK                    1300       1495
       7521 WARD                 SALESMAN                 1250       1250
       7654 MARTIN               SALESMAN                 1250       1250

       EMPNO ENAME                JOB                       SAL      D_SAL
       ----- -------------------- ------------------ ---------- ----------
        7876 ADAMS                CLERK                    1100       1265
        7900 JAMES                CLERK                     950     1092.5
        7369 SMITH                CLERK                     800        920


6. CASE 함수

   DECODE 함수와 동일하나 지원하지 않는 범위 비교가 가능하다.

   사용법> CASE col | expr WHEN condition1 THEN result1

                                      [WHEN condition2 THEN result2

                                                  ..........

                                       WHEN conditionN THEN resultN

                                       ELSE result]

               END

   예> CASE job WHEN 'ANALYST' THEN sal *1.1

                       WHEN 'CLERK' THEN sal*1.15

                       WHEN 'MANAGER' THEN sal*1.2

                       ELSE sal

         END

   위에 5.DECODE함수에서 나왔던 문제를 CASE함수로 풀면 아래와 같다.

   SELECT empno, ename, job, sal,
      CASE job WHEN 'ANALYST' THEN sal*1.1
               WHEN 'CLERK' THEN sal*1.15
               WHEN 'MANAGER' THEN sal*1.2
               ELSE sal
      END d_sal
   FROM emp
   ORDER BY sal DESC;

[출처] 기타 함수|작성자 이경모

'DB' 카테고리의 다른 글

데이터형 변환  (0) 2009.06.02
TO_CHAR 함수  (0) 2009.06.02
그룹 함수  (0) 2009.06.02
GROUP BY  (0) 2009.06.02
Join  (0) 2009.06.02
Posted by 으랏차
,