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

ORACLE 3

by Real Iron 2007. 3. 29.

문제1) EMP TABLER 구조 살펴보기

SQL> DESC EMP;
 이름                                      널?      유형
 ----------------------------------------- -------- ----------------------------
 EMPNO                                     NOT NULL NUMBER(4)
 ENAME                                              VARCHAR2(10)
 JOB                                                VARCHAR2(9)
 MGR                                                NUMBER(4)
 HIREDATE                                           DATE
 SAL                                                NUMBER(7,2)
 COMM                                               NUMBER(7,2)
 DEPTNO                                             NUMBER(2)


문제2) 급여를 기준으로 오름차순 정렬하여

         사원이름, 사원번호, 업무, 급여를 출력


SQL> SET LINESIZE 150 PAGESIZE 100
SQL> SELECT ENAME,EMPNO,JOB,SAL
  2  FROM EMP
  3  ;

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

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


문제3) SCOTT 사원의

         사원번호, 사원명, 부서번호를 출력하라


SQL> SELECT EMPNO,ENAME,DEPTNO
  2  FROM EMP
  3  WHERE ENAME='SCOTT'
  4  ;

     EMPNO ENAME          DEPTNO
---------- ---------- ----------
      7788 SCOTT              20


문제4) 사원번호가 7499이거나 7251이거나 7566인 사원의

          모든 정보를 출력하고

          이때 커미션이 널 일경우에는 0으로 출력하시요


SQL> SELECT EMPNO, ENAME, JOB, SAL, COMM, MGR, HIREDATE, DEPTNO, NVL(COMM,0)
  2  FROM EMP
  3  WHERE EMPNO = 7499 OR EMPNO=7251 OR EMPNO=7566
  4  ;

     EMPNO ENAME      JOB              SAL       COMM        MGR HIREDATE     DEPTNO NVL(COMM,0)
---------- ---------- --------- ---------- ---------- ---------- -------- ---------- -----------
      7566 JONES      MANAGER         2975                  7839 81/04/02         20           0
      7499 ALLEN      SALESMAN        1600        300       7698 81/02/20         30         300

SQL>



문제5) 5번을 출력물을

         입사일이 빠른 사원에서 늦은 사원순으로 하여 출력하시오. 내림차순


SQL> SELECT EMPNO, ENAME, JOB, SAL, COMM, MGR, HIREDATE, DEPTNO, NVL(COMM,0)
  2  FROM EMP
  3  WHERE EMPNO = 7499 OR EMPNO=7251 OR EMPNO=7566
  4  ORDER BY HIREDATE DESC
  5  ;

     EMPNO ENAME      JOB              SAL       COMM        MGR HIREDATE     DEPTNO NVL(COMM,0)
---------- ---------- --------- ---------- ---------- ---------- -------- ---------- -----------
      7566 JONES      MANAGER         2975                  7839 81/04/02         20           0
      7499 ALLEN      SALESMAN        1600        300       7698 81/02/20         30         300







문제5) 5번을 출력물을                                                             *OR을 쓰냐 안쓰냐? 문제

   입사일이 빠른 사원에서 늦은 사원순으로 하여 출력하시오.   내림차순


SQL> SELECT EMPNO, ENAME, JOB, SAL, COMM, MGR, HIREDATE, DEPTNO, NVL(COMM,0)
  2  FROM EMP
  3  WHERE EMPNO = 7499 OR EMPNO=7251 OR EMPNO=7566
  4  ORDER BY HIREDATE DESC
  5  ;

     EMPNO ENAME      JOB              SAL       COMM        MGR HIREDATE     DEPTNO NVL(COMM,0)
---------- ---------- --------- ---------- ---------- ---------- -------- ---------- -----------
      7566 JONES      MANAGER         2975                  7839 81/04/02         20           0
      7499 ALLEN      SALESMAN        1600        300       7698 81/02/20         30         300



  3  WHERE EMPNO = 7499 OR EMPNO=7251 OR EMPNO=7566

더욱더 간단히 하는 방법 IN 연산자이다.


SQL> SELECT EMPNO, ENAME
  2  FROM EMP
  3  WHERE EMPNO IN(7499,7521,7566)
  4  ;

     EMPNO ENAME
---------- ----------
      7566 JONES
      7521 WARD
      7499 ALLEN




## SQL 연산자



IN 연산자 (OR와 같은 결과)


문법 : IN(리스트)


문제1) 업무가 MANAGER  혹은 SALESMAN인      *작은 따옴표를 쓰냐 안쓰냐 문제

         사원의 사원명과 업무를 출력


SQL> SELECT ENAME,JOB
  2  FROM EMP
  3  WHERE JOB IN('MANAGER','SALESMAN')
  4  ;

ENAME      JOB
---------- ---------
ALLEN      SALESMAN
WARD       SALESMAN
JONES      MANAGER
MARTIN     SALESMAN
BLAKE      MANAGER
CLARK      MANAGER
TURNER     SALESMAN

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


SQL> SELECT ENAME,JOB
  2  FROM EMP
  3  WHERE JOB IN('MANAGER','SALESMAN')
  4  ORDER BY JOB
  5  ;

ENAME      JOB
---------- ---------
JONES      MANAGER
BLAKE      MANAGER
CLARK      MANAGER
ALLEN      SALESMAN
TURNER     SALESMAN
MARTIN     SALESMAN
WARD       SALESMAN

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





BETWEEN 연산자 (AND연산자와 같은 결과)


문법 : BETWEEN A AND B


문제1) 급여가 2000에서 3000사이인 사원의 사원명과 ,급여 출력


SQL> SELECT ENAME, SAL
  2  FROM EMP
  3  WHERE SAL>=2000 AND SAL<=3000
  4  ;

ENAME             SAL
---------- ----------
JONES            2975
BLAKE            2850
CLARK            2450
SCOTT            3000
FORD             3000


--BETWEEN 사용


SQL> SELECT ENAME, SAL
  2  FROM EMP
  3  WHERE SAL BETWEEN 2000 AND 3000 (사용 숫자까지 포함)
  4  ;

ENAME             SAL
---------- ----------
JONES            2975
BLAKE            2850
CLARK            2450
SCOTT            3000
FORD             3000



LIKE 연산자

부분 적으로 일치하면 침이 되는 연산자

LIKE :~와 같은(문자나 숫자)


문법 : LIKE ('문자나 숫자')

% : 모든것 = *

_  : 자리수 하나


문제1) 사원이름이 S로 시작하는

          사원명, 업무를 출력


SQL> SELECT ENAME
  2  FROM EMP
  3  WHERE ENAME LIKE 'S%'
  4  ;

ENAME
----------
SMITH
SCOTT



문제2) 사원이름이 N으로 끝나는

           사원명, 업무 출력


SQL> SELECT ENAME,JOB
  2  FROM EMP
  3  WHERE ENAME LIKE('%N')
  4  ;

ENAME      JOB
---------- ---------
ALLEN      SALESMAN
MARTIN     SALESMAN


문제3) 사원이름중에 A가 들어간

          사원명과 업무를 출력하시오.


SQL> SELECT ENAME, JOB
  2  FROM EMP
  3  WHERE ENAME LIKE('%A%')
  4  ;

ENAME      JOB
---------- ---------
ALLEN      SALESMAN
WARD       SALESMAN
MARTIN     SALESMAN
BLAKE      MANAGER
CLARK      MANAGER
ADAMS      CLERK
JAMES      CLERK

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



문제4) 사원이름 중에서 A가 두번째로 나온

          사원의 모든 이름을 출력


SQL> SELECT ENAME
  2  FROM EMP
  3  WHERE ENAME LIKE('_A%')                            * '_A' = 2자리 글자만 찾는다.
  4  ;

ENAME
----------
WARD
MARTIN
JAMES


문제5) 사원이름 중에 A가 3번째로 포함된

          사원명을 출력하시오.


SQL> SELECT ENAME
  2  FROM EMP
  3  WHERE ENAME LIKE('__A%')
  4  ;

ENAME
----------
BLAKE
CLARK
ADAMS




ESCAPE 옵션

문법 : ESCAPE "|"; |문자 뒤의 글자(_ ,%)는 WILDCARD가 아님을 뜻함.


와일드 카드

      OS : * -> 임의의 모든 문자     Oracle : %   ->임의의 모든 문자
             ? -> 한개 문자                            _   -> 한개의 문자


문제1) 문자열로 %,_ 들어간 상황


SQL> INSERT INTO EMP(EMPNO, ENAME)
  2  VALUES(456,'K_J_C')
  3  ;

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


SQL> SELECT ENAME, EMPNO
  2  FROM EMP
  3  ;

ENAME           EMPNO
---------- ----------
SMITH            7369
ALLEN            7499
WARD             7521
JONES            7566
MARTIN           7654
BLAKE            7698
CLARK            7782
SCOTT            7788
KING             7839
TURNER           7844
ADAMS            7876
JAMES            7900
FORD             7902
MILLER           7934
K_J_C             456

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



문제2) 사원명이 K_J가 포함된

          사원번호, 사원명 출력


SQL> SELECT EMPNO, ENAME
  2  FROM EMP
  3  WHERE ENAME LIKE('K\_J%') ESCAPE '\'    * \ 뒤에 오는 는 것은 문자열이다.
  4  ;

     EMPNO ENAME
---------- ----------
       456 K_J_C





NULL


SELECT ENAME, SAL, COMM

FROM EMP;


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

ENAME             SAL       COMM
---------- ---------- ----------
SMITH             800
ALLEN            1600        300
WARD             1250        500
JONES            2975
MARTIN           1250       1400
BLAKE            2850
CLARK            2450
SCOTT            3000
KING             5000
TURNER           1500          0
ADAMS            1100
JAMES             950
FORD             3000
MILLER           1300
K_J_C

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


문제1) 커미션이 NULL 인 사원의

          사원명, 급여, 커미션을 출력


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

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


SQL> SELECT ENAME, SAL, COMM
  2  FROM EMP
  3  WHERE COMM IS NULL;                            * NULL값인 것은 이렇게 사용한다.

ENAME             SAL       COMM
---------- ---------- ----------
SMITH             800
JONES            2975
BLAKE            2850
CLARK            2450
SCOTT            3000
KING             5000
ADAMS            1100
JAMES             950
FORD             3000
MILLER           1300
K_J_C

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


문제2) 커미션이 NULL이 아닌 사원의

         사원명, 급여, 커미션 출력


SQL> SELECT ENAME, SAL, COMM
  2  FROM EMP
  3  WHERE COMM IS NOT NULL            * NULL값이 아닌 것은 다음과 같이 사용한다.
  4  ;

ENAME             SAL       COMM
---------- ---------- ----------
ALLEN            1600        300
WARD             1250        500
MARTIN           1250       1400
TURNER           1500          0


SQL> SELECT ENAME, SAL, COMM, SAL+COMM
  2  FROM EMP
  3  ;

ENAME             SAL       COMM   SAL+COMM
---------- ---------- ---------- ----------
SMITH             800
ALLEN            1600        300       1900
WARD             1250        500       1750
JONES            2975
MARTIN           1250       1400       2650
BLAKE            2850
CLARK            2450
SCOTT            3000
KING             5000
TURNER           1500          0       1500
ADAMS            1100
JAMES             950
FORD             3000
MILLER           1300
K_J_C

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




연산자 우선순위


1  비교연산자(-,-!,^-,<>,>-,<<-)

    SQL, 연산자(BETWEEN A AND B, IN, LIKE, IS NULL)

2  NOT

3  AND

4  OR



문제1) 업무가  PRESIDENT이고 급여가 3000이상이거나

          업무가 SALESMAN인

          사원의 이름, 업무, 급여를 출력


SQL> SELECT ENAME, JOB, SAL
  2  FROM EMP
  3  WHERE (JOB='PRESIDENT' AND SAL>=3000) OR JOB='SALESMAN';

ENAME      JOB              SAL
---------- --------- ----------
ALLEN      SALESMAN        1600
WARD       SALESMAN        1250
MARTIN     SALESMAN        1250
KING       PRESIDENT       5000
TURNER     SALESMAN        1500




SQL과 SQL*PLUS 언어

차이점

                           SQL                                                SQLPLUS

DATA를 엑세스 하기 위해 ORACLE SERVER와 통신   /SQL 문장을 인식

언어                                                                    / 환경 TOOL

ANSI 표준                                                            / ORACLE 독점물 (단독 사용)

KEYWORD 단축X                                                  / 단축 가능

종료 문자  ;                                                        / 종료문자 ; 생략가능

연속문자(-) 없음                                                  / 연속문자사용





SQL*PLUS 명령어

 

1. SQL*PLUS  시작, 종료 : CONN(ECT), EXIT

2. 실행명령어 : /, RUN, SPOOL(저장 SAVE기능-처음부터 저장해야 한다.)...

3. 편집명령어 : ED(IT)..

4. 포맷명령어 : COLUMN -> 컬럼의 포맷 변경

5. 기타명령어 : SET

 

CONNECT(CONN) , EXIT, SET LINESIZE, SET PAGESIZE, DESC(줄임말 SQL에 없다)

 

EDIT OR ED

에디트창 나오며 저장하고 종료하고 /입력


   /   - 마지막에 실행했던 것을 기역하여 결과값만한다.

RUN - 커리문과 결과값 같이 표시


SPOOL


문법

SQL> SPOOL C:\J0326


SQL> SPOOL C:\J0326          *시작
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 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
       456 K_J_C

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

SQL> SPOOL OFF              *끝


*오라클 종료시 같이 종료




SQL> delete from emp
  2  where empno=456;

1 행이 삭제되었습니다.

SQL> commit;

커밋이 완료되었습니다.