본문 바로가기
카테고리 없음

ORACLE 7

by Real Iron 2007. 3. 30.

문제1) 사원명, 입사일, 일사일로 부터 90일후의 날짜, 급여 출력

SQL> SELECT ENAME, HIREDATE, HIREDATE + 90, SAL
  2  FROM EMP;

ENAME      HIREDATE HIREDATE        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
JAMES      81/12/03 82/03/03        950
FORD       81/12/03 82/03/03       3000
MILLER     82/01/23 82/04/23       1300


문제2) 부서번호, 사언면, 달의 근무일수 출력

SQL> SELECT DEPTNO, ENAME, LAST_DAY(HIREDATE) - HIREDATE "첫 달 근무일수"
  2  FROM EMP;

    DEPTNO ENAME      첫 달 근무일수
---------- ---------- --------------
        20 SMITH                  14
        30 ALLEN                   8
        30 WARD                    6
        20 JONES                  28
        30 MARTIN                  2
        30 BLAKE                  30
        10 CLARK                  21
        20 SCOTT                  11
        10 KING                   13
        30 TURNER                 22
        20 ADAMS                   8
        30 JAMES                  28
        20 FORD                   28
        10 MILLER                  8

14 개의 행이 선택되었습니다.
         

문제3) 사원명, 입사일( YYYY-MM-DD ) 형태로 출력

SQL> SELECT ENAME, TO_CHAR(HIREDATE,'YYYY/MM/DD')
  2  FROM EMP
  3  ;

ENAME      TO_CHAR(HI
---------- ----------
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
JAMES      1981/12/03
FORD       1981/12/03
MILLER     1982/01/23


문제4) 부서번호, 사원명, 입사일, 현재날짜, 근무일수 ,근무년수, 근무월수, 근무주수를 출력
          경우에 따라 절삭이나 내림하세요.

  1  SELECT DEPTNO, ENAME, HIREDATE, SYSDATE, ROUND(SYSDATE-HIREDATE) "근무일수", ROUND(MONTHS_BETWEEN(SYSDATE,HIREDATE) /12) "근무년수" ,ROUND(MONTHS
_BETWEEN(SYSDATE,HIREDATE)) "근무월수", TRUNC(((SYSDATE - HIREDATE)/7)) "근무주수"
  2* FROM EMP
  3  ;

    DEPTNO ENAME      HIREDATE SYSDATE    근무일수   근무년수   근무월수   근무주수
---------- ---------- -------- -------- ---------- ---------- ---------- ----------
        20 SMITH      80/12/17 07/03/30       9600         26        315       1371
        30 ALLEN      81/02/20 07/03/30       9535         26        313       1362
        30 WARD       81/02/22 07/03/30       9533         26        313       1361
        20 JONES      81/04/02 07/03/30       9494         26        312       1356
        30 MARTIN     81/09/28 07/03/30       9315         26        306       1330
        30 BLAKE      81/05/01 07/03/30       9465         26        311       1352
        10 CLARK      81/06/09 07/03/30       9426         26        310       1346
        20 SCOTT      87/04/19 07/03/30       7286         20        239       1040
        10 KING       81/11/17 07/03/30       9265         25        304       1323
        30 TURNER     81/09/08 07/03/30       9335         26        307       1333
        20 ADAMS      87/05/23 07/03/30       7252         20        238       1035
        30 JAMES      81/12/03 07/03/30       9249         25        304       1321
        20 FORD       81/12/03 07/03/30       9249         25        304       1321
        10 MILLER     82/01/23 07/03/30       9198         25        302       1313





사용자 생성
CREATE USER CP1
IDENTIFIED BY CP1;

SQL> CREATE USER CP1
  2  IDENTIFIED BY CP1;

사용자가 생성되었습니다.

SQL> CONN CP1/CP1
ERROR:
ORA-01045: user CP1 lacks CREATE SESSION privilege; logon denied

권한
GRANT CONNECT, RESOURCE
TO CP1;
*SYS 가 권한 부여

SQL> CONN /AS SYSDBA
연결되었습니다.
SQL> GRANT CONNECT, RESOURCE
  2  TO CP1;

권한이 부여되었습니다.

SQL> @c:\oracle\ora92\sqlplus\demo\demobld.sql

SQL> select * from dept
  2  ;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
        |
        |
primarykey
각 행의 이름
컬럼과 컬럼을 구분짖는다
식별키
값이 중복 될수 없다



insert into 테이블명(컬럼명)
VALUES(값1,값2,값3....)

예제 DEPTNO:50 /DNAME: '인사부' LOC: '서울'

SQL> INSERT INTO DEPT(DEPTNO,DNAME,LOC) * 모든 컬럼에 값을 넣으려면 생략도 가능.
  2  VALUES(50,'인사부','서울');




데이터 조작어


데이터 조작어
데이터 입력
데이터 수정
데이터 삭제
트랜잭션 관리


데이터 조작어

# 데이터 조작어 (DML:Data Manpulation Language)란?
-테이블에 새로운 데이터를 입력하거나 기존 데이터를 수정 또는 삭제하기 위한 명령어
#종류
-INSERT : 새로운 데이터 입력 명령어
-UPDATE : 기존 데이터 수정 명령어
-DELETE : 기존 데이터 삭제 명령어
#트랜잭션
-여러 개의 명령문을 하나의 논리적인 작업단위로 처리하는 기능
-트랜잭셔 관리 명령어
  COMMIT : 트랜잭션의 정상적인 종료를 위한 명령어
  ROLLBACK : 트랜잭션의 비정상적인 중단을 위한 명령어


데이터 입력
#개요
-테이블에 데이터를 입력하기 위한 명령인 INSERT 명령문 사용
-데이터 입력 방법
   단일 행 입력 : 한번에 하나의 행을 테이블에 입력하는 방법
   다중 행 입력 : 서브쿼리를 이용하여 한번에 여러 행을 동시에 입력하는 방법


단일 행 입력 방법
-INTO 절에 명시한 칼럼에 VALUES 절에서 지정한 칼럼 값을 입력
-INTO 절에 칼럼을 명시하지 않으면 테이블 생성시 정의한 칼럼 순서와 동일한 순서로 입력
-입력되는 데이터 타입은 칼럼의 데이터 타입과 동일해야 함
-입력되는 데이터의 크기는 칼럼의 크기보다 작거나 동일해야 함
-CHAR, VARCHAR2, DATE 타입의 입력 데이터는 단일인용부호(‘’)로 묶어서 입력


c:\oracle\ora92\sqlplus\demo



문제1) DEPTNO : 52    DNAME : 영업부 입력

SQL> INSERT INTO DEPT(DEPTNO,DNAME)
  2  VALUES(52,'영업부')
  3  ;

1 개의 행이 만들어졌습니다.

SQL> SELECT * FROM DEPT;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
        50 인사부         서울
        51 회계부         인천
        52 영업부



NULL 입력
-데이터를 입력하는 시점에서 해당 컬럼 값을 모르거나, 미확정
#묵시적인 방법
-INSERT INTO 절에 해당 칼럼 이름과 값을 생략
-해당 칼럽에 NOT NULL 제약조건이 지정된 경우 불가능
#명시적 방법
-VALUES 절의 칼럽 값에 NULL , ‘’ 사용

문제2) DEPTNO : 53

INSERT INTO DEPT(DEPTNO)


SQL> INSERT INTO DEPT
  2  VALUES(53,NULL,'');

1 개의 행이 만들어졌습니다.

SQL> SELECT * FROM DEPT;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
        50 인사부         서울
        51 회계부         인천
        52 영업부
        53

문제 EMP 입력, EMPNNO:123 , ENAME:망고, HIREDATER:오늘

SQL> INSERT INTO EMP(EMPNO,ENAME,HIREDATE)
  2  VALUES(123,'망고',SYSDATE);



문제)124,무대리,2007/01/01


SQL> INSERT INTO EMP(EMPNO,ENAME,HIREDATE)
  2  VALUES(124,'무대리','2007/01/01')
  3  ;

1 개의 행이 만들어졌습니다.







치환변수   : 입력 받은 값을 임시로 저장
&치환변수    &(치환)변수명- 여러번 사용가능하다
&&치환변수                     - 한번 가능하다

INSERT INTO EMP(EMPNO,ENAME,SAL)
VALUES(~~~,"~~~',~~~);

INSERT INTO EMP(EMPNO,ENAME,SAL)
VALUES(&&EMPLOYNAME,'&&ENPNOYNAMEL',"&&EMPSA;);


1 개의 행이 만들어졌습니다.

SQL> SELECT * FROM EMP;

     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 80/12/17        800                    20
      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 82/12/09       3000                    20
      7839 KING       PRESIDENT            81/11/17       5000                    10
      7844 TURNER     SALESMAN        7698 81/09/08       1500          0         30
      7876 ADAMS      CLERK           7788 83/01/12       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
       123 망고                            07/03/30
       124 무대리                          07/01/01
       130 마부장                                         2000




SQL> INSERT INTO EMP(EMPNO,ENAME,SAL)
  2  VALUES(&REMPNO,'&REMPNAME',&RSAL)
  3  ;
rempno의 값을 입력하십시오: 131
rempname의 값을 입력하십시오: 권부장
rsal의 값을 입력하십시오: NULL
구   2: VALUES(&REMPNO,'&REMPNAME',&RSAL)
신   2: VALUES(131,'권부장',NULL)

1 개의 행이 만들어졌습니다.

SQL> /
rempno의 값을 입력하십시오: 132
rempname의 값을 입력하십시오: 표희태
rsal의 값을 입력하십시오: 300
구   2: VALUES(&REMPNO,'&REMPNAME',&RSAL)
신   2: VALUES(132,'표희태',300)

1 개의 행이 만들어졌습니다.

SQL> /
rempno의 값을 입력하십시오: 133
rempname의 값을 입력하십시오: 이성민
rsal의 값을 입력하십시오: 500
구   2: VALUES(&REMPNO,'&REMPNAME',&RSAL)
신   2: VALUES(133,'이성민',500)

1 개의 행이 만들어졌습니다.

SQL> /
rempno의 값을 입력하십시오: 134
rempname의 값을 입력하십시오: 정영선
rsal의 값을 입력하십시오: 600
구   2: VALUES(&REMPNO,'&REMPNAME',&RSAL)
신   2: VALUES(134,'정영선',600)

1 개의 행이 만들어졌습니다.


SQL> SELECT EMPNO,ENAME,SAL
  2  FROM EMP
  3  WHERE EMPNO BETWEEN 130 AND 135
  4  ;

     EMPNO ENAME             SAL
---------- ---------- ----------
       130 마부장           2000
       131 권부장
       132 표희태            300
       133 이성민            500
       134 정영선            600



문제 USER가 입력한 사원번호에 한해 (&치환변수 이용, 변수명 DDNO)
       사원번호, 사원명, 부서번호를 조회한다.



SQL> SELECT EMPNO,ENAME,DEPTNO
  2  FROM EMP
  3  WHERE EMPNO = &DDNO;
ddno의 값을 입력하십시오: 131
구   3: WHERE EMPNO = &DDNO
신   3: WHERE EMPNO = 131

     EMPNO ENAME          DEPTNO
---------- ---------- ----------
       131 권부장

SQL> /
ddno의 값을 입력하십시오: 132
구   3: WHERE EMPNO = &DDNO
신   3: WHERE EMPNO = 132

     EMPNO ENAME          DEPTNO
---------- ---------- ----------
       132 표희태

SQL> 133
SP2-0226: 부적합한 줄 번호 입니다
SQL> /
ddno의 값을 입력하십시오: 133
구   3: WHERE EMPNO = &DDNO
신   3: WHERE EMPNO = 133

     EMPNO ENAME          DEPTNO
---------- ---------- ----------
       133 이성민




ACCEPT

-- ACCEPT [변수명] PROMPT '메세지'

ACCEPT EENAME PROMPT '찾으시는 사원이름은 뭐죠?'

SQL> ACCEPT EENAME PROMPT '찾으시는 사원이름은 뭐죠?'
찾으시는 사원이름은 뭐죠?SCOTT             * 변수에 저장되어 있다

SQL> SELECT ENAME, SAL, COMM
  2  FROM EMP
  3  WHERE ENAME='EENAME'
  4  ;

선택된 레코드가 없습니다.

SQL> SELECT ENAME, SAL, COMM
  2  FROM EMP
  3  WHERE ENAME='&EENAME'
  4  ;
구   3: WHERE ENAME='&EENAME'
신   3: WHERE ENAME='SCOTT'

ENAME             SAL       COMM
---------- ---------- ----------
SCOTT            3000



데이터 삭제

문법)
DELETE FROM 테이블명
WHERE 조건




SQL> SELECT * FROM EMP;

     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 80/12/17        800                    20
      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 82/12/09       3000                    20
      7839 KING       PRESIDENT            81/11/17       5000                    10
      7844 TURNER     SALESMAN        7698 81/09/08       1500          0         30
      7876 ADAMS      CLERK           7788 83/01/12       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
       130 마부장                                         2000
       131 권부장
       132 표희태                                          300
       133 이성민                                          500
       134 정영선                                          600


SQL> DELETE FROM EMP
  2  WHERE ENAME='125'
  3  ;

1 행이 삭제되었습니다.

SQL> DELETE FROM EMP
  2  WHERE ENAME='126'
  3  ;

2 행이 삭제되었습니다.

SQL> DELETE FROM EMP
  2  WHERE EMPNO=123
  3  ;

1 행이 삭제되었습니다.

SQL> DELETE FROM EMP
  2  WHERE EMPNO=124
  3  ;

1 행이 삭제되었습니다.

SQL> DELETE FROM EMP
  2  WHERE EMPNO BETWEEN 130 AND 134
  3  ;

5 행이 삭제되었습니다.

SQL> SELECT EMPNO, ENAME, SAL
  2  FROM EMP
  3  ;

     EMPNO ENAME             SAL
---------- ---------- ----------
      7369 SMITH             800
      7499 ALLEN            1600
      7521 WARD             1250
      7566 JONES            2975
      7654 MARTIN           1250
      7698 BLAKE            2850
      7782 CLARK            2450
      7788 SCOTT            3000
      7839 KING             5000
      7844 TURNER           1500
      7876 ADAMS            1100
      7900 JAMES             950
      7902 FORD             3000
      7934 MILLER           1300

14 개의 행이 선택되었습니다.



숙제 USER가 지정한 컬럼을 내림차순 정렬하여
       사원번호, 사원명, 업무, 조회 컬럼을  출력하여라
       (정렬기준이 되는 컬럼과 조회 컬럼 => &치환변수)
       (조회컬럼의 치환변수명은 COLUMN_NAME)


SQL> select empno, ename, job, &COLUMN_NAME
  2  FROM EMP
  3  ORDER BY &USER DESC;
column_name의 값을 입력하십시오: SAL
구   1: select empno, ename, job, &COLUMN_NAME
신   1: select empno, ename, job, SAL
user의 값을 입력하십시오: ENAME
구   3: ORDER BY &USER DESC
신   3: ORDER BY ENAME DESC

     EMPNO ENAME      JOB              SAL
---------- ---------- --------- ----------
      7521 WARD       SALESMAN        1250
      7844 TURNER     SALESMAN        1500
      7369 SMITH      CLERK            800
      7788 SCOTT      ANALYST         3000
      7934 MILLER     CLERK           1300
      7654 MARTIN     SALESMAN        1250
      7839 KING       PRESIDENT       5000
      7566 JONES      MANAGER         2975
      7900 JAMES      CLERK            950
      7902 FORD       ANALYST         3000
      7782 CLARK      MANAGER         2450    
      7698 BLAKE      MANAGER         2850
      7499 ALLEN      SALESMAN        1600
      7876 ADAMS      CLERK           1100