▶ 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 이영준 부교수
'SQL 공부 기록' 카테고리의 다른 글
SQL 20 - 테이블 생성과 데이터 타입의 이해 (0) | 2021.11.19 |
---|---|
SQL 19 - 트랜잭션(Transaction)과 잠금(Lock)의 이해 (0) | 2021.11.19 |
(수정중) SQL 17 - 그룹 함수와 HAVING (0) | 2021.11.18 |
SQL 16 - 그룹 함수와 GROUP BY (0) | 2021.11.18 |
DB 2 - 개체, 관계, 속성, 식별자 (1) | 2021.11.17 |