▶ INSERT

행 추가

INSERT INTO <테이블> [(컬럼, 컬럼, ... )]
VALUES (값, 값, ...);

 

▶ UPDATE

컬럼 데이터 변경

UPDATE 테이블
SET 컬럼 = 값, 컬럼 = 값, ...
[WHERE 조건];

 

▶ DELETE

행 삭제

DELETE FROM 테이블
[WHERE 조건];

 

▶ COMMIT, ROLLBACK

COMMIT;

ROLLBACK;

 

예제 1. Dept 테이블의 모든 데이터를 삭제한 다음 ROLLBACK을 수행한 다음 결과를 확인한다.

DELETE FROM dept;
7 행이 삭제되었습니다.

SELECT * FROM dept;
선택된 레코드가 없습니다.

ROLLBACK;
롤백이 완료되었습니다.

SELECT * FROM dept;

DNO     DNAME   LOC
------- ------- -----
01      총무    서울
02      회계    서울
10      ERP     서울
20      ISP     부산
30      ITEA    광주
40      CRM     대전
50      POS

 

예제 2. Emp와 dept 테이블의 모든 데이터를 삭제한다.

DELETE FROM dept;
7 행이 삭제되었습니다.

DELETE FROM emp;
21 행이 삭제되었습니다.

SELECT * FROM dept;
선택된 레코드가 없습니다.

SELECT * FROM emp;
선택된 레코드가 없습니다.

COMMIT;
커밋이 완료되었습니다.

 

예제 3. EMP 테이블에 아래 제공된 값을 입력한다.

ALTER SESSION SET nls_date_format='YYYY/MM/DD';
세션이 변경되었습니다.

 DESC emp;
 이름               널?      유형
 ----------------- -------- ------------------------------------
 ENO                          VARCHAR2(4)
 ENAME                        VARCHAR2(15)
 SEX                          VARCHAR2(4)
 JOB                          VARCHAR2(12)
 MGR                          VARCHAR2(4)
 HDATE                        DATE
 SAL                          NUMBER
 COMM                         NUMBER
 DNO                          VARCHAR2(2)

 

INSERT INTO emp (eno, ename, sex, job, mgr, hdate, sal, comm, dno)
VALUES ('1001', '문시현', '남', '모델링', NULL, '1991/02/01', 4500, 520, '10');
//이렇게 사용!!!
1 개의 행이 만들어졌습니다.

INSERT INTO emp (eno, ename, sex, job, hdate, sal, comm, dno)
VALUES ('1002', '김주란', '여', '모델링', '1992/03/03', 4100, 330, '20');
//사용하지 말기
1 개의 행이 만들어졌습니다.

INSERT INTO emp
VALUES ('1003', '양선호', '남', '모델링', NULL, '1995/02/21', 4300, NULL, '30');
//사용하지 말기
1 개의 행이 만들어졌습니다.

COMMIT;
커밋이 완료되었습니다.

SELECT * FROM emp;

ENO     ENAME      SEX JOB     MGR     HDATE             SAL       COMM DNO
------- ---------- --- ------- ------- ---------- ---------- ---------- -------
1001    문시현     남  모델링          1991/02/01       4500        520 10
1002    김주란     여  모델링          1992/03/03       4100        330 20
1003    양선호     남  모델링          1995/02/21       4300            30
0001    안영희     여  경영            1991/01/01      10800        900 02
0201    안영숙     여  지원    0001    1991/02/01       3900       2000 01
0202    손하늘     여  지원    0001    1991/12/01       3510        980 01
0301    이승철     남  회계    0001    1992/02/01       3400          0 02

 

예제 4. Emp 테이블의 모든 데이터를 삭제하고 아래 제공된 값을 입력한다.

SELECT sysdate FROM dual;

SYSDATE
----------
2021/11/18


INSERT INTO emp (eno, ename, hdate)
VALUES ('5001', '안영희', '1991/01/03:07:15:25');
VALUES ('5001', '안영희', '1991/01/03:07:15:25')
                             *
2행에 오류:
ORA-01830: 날짜 형식의 지정에 불필요한 데이터가 포함되어 있습니다

ALTER SESSION SET nls_date_format = 'YYYY/MM/DD:HH24:MI:SS';

세션이 변경되었습니다.

INSERT INTO emp (eno, ename, hdate)
VALUES ('5001', '안영희', '1991/01/03:07:15:25');

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

SQL> COMMIT;

커밋이 완료되었습니다.

 

예제 5. 날짜 형식을 확인하고 아래 제공된 값을 입력한다. 날짜 입력에 TO_DATE()를 이용한다.

SQL> ALTER SESSION SET nls_date_format = 'YYYY-MM-DD';

세션이 변경되었습니다.

SQL> INSERT INTO emp (eno, ename, hdate)
  2  VALUES ('5002', '안영숙', TO_DATE('1992/09/05:08:15:25', 'YYYY/MM/DD:HH24:MI:SS'));

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

SQL> COMMIT;

커밋이 완료되었습니다.

SQL> SELECT eno, ename, TO_CHAR(hdate,'YYYY/MM/DD:HH24:MI:SS') FROM emp;

ENO     ENAME      TO_CHAR(HDATE,'YYYY/MM/DD:HH24:MI:SS')
------- ---------- --------------------------------------
1001    문시현     1991/02/01:00:00:00
1002    김주란     1992/03/03:00:00:00
1003    양선호     1995/02/21:00:00:00
5001    안영희     1991/01/03:07:15:25
5002    안영숙     1992/09/05:08:15:25
0001    안영희     1991/01/01:00:00:00
0201    안영숙     1991/02/01:00:00:00

 

예제 6. 날짜에 적용되는 디폴트 값을 확인한다.

SQL> ALTER SESSION SET nls_date_format='YYYY-MM-DD:HH24:MI:SS';

세션이 변경되었습니다.

SQL> INSERT INTO emp (eno,hdate) VALUES ('01', TO_DATE('2000', 'YYYY'));

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

SQL> INSERT INTO emp (eno,hdate) VALUES ('02', TO_DATE('99', 'YY'));

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

SQL> INSERT INTO emp (eno,hdate) VALUES ('03', TO_DATE('99', 'RR'));

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

SQL> COMMIT;

커밋이 완료되었습니다.

SQL> SELECT eno, hdate FROM emp
  2  ORDER BY 1;

ENO     HDATE
------- -------------------
0001    1991-01-01:00:00:00
01      2000-11-01:00:00:00
0120    1999-09-05:00:00:00
02      2099-11-01:00:00:00
0201    1991-02-01:00:00:00
0202    1991-12-01:00:00:00
0269    2015-05-21:00:00:00

 

예제 7. 김주란의 부서 번호를 10번으로 수정하고 급여를 10% 인상하세요
- 수행 전 실습용 테이블을 초기화한다.

@C:\Users\st04\sql\school_euc

 

SELECT * FROM emp WHERE ename = '김주란';

ENO     ENAME      SEX JOB     MGR     HDATE             SAL       COMM DNO
------- ---------- --- ------- ------- ---------- ---------- ---------- -------
1002    김주란     여  모델링  0201    1992/03/03       4100        330 20


UPDATE emp SET dno = '10', sal = sal*1.1
WHERE ename = '김주란';

1 행이 업데이트되었습니다.

SQL> COMMIT;

커밋이 완료되었습니다.

SELECT * FROM emp WHERE ename = '김주란';

ENO     ENAME      SEX JOB     MGR     HDATE             SAL       COMM DNO
------- ---------- --- ------- ------- ---------- ---------- ---------- -------
1002    김주란     여  모델링  0201    1992/03/03       4510        330 10


SELECT * FROM emp
WHERE dno = '01';

ENO     ENAME      SEX JOB     MGR     HDATE             SAL       COMM DNO
------- ---------- --- ------- ------- ---------- ---------- ---------- -------
0001    안영희     여  경영            1991/01/01       4800          0 01
0201    안영숙     여  지원    0001    1991/02/01       3900       2000 01
0202    손하늘     여  지원    0001    1991/12/01       3510        980 01


UPDATE emp SET sal = sal * 1.1
WHERE dno = '01';
3 행이 업데이트되었습니다.

COMMIT;

커밋이 완료되었습니다.

SELECT * FROM emp
WHERE dno = '01';

ENO     ENAME      SEX JOB     MGR     HDATE             SAL       COMM DNO
------- ---------- --- ------- ------- ---------- ---------- ---------- -------
0001    안영희     여  경영            1991/01/01       5280          0 01
0201    안영숙     여  지원    0001    1991/02/01       4290       2000 01
0202    손하늘     여  지원    0001    1991/12/01       3861        980 01

 

실습

1. 다음 INSERT 문을 실행하고 입력 결과를 확인한다.

* 입력값에 포함되지 않은 년도, 월, 날짜, 시, 분, 초에 입력된 값을 확인한다.

SQL> INSERT INTO emp (eno,hdate) VALUES (5, TO_DATE('12', 'MM'));

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

SQL> INSERT INTO emp (eno,hdate) VALUES (6, TO_DATE('10', 'DD'));

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

SQL> INSERT INTO emp (eno,hdate) VALUES (7, TO_DATE('9', 'HH24'));

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

SQL> INSERT INTO emp (eno,hdate) VALUES (8, TO_DATE('12', 'MI'));

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

SQL> INSERT INTO emp (eno,hdate) VALUES (9, TO_DATE('20', 'SS'));

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

SQL> INSERT INTO emp (eno,hdate) VALUES (10, sysdate);

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

SQL> ALTER SESSION SET nls_date_format='YYYY/MM/DD:HH24:MI:SS';
세션이 변경되었습니다.

SELECT * FROM EMP;

ENO     ENAME      SEX JOB     MGR     HDATE                      SAL       COMM DNO
------- ---------- --- ------- ------- ------------------- ---------- ---------- -------
0001    안영희     여  경영            1991/01/01:00:00:00       5280          0 01
0201    안영숙     여  지원    0001    1991/02/01:00:00:00       4290       2000 01
0202    손하늘     여  지원    0001    1991/12/01:00:00:00       3861        980 01
0301    이승철     남  회계    0001    1992/02/01:00:00:00       3400          0 02
0302    박선경     여  회계    0301    1991/03/02:00:00:00       3300          0 02
1001    문시현     남  모델링  0201    1991/02/01:00:00:00       4500        520 10
1002    김주란     여  모델링  0201    1992/03/03:00:00:00       4510        330 10
...
ENO     ENAME      SEX JOB     MGR     HDATE                      SAL       COMM DNO
------- ---------- --- ------- ------- ------------------- ---------- ---------- -------
5                                      2021/12/01:00:00:00
6                                      2021/11/10:00:00:00
7                                      2021/11/01:09:00:00
8                                      2021/11/01:00:12:00
9                                      2021/11/01:00:00:20
10                                     2021/11/18:17:23:19


2. Emp 테이블의 행을 모두 삭제하고 다음 제시된 데이터를 입력한다.

SQL> DELETE FROM EMP;
27 행이 삭제되었습니다.

INSERT INTO emp (eno, ename, sex, job, mgr, hdate, sal, comm, dno) 
VALUES ('0001', '안영희', '여', '경영', NULL, TO_DATE('1991/01/01', 'YYYY/MM/DD'), 4800, 0, '01');
1 개의 행이 만들어졌습니다.

SELECT * FROM emp;

ENO     ENAME      SEX JOB     MGR     HDATE             SAL       COMM DNO
------- ---------- --- ------- ------- ---------- ---------- ---------- -------
0001    안영희     여  경영            1991/01/01       4800          0 01

 

3. 모든 학생의 성적을 4.5만 점 기준으로 수정한다.

SQL> SELECT * FROM student;

SNO      SNAME      SEX       SYEAR MAJOR         AVR
-------- ---------- ---- ---------- ------ ----------
915301   정동상     남            4 화학          .95
905301   유태지     남            4 화학         3.28
905302   정욱상     남            4 화학         1.44
915303   정욱주     남            4 화학          .95
923903   정남윤     남            3 생물         3.23
923904   한현석     남            3 생물         2.45
933901   김용서     남            2 생물         1.48
915304   권보수     남            4 화학         2.32
915305   최정희     여            3 화학          .58
948203   황보우리   여            1 식영         2.83
948204   서창동     남            1 식영         3.21


UPDATE student SET avr=avr*4.5/4;
87 행이 업데이트되었습니다.


SELECT * FROM student;

SNO      SNAME      SEX       SYEAR MAJOR         AVR
-------- ---------- ---- ---------- ------ ----------
915301   정동상     남            4 화학         1.07
905301   유태지     남            4 화학         3.69
905302   정욱상     남            4 화학         1.62
915303   정욱주     남            4 화학         1.07
923903   정남윤     남            3 생물         3.63
923904   한현석     남            3 생물         2.76
933901   김용서     남            2 생물         1.67
915304   권보수     남            4 화학         2.61
915305   최정희     여            3 화학          .65
948203   황보우리   여            1 식영         3.18
948204   서창동     남            1 식영         3.61


4. 모든 교수의 부임일자를 100일 앞으로 수정한다.

UPDATE professor SET  hiredate=hiredate-100;
24 행이 업데이트되었습니다.

SELECT pno 교수번호, pname 이름, TO_DATE(hiredate, 'YYYY/MM/DD') "부임일-100" 
FROM professor;

교수번호  이름       부임일-100
--------- ---------- ----------
1001      송강       2002/05/04
1004      시진영     1990/10/24
1006      장청아     2003/02/09
1007      이초아     2010/03/28
1008      문규식     2004/11/03
1010      이규진     1998/06/29
1009      이준영     1991/06/26


5. 화학과 2학년 학생의 정보를 삭제한다.

SELECT major 학과, syear 학년, sno 학번, sname 이름
FROM student
WHERE major='화학';

학과          학년 학번    이름
------- ---------- ------- ----------
화학             4 915301  정동상
화학             4 905301  유태지
화학             4 905302  정욱상
화학             4 915303  정욱주
화학             4 915304  권보수
화학             3 915305  최정희
화학             2 925306  김재백

DELETE FROM student WHERE major='화학' AND syear=2;
4 행이 삭제되었습니다.

SELECT major 학과, syear 학년, sno 학번, sname 이름
FROM student
WHERE major='화학';

학과          학년 학번    이름
------- ---------- ------- ----------
화학             4 915301  정동상
화학             4 905301  유태지
화학             4 905302  정욱상
화학             4 915303  정욱주
화학             4 915304  권보수
화학             3 915305  최정희
화학             1 945302  김람석

 

6. 조교수의 정보를 삭제한다.

SELECT pno 교수번호, pname 이름, orders 직위
FROM professor;

교수번호  이름       직위
--------- ---------- -------
1001      송강       정교수
1004      시진영     부교수
1006      장청아     부교수
1007      이초아     조교수
1008      문규식     조교수
1010      이규진     정교수
1009      이준영     정교수

DELETE FROM professor WHERE orders='조교수';
7 행이 삭제되었습니다.

SELECT pno 교수번호, pname 이름, orders 직위
FROM professor;

교수번호  이름       직위
--------- ---------- -------
1001      송강       정교수
1004      시진영     부교수
1006      장청아     부교수
1010      이규진     정교수
1009      이준영     정교수
1013      하영진     부교수
1012      이영준     부교수

 

+ Recent posts