반응형
2025.01.20 - [코딩공부/DB] - Oracle - Select문 (01)
2025.01.20 - [코딩공부/DB] - Oracle - Select문 (02)
2025.01.20 - [코딩공부/DB] - Oracle - Select문 (03)
2025.01.20 - [코딩공부/DB] - Oracle - Select문 (04)
DML(Data Manipulation Langauage) : 데이터 조작 언어
테이블에 값을 삽입하거나(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 |