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 개의 행이 선택되었습니다.