본문 바로가기
코딩공부/DB

Oracle - DML (01)

by Dobby_72 2025. 2. 8.
반응형

테이블에 값을 삽입하거나(INSERT), 수정하거나(UPDATE), 삭제(DELETE)하는 구문

 

 


1. INSERT

-- 테이블에 새로운 행을 추가하는 구문
SELECT * FROM EMPLOYEE2;
SELECT COUNT(*) FROM EMPLOYEE2;

-- 1) INSERT INTO 테이블명 VALUES(데이터,데이터,....)
-- 테이블에 모든 컬럼에 대한 값을 INSERT할 때 사용
-- INSERT하고자 하는 컬럼이 모든 컬럼인 경우 컬럼명 생략 가능.
-- 단, 컬럼의 순서를 지켜서 VALUES에 값을 기입해야함

INSERT INTO EMPLOYEE2
VALUES (900,'장채현','901123-2345678','jang_ch@kh.or.kr','01012341234',
        'D1','J7','S3',4300000,0.2,200,SYSDATE,NULL,'N');
--1 행 이(가) 삽입되었습니다.

SELECT * FROM EMPLOYEE2
WHERE EMP_ID  = 900;
SELECT COUNT(*) FROM EMPLOYEE2;

 


2. UPDATE

테이블에 기록된 컬럼의 값을 수정하는 구문

-- [작성법]
-- UPDATE 테이블명 SET 컬럼명 = 바꿀값 [WHERE 컬럼명 비교연산자 비교값];

-- DEPARTMENT2 테이블에서 DEPT_ID가 'D9'인 부서 정보 조회
SELECT * FROM DEPARTMENT2
WHERE DEPT_ID ='D9';

-- DEPARTMENT2 테이블에서 DEPT_ID가 'D9'인 행의 DEPT_TITLE을 '전략기획팀'으로 수정
UPDATE DEPARTMENT2 
SET DEPT_TITLE = '전략기획팀' 
WHERE DEPT_ID ='D9';
--1 행 이(가) 업데이트되었습니다.

-- UPDATE 확인
SELECT * FROM DEPARTMENT2
WHERE DEPT_ID ='D9';

COMMIT;

-- EMPLOYEE2 테이블에서 BONUS를 받지 않는 사원의
-- BONUS를 0.1로 변경
UPDATE EMPLOYEE2 SET BONUS = 0.1
WHERE BONUS IS NULL;
-- 15개 행 이(가) 업데이트되었습니다.


-----------------------------------------------------------------------------

-- * 조건절을 설정하지 않고 UPDATE 구문 실행 시 모든 행의 컬럼 값 변경
SELECT * FROM DEPARTMENT2;

-- 기술지원부 -> 기술연구팀 변경
UPDATE DEPARTMENT2
SET DEPT_TITLE = '기술연구팀';
--> 9개 행 이(가) 업데이트되었습니다.

SELECT * FROM DEPARTMENT2;
--> 조건을 설정하지 않아 모든 행의 컬럼 값이 수정되는 문제가 발생함!
---> WHERE절 잘 작성하자!

ROLLBACK;

----------------------------------------------------------------------------

--* 여러 컬럼을 한번에 수정할 시 콤마(,)로 컬럼을 구분하면 됨.
-- D9 / 전략기획팀-> D0 / 전략기획2팀으로 수정
UPDATE DEPARTMENT2
SET DEPT_ID = 'D0', DEPT_TITLE='전략기획2팀'
WHERE DEPT_ID ='D9'
AND DEPT_TITLE='전략기획팀';

SELECT * FROM DEPARTMENT2;

ROLLBACK;

---------------------------------------------------------------------------------

-- * UPDATE시에도 서브쿼리 사용 가능

-- [작성법]
-- UPDATE 테이블명
-- SET 컬럼명 = (서브쿼리)

-- EMPLOYEE 테이블에서
-- 평상시 유재식 사원을 부러워하던 방명수 사원의
-- 급여와 보너스율을 유재식 사원과 동일하게 변경해 주기로 했다.
-- 이를 반영하는 UPDATE문을 작성

--------------------------------------------------------------------------------

-- * 다중행 다중열 서브쿼리를 이용한 UPDATE문

-- EMPLOYEE2 테이블에서
-- 방명수 사원의 급여 인상 소식을 전해들은 다른 멤버들이
-- 단체로 파업을 진행했다.
-- 노옹철, 전형돈, 정중하, 하동운 사원의 급여와 보너스를
-- 유재식 사원의 급여와 보너스와 같이 변경하는 UPDATE문을 작성하시오.

SELECT * FROM EMPLOYEE2
WHERE EMP_NAME IN ('노옹철','전형돈','정중하','하동운');

UPDATE EMPLOYEE2
SET (SALARY, BONUS) = (SELECT SALARY, BONUS FROM EMPLOYEE2 WHERE EMP_NAME= '유재식')
WHERE EMP_NAME IN ('노옹철','전형돈','정중하','하동운');

 


3. MERGE(병합)

구조가 같은 두 개의 테이블을 하나로 합치는 기능

테이블에서 지정하는 조건의 값이 존재하면 UPDATE

조건의 값이 없으면 INSERT 됨

 

 


4. DELETE

테이블의 행을 삭제하는 구문

-- [작성법]
-- DELETE FROM 테이블명 WHERE 조건설정
-- 만약 WHERE 조건을 설정하지 않으면 모든 행이 다 삭제됨

COMMIT;

-- EMPLOYEE2 테이블에서 '장채현' 사원 정보 조회
SELECT * FROM EMPLOYEE2
WHERE EMP_NAME = '장채현';

-- EMPLOYEE2 테이블에서 이름이 '장채현'인 사원 정보 삭제
DELETE FROM EMPLOYEE2 WHERE EMP_NAME = '장채현';
-- 1 행 이(가) 삭제되었습니다.

--삭제확인
SELECT * FROM EMPLOYEE2
WHERE EMP_NAME = '장채현';

ROLLBACK;

--EMPLOYEE2 테이블 전체 삭제
DELETE FROM EMPLOYEE2;

 


5. TRUNCATE(DDL임! DML아님!)

테이블의 전체행을 삭제하는 DDL

DELETE보다 수행속도가 더 빠르다.

ROLLBACK을 통해 복구할 수 없음

-- TRUNCATE 테스트용 테이블 생성
CREATE TABLE EMPLOYEE3
AS SELECT * FROM EMPLOYEE2;

-- 생성 확인
SELECT * FROM EMPLOYEE3;

--DELETE로 모든 데이터 삭제
DELETE FROM EMPLOYEE3;

-- 삭제 확인
SELECT * FROM EMPLOYEE3;

ROLLBACK;

-- 롤백 후 복구 확인
SELECT * FROM EMPLOYEE3;

-- TRUNCATE로 삭제
TRUNCATE TABLE EMPLOYEE3;

-- 삭제 확인
SELECT * FROM EMPLOYEE3;
728x90
반응형

'코딩공부 > DB' 카테고리의 다른 글

Oracle - TCL문 (01)  (0) 2025.02.08
Oracle - Select문 (05)  (0) 2025.02.08
Oracle - Select문 (04)  (0) 2025.01.20
Oracle - Select문 (03)  (0) 2025.01.20
Oracle - Select문 (02)  (0) 2025.01.20