문제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