기존 테이블 복제
DEPT테이블 복사한 새 테이블 DEPT_TEMP을 만들려면 다음과 같다.
CREATE TABLE DEPT_TEMP
AS SELECT * FROM DEPT;
테이블에 데이터 추가 시, INSERT문을 이용해 추가할 수 있다.
Ex) 50번 부서번호, 부서 이름 DATABASE, 위치 SEOUL 추가
INSERT INTO DEPT_TEMP (DEPTNO, DNAME, LOC)
VALUES (50, 'DATABASE', 'SEOUL');
-- 열 지정 없이 추가. 순서대로 자동 지정해 추가함.
INSERT INTO DEPT_TEMP
VALUES (60, 'NETWORK', 'BUSAN');
-- NULL 값 지정해 추가.
INSERT INTO DEPT_TEMP (DEPTNO, DNAME, LOC)
VALUES (70, 'WEB', NULL);
-- 공백 문자열로 NULL값 입력
INSERT INTO DEPT_TEMP (DEPTNO, DNAME, LOC)
VALUES (80, 'MOBILE', '');
-- 열 데이터 넣지 않는 방식으로 NULL값 입력
INSERT INTO DEPT_TEMP (DEPTNO, LOC)
VALUES (90, 'INCHEON');
SubQuery를 이용해 WHERE에 조건을 넣어, 다른 테이블에서 해당 조건에 해당하는 데이터를
원하는 테이블로 추가할 수 있다.
-- DEPTNO가 40 이하인 데이터 DEPT에서 DEPT_TEMP로 복사해 추가
INSERT INTO DEPT_TEMP (DEPTNO, DNAME, LOC)
SELECT DEPTNO, DNAME, LOC
FROM DEPT
WHERE DEPTNO <= 40;
-- DEPT의 별칭을 지정하면 가독성이 좋아진다.
-- 결과는 윗 QUERY와 똑같다.
INSERT INTO DEPT_TEMP (DEPTNO, DNAME, LOC)
SELECT D.DEPTNO, D.DNAME, D.LOC
FROM DEPT D
WHERE DEPTNO <= 40;
UPDATE (실무에서는 기존 데이터를 건드리므로 위험함!!!)
데이터 일부분 수정 시 다음과 같이 쓴다.
-- DEPTNO가 40인 데이터를 아래와 같이 수정
UPDATE DEPT_TEMP
SET DNAME = 'DATABASE',
LOC = 'SEOUL'
WHERE DEPTNO = 40;
SubQuery 이용해 수정할 수도 있다.
DNAME, LOC DEPT에서 불러와 DEPT_TEMP2에 덮어쓰기
UPDATE DEPT_TEMP2
SET DNAME = (SELECT DNAME, LOC
FROM DEPT
WHERE DEPTNO = 40),
LOC = (SELECT DNAME, LOC
FROM DEPT
WHERE DEPTNO = 40)
WHERE DEPTNO = 40;
WHERE절에 서브쿼리도 적용 가능하다.
DNAME이 'OPERATIONS' 인 FIELD에 LOC 'SEOUL'로 변경
UPDATE DEPT_TEMP2
SET LOC = 'SEOUL'
WHERE DEPTNO = (SELECT DEPTNO
FROM DEPT_TEMP2
WHERE DNAME = 'OPERATIONS');
내가 원하는 데이터를 미리 확인한 뒤에 UPDATE를 변경해야
사고를 미연에 방지할 수 있다.
1. SELECT WHERE을 통해 미리 데이터 확인
SELECT *
FROM DEPT_TEMP2
WHERE DEPTNO = 40;
2. UPDATE 실행(1번과 따로 실행해야 함!)
UPDATE DEPT_TEMP2
SET DNAME = 'DATABASE',
LOC = 'SEOUL'
WHERE DEPTNO = 40;
DELETE
WHERE절을 이용해 일부 데이터를 삭제할 수 있다.
잘못 삭제했다면 ROLLBACK;으로 되돌릴 수 있다.
-- JOB이 'MANAGER'인 부분 삭제
DELETE FROM EMP_TEMP2
WHERE JOB = 'MANAGER';
다음과 같이 Join과 SubQuery을 같이 이용할 수도 있다.
-- SALGRADE 테이블 속 GRADE 3의 LOSAL 1401과
-- HISAL 2000 사이에 있는 데이터 삭제
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);
'Oracle' 카테고리의 다른 글
Oracle - 누적 합계를 해주는 SUM OVER (0) | 2020.06.04 |
---|---|
Oracle - 중복된 데이터가 2개 이상일 경우 (0) | 2020.06.04 |
Oracle - SubQuery (0) | 2020.06.03 |
Oracle - join (0) | 2020.06.02 |
Oracle EMP Table 예시 (0) | 2020.06.01 |