테이블에 데이터 추가하기
테이블 생성하기
특정 테이블에 데이터를 새로 추가할 때 INSERT문을 사용한다.
CREATE TABLE DEPT_TEMP
AS SELECT * FROM DEPT;
위 코드는 DEPT 테이블의 모든 행을 복사하여 DEPT_TEMP 테이블을 생성하라는 명령어이다.
CREATE문은 오라클의 구성요소(오브젝트)를 만드는 데 사용하는 DDL 명령어이다.
테이블을 잘못 만든 경우
DROP TABLE 테이블 이름;
이미 생성되어 있는 테이블을 삭제하고 싶을 때는 DROP 명령어를 사용해 테이블을 삭제한다.
테이블에 데이터를 추가하는 INSERT문
INSERT INTO 테이블 이름 [(열1, 열2, ..., 열N)]
VALUES (열1에 들어갈 데이터, 열2에 들어갈 데이터, ..., 열N에 들어갈 데이터);
만약 INSERT문에서 지정한 열 개수와 각 열에 입력할 데이터 개수가 일치하지 않거나 자료형이 맞지 않는 경우
또는 열 길이를 초과하는 데이터를 지정하는 경우에는 오류가 발생되므로 주의!!
테이블에 NULL 데이터 입력하기
새로운 데이터를 추가할 때 열에 들어갈 데이터가 확정되지 않았거나 굳이 넣을 필요가 없는 데이터는 NULL을 사용한다.
지정하는 방법은 NULL을 직접 명시적으로 입력해 주는 방법과 대상 열을 생략하여 암시적으로 NULL이 되도록 유도하는 방식이 있다.
테이블에 날짜 데이터 입력하기
INSERT문을 통해 날짜 데이터를 입력한다.
INSERT INTO EMP_TEMP(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES (9999, '홍길동', 'PRESIDENT', NULL, '2001/01/01', 5000, 1000, 10);
SELECT * FROM EMP_TEMP;
데이터 입력 시 날짜 데이터를 YYYY/MM/DD 형식으로 입력해야 한다. (YYYY-MM-DD도 가능!)
단, 년/월/일 순서와 반대로 일/월/년 순서로 데이터를 입력할 경우는 오류 발생.
--> 오라클이 설치되어 있는 운영체제의 종류나 사용하는 언어군에 따라 날짜 표기방식이 다르기 때문.
따라서 날짜 데이터를 INSERT 문으로 입력할 때는 위 예시처럼 문자열로 날짜를 입력하지 않고,
TO_DATE 함수를 사용한다.
INSERT INTO EMP_TEMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, DOMM, DEPTNO)
VALUES (2111, '이순신', 'MANAGER', 9999, TO_DATE('07/01/2001', 'DD/MM/YYYY'), 4000, NULL, 20),
SELECT * FROM EMP_TEMP;
만약 현재 시점으로 날짜를 입력하는 경우에는 SYSDATE를 지정하여 처리할 수 있다.
ex) VALUES (3111, '심청이', 'MANAGER', 9999, SYSDATE, 4000, NULL, 30);
서브쿼리를 사용하여 한 번에 여러 데이터 추가
INSERT문은 모두 실행 시 한 행의 데이터가 추가되었다. 하지만 서브쿼리를 사용하면 한 번에 여러 행의 데이터를 추가할 수 있다.
INSERT INTO EMP_TEMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, DOMM, DEPTNO)
SELECT E.EMPNO, E.ENAME, E.JOG, E.MGR, E.HIREDATE, E.SAL, E.COMM, E.DEPTNO
FROM EMP E, SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL
ADD S.GRADE = 1;
SELECT * FROM EMP_TEMP;
서브쿼리 사용 시 유의할 사항
- VALUES절은 사용하지 않는다.
- 데이터가 추가되는 테이블의 열 개수와 서브쿼리의 열 개수가 일치해야 한다.
- 데이터가 추가되는 테이블의 자료형과 서브쿼리의 자료형이 일치해야 한다.
테이블에 있는 데이터 수정하기
오라클에서는 특정 테이블에 저장되어 있는 데이터 내용을 수정할 때 UPDATE문을 사용한다.
UPDATE문의 기본 사용법
UPDATE [변경할 테이블]
SET [변경할 열1]=[데이터], [변경할 열2]=[데이터], ..., [변경할 열N]=[데이터]
[WHERE 데이터를 변경할 대상 행을 선별하기 위한 조건];
데이터를 변경해야 할 행이 정해져 있다면 WHERE절 및 조건식을 추가하여 변경 대상 행을 지정할 수 있다.
데이터 전체 수정
UPDATE DEPT_TEMP2
SET LOC = 'SEOUL';
SELECT * FROM DEPT_TEMP2;
위의 예제는 DEPT_TEMP2 테이블의 LOC열의 데이터를 모두 SEOUL로 수정하라는 내용이다.
수정한 내용을 되돌리고 싶을 때
실수로 UPDATE문을 실행했을 때, 실행을 취소하기 위해 ROLLBACK 명령문을 사용할 수 있다.
ROLLBACK;
데이터 일부분만 수정하기
UPDATE문에서는 수정 대상 행을 선별하기 위해 WHERE절과 조건식을 사용한다.
UPDATE DEPT_TEMP2
SET DNAME = 'DATABASE',
LOC = 'SEOUL'
WHERE DEPTNO = 40;
SELECT * FROM DEPT_TEMP2;
위 내용은 40번 부서의 부서 이름(DNAME)을 DATABASE로 수정하고, 지역(LOC)을 SEOUL로 수정해야 한다는 뜻이다.
서브쿼리를 이용하여 데이터 수정
여러 열을 한 번에 수정하는 경우
UPDATE DEPT_TEMP2
SET (DNAME, LOC) = (SELECT DNAME, LOC FROM DEPT WHERE DEPTNO = 40)
WHERE DEPTNO = 40;
SELECT * FROM DEPT_TEMP2;
위 코드는 DEPTNO 테이블의 40번 부서를 조회하고 그 결과로 부서 이름과 지역을 출력,
DEPTNO_TEMP2 테이블의 부서 이름과 지역에 그대로 반영이 된다.
WHERE절에 서브쿼리를 사용하여 데이터 수정하는 경우
UPDATE DEPT_TEMP2
SET LOC = 'SEOUL'
WHERE DEPTNO = (SELECT DEPTNO FROM DEPT_TEMP2 WHERE DANCE = 'OPERATIONS');
SELECT * FROM DEPT_TEMP2;
UPDATE문 사용 시 유의사항
테이블에 이미 존재하는 데이터를 수정 혹은 삭제하는 기능을 가지고 있는 명령어들은 민감한 데이터가 있는 테이블에 잘못된 명령어를 사용할 수 있어 위험성이 크다.
따라서 UPDATE문을 실행하기 전 UPDATE의 WHERE절을 검증하는 작업이 반드시 필요하다.
이를 위해 해당 WHERE절을 UPDATE문에 넣어 실행하기 전 SELECT문에서 먼저 사용해 보는 것만으로도 간단하게 확인이 가능하다.
ex)
▼완성된 UPDATE문
UPDATE DEPT_TEMP2
SET DNAME = 'DATABASE',
LOC = 'SEOUL'
WHERE DEPTNO = 40;
▼UPDATE문 실행 전 SELECT문을 사용하여 검증
SELECT *
FROM DEPT_TEMP2
WHERE DEPTNO = 40;
UPDATE문을 실행하기 전, WHERE절의 조건식이 수정해야 하는 데이터를 정확히 가리키고 있는지 확인한다.
테이블에 있는 데이터 삭제
DELETE문은 테이블에 있는 데이터를 삭제할 때 사용한다.
DELETE [FROM] [테이블 이름]
[WHERE 삭제할 대상 행을 선별하기 위한 조건식];
UPDATE문과 마찬가지고 WHERE절을 사용하여 삭제 대상이 될 데이터를 선정할 수 있다.
데이터 일부분만 삭제하기
DELETE FROM EMP_TEMP2
WHERE JOB = 'MANAGER';
SELECT * FROM EMP_TEMP2;
JOB열의 데이터가 MANAGER인 데이터만 삭제한다.
서브쿼리를 사용하여 데이터 삭제하기
ex)
급여 등급이 3등급 (급여가 1401~2000 사이)에 있는 30번 부서의 사원들만 삭제해야 한다.
SALGRADE 테이블을 조인한 서브쿼리의 결과 값을 활용하여 DELETE문의 WHERE절 조건식에 적용할 수 있다.
*참고 : 서브쿼리의 결과 값이 여러 개이므로 IN 연산자 사용
DELETE FROM EMP_TEMP2
WHERE EMPNO IN (SELECT E.EMPNO FROM EMP_TEMP2 E, SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL
AND S.GRADE = 3
AND DEPTNO = 30);
SELECT * FROM EMP_TEMP2;
데이터 전체 삭제하기
DELETE FROM EMP_TEMP2;
SELECT * FROM EMP_TEMP2;
'SQL > 오라클_데이터베이스 입문' 카테고리의 다른 글
[SQL] 데이터 정의어_12 (0) | 2024.08.01 |
---|---|
[SQL] 오라클 함수_6 (0) | 2024.07.30 |
[SQL] WHERE절과 연산자_5 (0) | 2024.07.28 |
[SQL] SELECT문의 기본 형식_4 (1) | 2024.07.28 |
[SQL] 관계형 데이터베이스와 오라클 데이터베이스_2 (0) | 2024.07.28 |