데이터베이스 - DML 기초1

2022. 11. 3. 13:55데이터베이스

DML(INSERT, UPDATE, DELETE) 문의 이해

INSERT, UPDATE, DELETE

 

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

 

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

 

SQL> DELETE FROM 테이블 
 2 [WHERE 조건];

 

SQL> COMMIT;

 

SQL> ROLLBACK;

 

 

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

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

 

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

 

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

 

SQL> SELECT * FROM dept;
DN DNAME LOC
-- ---------- ------
01 총무 서울
02 회계 서울
10 ERP 서울
20 ISP 부산
30 ITEA 광주
40 CRM 대전
50 POS
7 개의 행이 선택되었습니다.

 

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

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

 

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

 

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

 

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

 

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

 

예제 3. 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

 

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

 

SQL> DESC emp;
이름                                               널?  유형
----------------------------------------- -------- ------------
ENO                                                      VARCHAR2(4)
ENAME                                                VARCHAR2(10)
SEX                                                      VARCHAR2(2)
JOB                                                      VARCHAR2(8)
MGR                                                    VARCHAR2(4)
HDATE                                                 DATE
SAL                                                      NUMBER

COMM                                                NUMBER
DNO                                                   VARCHAR2(2)

 

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

 

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

 

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

  -----> 절대하면안된다 컬럼,행이 40~50개인데 오류가 나면 어디서 문제가 생긴건지

           확인할수 없기 때문이다.

 

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

 

SQL> SELECT * FROM emp;
ENO ENAME SE JOB MGR HDATE SAL COMM DN
---- ---------- -- -------- ---- ---------- ---------- ---------- --
1001 문시현 남 모델링 1991/02/01 4500 520 10
1002 김주란 여 모델링 1992/03/03 4100 330 20
1003 양선호 남 모델링 1995/02/21 4300 30

 

예제 4. Emp 테이블의 모든 데이터를 삭제하고 아래 제공된 값을 입력한다. 
 ENO ENAME HDATE 
----- ------ --------------------
5001 안영희 1991/01/03:07:15:25

 

SQL> SELECT sysdate FROM dual;    -> 현재 날짜,시간
SYSDATE
----------
2013/09/30

 

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

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

 

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

 

SQL> INSERT INTO emp (eno, ename, hdate)
 2 VALUES ('5001', '안영희', '1991/01/03:07:15:25'); 
1 개의 행이 만들어졌습니다.

 

SQL> COMMIT;
커밋이 완료되었습니다. 예제 5. 날짜 형식을 확인하고 아래 제공된 값을 입력한다. 날짜 입력에 TO_DATE()를 이용한다.
 

ENO ENAME HDATE 
----- ------ --------------------
5002 안영숙 1992/09/05:08:15:25

 

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
-------- ---------- -------------------
5002 안영숙 1992/09/05:08:15:25
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

 

예제 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
-------- -------------------
01 2000-01-01:00:00:00
02 2099-01-01:00:00:00
03 1999-01-01:00:00:00
..............
..............
8 개의 행이 선택되었습니다. 

 

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

SQL> @c:\sql\school201712
SQL> SELECT * FROM emp WHERE ename = '김주란';
ENO ENAME SEX JOB MGR HDATE SAL COMM DNO
---- ---------- --- -------- ---- ---------- ---------- ---------- ---
1002 김주란 여 모델링 0201 1992/03/03 4100 330 20

 

SQL> UPDATE emp SET dno = '10', sal = sal*1.1
 2 WHERE ename = '김주란';
1 행이 갱신되었습니다.

 

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

 

SQL> SELECT * FROM emp WHERE ename = '김주란';
ENO ENAME SEX JOB MGR HDATE SAL COMM DNO
---- ---------- --- -------- ---- ---------- ---------- ---------- ---
1002 김주란 여 모델링 0201 1992/03/03 4510 330 10

 

SQL> SELECT * FROM emp
 2 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 2200 01
0202 손하늘 여 지원 0001 1991/02/01 3510 980 01

 

SQL> UPDATE emp SET sal = sal * 1.1
 2 WHERE dno = '01';
3 행이 갱신되었습니다.

 

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

 

SQL> SELECT * FROM emp
 2 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 2200 01
0202 손하늘 여 지원 0001 1991/02/01 3861 980 01

'데이터베이스' 카테고리의 다른 글

데이터베이스 - 단일 행 함수  (0) 2022.11.03
데이터베이스 - 트랜잭션  (0) 2022.11.03
데이터베이스 - 서브쿼리 기초1  (1) 2022.11.03
리눅스DB(사용자 계정 생성)  (0) 2022.11.03
오라클 DB 구조  (0) 2022.11.03