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

ORACLE 2

by Real Iron 2007. 3. 29.

database


요약

여러 사람에 의해 공유되어 사용될 목적으로 통합 관리되는 정보의 집합.

본문

 논리적으로 연관된 하나 이상의 자료의 모음으로 그 내용을 고도로 구조함으로써 검색과 갱신의 효율화를 꾀한 것이다. 즉, 몇 개의 자료 파일을 조직적으로 통합하여 자료 항목의 중복을 없애고 자료를 구조화하여 기억시켜 놓은 자료의 집합체라고 할 수 있다.

이 용어가 처음 사용된 것은 1963년 6월 미국 SDC(System Development Corporation)가 산타모니카에서 개최한 '컴퓨터 중심의 데이터베이스 개발과 관리'라는 심포지엄 제목에서 공식으로 사용되었다.

이 심포지엄에서 발표된 많은 논문들은 대부분 자료 파일에서 정보를 쉽게 검색하는 작업에 관련된 것들이었으며, 데이터베이스란 단순히 자기() 테이프와 같은 보조기억장치에 저장된 자료 파일의 의미로 쓰였다.

현대적인 의미의 데이터베이스 개념을 확립한 사람은 당시 제너럴일렉트릭사()에 있던 C.바크만으로 그는 1963년 IDS(Integrated Data Store)라는 데이터베이스 관리시스템을 만들었다.

데이터베이스가 가지는 몇 가지 특성을 살펴봄으로써 그 뜻을 보다 명확히 할 수 있다. 첫째 똑같은 자료를 중복하여 저장하지 않는 통합된 자료이며, 둘째 컴퓨터가 액세스하여 처리할 수 있는 저장장치에 수록된 자료이며, 셋째 어떤 조직의 기능을 수행하는 데 없어서는 안 되며 존재 목적이 뚜렷하고 유용성 있는 운영 자료이기 때문에 임시로 필요해서 모아 놓은 데이터나 단순한 입출력 자료가 아니라는 점이며, 넷째 한 조직에서 가지는 데이터베이스는 그 조직 내의 모든 사람들이 소유하고 유지하며 이용하는 공동 자료로서 각 사용자는 같은 데이터라 할지라도 각자의 응용 목적에 따라 다르게 사용할 수 있다는 점이다.



오라클 접속

시작-cmd-

C:\Documents and Settings\Administrator>sqlplus "/as sysdba"


의문점?

"/as sysdba" -  무엇인가?



복습

-- set (동시에 해도 된다)

SQL> set pagesize 80 linesize 150


-- 원하는 컬럼만 보기

SQL> select empno,ename,hiredate,deptno from emp;





금일


distinct 중복 확인


SQL> select distinct deptno
  2  from emp;

    DEPTNO
----------
        10
        20
        30


SQL> select distinct job from emp;

JOB
---------
ANALYST
CLERK
MANAGER
PRESIDENT
SALESMAN

정렬 SORTING

* 오름차순 ASC : A~Z,ㄱ~ㅎ,숫자 작은 -> 큰

* 내림차순 DESC: Z~A,ㅎ~ㄱ,숫자 큰 -> 작은


문제1) 이름과 입사일 출력하되

          이름 오름차순


SQL> SELECT ENAME,HIREDATE
  2  FROM EMP
  3  ORDER BY ENAME; ASC(디폴드값-안써도 된다)

ENAME      HIREDATE
---------- --------
ADAMS      87/05/23
ALLEN      81/02/20
BLAKE      81/05/01
CLARK      81/06/09
FORD       81/12/03
JAMES      81/12/03
JONES      81/04/02
KING       81/11/17
MARTIN     81/09/28
MILLER     82/01/23
SCOTT      87/04/19
SMITH      80/12/17
TURNER     81/09/08
WARD       81/02/22

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


문제2) 사원명, 급여를 출력하되

          급여 내림차순


SQL> SELECT ENAME,SAL
  2  FROM EMP
  3  ORDER BY SAL DESC;

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

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



문제3) 사원명,입사일,커미션을 출력하되

          커미션 내림차순


SQL> SELECT ENAME,HIREDATE,COMM
  2  FROM EMP
  3  ORDER BY COMM DESC;

ENAME      HIREDATE       COMM
---------- -------- ----------
SMITH      80/12/17
JONES      81/04/02
CLARK      81/06/09
BLAKE      81/05/01
SCOTT      87/04/19
KING       81/11/17
JAMES      81/12/03
MILLER     82/01/23
FORD       81/12/03
ADAMS      87/05/23
MARTIN     81/09/28       1400
WARD       81/02/22        500
ALLEN      81/02/20        300
TURNER     81/09/08          0

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

NULL-무한대값

참고자료 20페이지



문제4) 최고참 사원(컬럼명)부터 신입사원순서대로(정렬)

          사원번호, 사원명을 출력(SELECT)하시오


SQL> SELECT ENAME,EMPNO(ORDER BY절에 사용할 컬럼이 꼭 들어가지 않아도 된다.그대신 출력은 안된다.)
  2  FROM EMP
  3  ORDER BY HIREDATE;

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

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



문제5) 사원명, 급여, 부서번호 출력


SQL> SELECT ENAME,SAL,DEPTNO FROM EMP;

ENAME             SAL     DEPTNO
---------- ---------- ----------
SMITH             800         20
ALLEN            1600         30
WARD             1250         30
JONES            2975         20
MARTIN           1250         30
BLAKE            2850         30
CLARK            2450         10
SCOTT            3000         20
KING             5000         10
TURNER           1500         30
ADAMS            1100         20
JAMES             950         30
FORD             3000         20
MILLER           1300         10

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


문제6) 사원명,급여 부서번호 출력하되

          부서번호는 오름차순 정렬하고 (만약부서번호가 같다면)   DEPTNO ASC

          급여 많이 받는 사원에서 적게 받는 사원 순서대로 출력   SAL   DESC


SQL> SELECT ENAME,SAL,DEPTNO
  2  FROM EMP
  3  ORDER BY DEPTNO ASC,SAL DESC;

ENAME             SAL     DEPTNO
---------- ---------- ----------
KING             5000         10
CLARK            2450         10
MILLER           1300         10
SCOTT            3000         20
FORD             3000         20
JONES            2975         20
ADAMS            1100         20
SMITH             800         20
BLAKE            2850         30
ALLEN            1600         30
TURNER           1500         30
WARD             1250         30
MARTIN           1250         30
JAMES             950         30

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

SQL>



ORDER BY - 카럼이나 표현식(별명)

* 정렬기준 : 컬럼명, 열의 위치
* 열의 위치(조회하고자 하는 칼럼의 위치)

문제1) 사원번호, 사원이름 , 커미션을 출력하되

          사원번호 내림차순


SQL> SELECT EMPNO(1),ENAME(2),COMM(3)
  2  FROM EMP
  3  ORDER BY 1 DESC;

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

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


* 정렬기준 : 컬럼명, 열의 위치, 별칭

* 별칭Alias(애칭,별명)-TABLE , ORDER BY 함꼐 사용 - 일시적인 것,여러 종류

   테이블안에 값은 값을 가질때 별칭을 넣어서 다르게 표시

* 한글로 출력, 급여는 단위표시, 대소문자 같이 사용하고 싶을때 사용

* 컬럼명 영문대소문자,공백,$,\와 같은 특수 문자는 반드시"" 안에 넣어야 한다

             한글 "안에 넣어도 되고 안넣어도 된다"


문제2) EMPNO ->EMPno,   ENAME-> ename , JOB -> J O B 출력하라

SELECT EMPNO "EMPno",ENAME "ename",JOB "J O B"  빈공백 별칭을 넣겠다는 뜻


SQL> SELECT EMPNO "EMPno",ENAME "ename",JOB "J O B"
  2  FROM EMP;

     EMPno ename      J O B
---------- ---------- ---------
      7369 SMITH      CLERK
      7499 ALLEN      SALESMAN
      7521 WARD       SALESMAN
      7566 JONES      MANAGER
      7654 MARTIN     SALESMAN
      7698 BLAKE      MANAGER
      7782 CLARK      MANAGER
      7788 SCOTT      ANALYST
      7839 KING       PRESIDENT
      7844 TURNER     SALESMAN
      7876 ADAMS      CLERK
      7900 JAMES      CLERK
      7902 FORD       ANALYST
      7934 MILLER     CLERK

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



문제3) EMPNO ->"사원명"  SAL->"$급여" 출력하라



별칭(Alias)

문법)

컬럼명 AS 별칭명

컬럼명 별칭명

영문대소문자,공백,$,\와 같은 특수 문자는 반드시"" 안에 넣어야 한다

한글 "안에 넣어도 되고 안넣어도 된다"


문제1) ENAME 을 NAME 별칭으로 변경


SQL> SELECT ENAME AS NAME
  2  FROM EMP
  3  ;

NAME
----------
SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER

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



* 정렬기준 :컬럼명,열의 위치,별칭


문제2) EMPNO - 사원번호, ENAME - EMPname, mgr-상관의 사번 출력하되

         EMPname 오른 차순 정렬 하시오


SQL> SELECT EMPNO 사원번호,ENAME "EMPname",MGR "상관의 사번"
  2  FROM EMP
  3  ORDER BY ENAME(EMPname-X "EMPname"-O  별칭도 기준이 된다.)
  4  ;

  사원번호 EMPname    상관의 사번
---------- ---------- -----------
      7876 ADAMS             7788
      7499 ALLEN             7698
      7698 BLAKE             7839
      7782 CLARK             7839
      7902 FORD              7566
      7900 JAMES             7698
      7566 JONES             7839
      7839 KING
      7654 MARTIN            7698
      7934 MILLER            7782
      7788 SCOTT             7566
      7369 SMITH             7902
      7844 TURNER            7698
      7521 WARD              7698

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




--정렬기준 : 컬럼명, 열의 위치, 별칭, 표현식

--표현식



문제3) 사원명, 급여, 커미션 조회


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

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



문제4) 커미션 NULL은 0으로 표시 하고 싶다. 오라클 함수 NVL 사용

* NVL(컬럼명,표시하고자 하는 것)


SQL> SELECT ENAME,SAL,COMM, NVL(COMM,0)
  2  FROM EMP
  3  ;

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

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



문제5) 사원명, 급여, 커미션 조회

          급여 + 커미션 값을 출력


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

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



문제6) NULL 값을 0으로 표시해서

         급여와 커미션의 합계를 모두 보고 싶다.


SQL> SELECT ENAME,SAL,COMM,NVL(COMM,0), SAL+NVL(COMM,0)
  2  FROM EMP
  3  ;

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

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


SQL> SELECT ENAME,SAL,COMM, SAL+COMM , SAL+NVL(COMM,0)
  2  FROM EMP
  3  ;

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

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


문제7) 별칭까지 넣고 싶다.

         원명, 업무, 부서번호, 급여, 연봉을 출력

         연봉 = 급여 *12


SQL> SELECT ENAME,JOB,DEPTNO,SAL,SAL*12 연봉
  2  FROM EMP
  3  ;

ENAME      JOB           DEPTNO        SAL       연봉
---------- --------- ---------- ---------- ----------
SMITH      CLERK             20        800       9600
ALLEN      SALESMAN          30       1600      19200
WARD       SALESMAN          30       1250      15000
JONES      MANAGER           20       2975      35700
MARTIN     SALESMAN          30       1250      15000
BLAKE      MANAGER           30       2850      34200
CLARK      MANAGER           10       2450      29400
SCOTT      ANALYST           20       3000      36000
KING       PRESIDENT         10       5000      60000
TURNER     SALESMAN          30       1500      18000
ADAMS      CLERK             20       1100      13200
JAMES      CLERK             30        950      11400
FORD       ANALYST           20       3000      36000
MILLER     CLERK             10       1300      15600

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



문제8) 별칭까지 넣고 싶다.

         사원명, 업무, 부서번호, 급여, 연봉을 출력하되

         고액연봉자->저액연봉자 순으로 출력

         연봉 = 급여 *12


SQL> SELECT ENAME,JOB,DEPTNO,SAL,SAL*12 연봉
  2  FROM EMP
  3  ORDER BY "연봉" DESC - SAL 도 가능하다.  "연봉"자리에 5 ,SAL*12 도 사용가능.
  4  ;

ENAME      JOB           DEPTNO        SAL       연봉
---------- --------- ---------- ---------- ----------
KING       PRESIDENT         10       5000      60000
SCOTT      ANALYST           20       3000      36000
FORD       ANALYST           20       3000      36000
JONES      MANAGER           20       2975      35700
BLAKE      MANAGER           30       2850      34200
CLARK      MANAGER           10       2450      29400
ALLEN      SALESMAN          30       1600      19200
TURNER     SALESMAN          30       1500      18000
MILLER     CLERK             10       1300      15600
WARD       SALESMAN          30       1250      15000
MARTIN     SALESMAN          30       1250      15000
ADAMS      CLERK             20       1100      13200
JAMES      CLERK             30        950      11400
SMITH      CLERK             20        800       9600

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


참고

LOW 열

COLUMN 기둥


산술식과 함수에서 NULL 처리

--NULL에 산술식이나 함수를 적용하면 연산 결과도 NULL


WHERE절


##조건 검색

SELECT 절

FROM 테이블명

WHERE 조건절 ;


--사원번호, 사원명을 출력

SQL> SELECT EMPNO,ENAME
  2  FROM EMP
  3  ;

     EMPNO ENAME
---------- ----------
      7369 SMITH
      7499 ALLEN
      7521 WARD
      7566 JONES
      7654 MARTIN
      7698 BLAKE
      7782 CLARK
      7788 SCOTT
      7839 KING
      7844 TURNER
      7876 ADAMS

     EMPNO ENAME
---------- ----------
      7900 JAMES
      7902 FORD
      7934 MILLER

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



--사원번호가 7369 인 사언의 사원번호, 사원명을 출력

SELECT 절                 SELECT 사원번호, 사원명

FROM 테이블명           FROM 사원테이블

WHERE 조건절 ;          WHERE ENPNO(사원번호)가 7369  =  ENPNO=7369

-유형을 알아야 한다. NUMBER


SQL> SELECT EMPNO,ENAME
  2  FROM EMP
  3  WHERE EMPNO=7369
  4  ;

     EMPNO ENAME
---------- ----------
      7369 SMITH


--유형을 알아야 한다. (문자.날짜- ''를 넣어주아야 한다.

-- 사원명이 KING인 사원의 사원명, MGR, 급여, COMM 을 출력

SQL> SELECT ENAME 사원명,MGR,SAL 급여,COMM
  2  FROM EMP
  3  WHERE ENAME='KING';

사원명            MGR       급여       COMM
---------- ---------- ---------- ----------
KING                        5000


--KING - king 로 수정

SQL> SELECT ENAME 사원명,MGR,SAL 급여,COMM
  2  FROM EMP
  3  WHERE ENAME='king';

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


--WHERE 문법은 먼저 유형을 확인해야 한다.

--81/06/09에 입사한 사원의 모든 정보를 출력

SQL> SELECT *
  2  FROM EMP
  3  WHERE HIREDATE='81/06/09'

  4  ;

     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
      7782 CLARK      MANAGER         7839 81/06/09       2450                    10



비교 연산자

(무조건 왼쪽이 기준)

A>B A가 B 보다 크다.  A는 B 초과

A>=B  A가 B보다 크거나 같다.  A는 B이상

A<B A가 B 보다 작다.  A는 B 미만

A<=B  A가 B보다 작거나 같다.  A는 B이하


--급여가 2000 이상되는 사원의 모든 정보를 출력

SQL> SELECT *
  2  FROM EMP
  3  WHERE SAL>=2000
  4  ;

     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
      7566 JONES      MANAGER         7839 81/04/02       2975                    20
      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
      7902 FORD       ANALYST         7566 81/12/03       3000                    20

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


-- = 같다   != 같지 않다.(<>)


-- 85/02/20 이전에 들어오 사원의 사원명, 입사일, 부서번호 출력


SQL> SELECT ENAME,HIREDATE,DEPTNO
  2  FROM EMP
  3  WHERE HIREDATE<='85/02/20'
  4  ;

ENAME      HIREDATE     DEPTNO
---------- -------- ----------
SMITH      80/12/17         20
ALLEN      81/02/20         30
WARD       81/02/22         30
JONES      81/04/02         20
MARTIN     81/09/28         30
BLAKE      81/05/01         30
CLARK      81/06/09         10
KING       81/11/17         10
TURNER     81/09/08         30
JAMES      81/12/03         30
FORD       81/12/03         20
MILLER     82/01/23         10

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


논리 연산자


AND : 나열된 조건 모두 만족

OR : 조건중에 단 하나만이라도 만족

NOT :

--  급여가 2000~3000 인 사원의 사원명, 업무, 급여 출력



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

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


--OR 사용


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

ENAME      JOB              SAL
---------- --------- ----------
SMITH      CLERK            800
ALLEN      SALESMAN        1600
WARD       SALESMAN        1250
JONES      MANAGER         2975
MARTIN     SALESMAN        1250
BLAKE      MANAGER         2850
CLARK      MANAGER         2450
SCOTT      ANALYST         3000
KING       PRESIDENT       5000
TURNER     SALESMAN        1500
ADAMS      CLERK           1100
JAMES      CLERK            950
FORD       ANALYST         3000
MILLER     CLERK           1300

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