728x90
반응형
들어가기 전에
이 포스팅은 오라클로 배우는 데이터베이스 입문(이지훈 저)을 읽으면서 기억하고자 하는 내용 및 추가적으로 알아본 내용을 담았습니다. 책 전체 내용을 보시고 싶으신 분은 책을 구매하시어 읽어보시길 바랍니다.
이번 포스팅에서는 DML(Data Manipulation Language)로 불리는 테이블에 데이터를 추가・변경・삭제할 때 사용하는 명령어에 대해 알아보도록 하겠습니다.
테이블에 데이터를 추가하는 INSERT문
INSERT INTO [테이블 이름] ([열1, 열2, ..., 열N])
VALUES ([열1에 들어갈 데이터, 열2에 들어갈 데이터, ..., 열N에 들어갈 데이터]);
INSERT 시, 특정 컬럼에 대해 NULL을 넣고 싶은 경우
데이터를 추가할 때, 특정 컬럼에 대해 NULL
을 넣고 싶다면, 아래와 같이 진행할 수 있습니다.
NULL
을 명시적으로 기입(첫 번째 사진) - 실무에서 선호하는 방식- 해당 열의 자료형이 문자열 또는 날짜형일 경우 빈 공백 문자열(
''
) 사용 시NULL
로 입력됨(두 번째 사진) INSERT
문의 대상 컬럼에서 데이터를 넣고 싶지 않은 항목 제외(세 번째 사진)- 세 가지 경우 모두
NULL
로 데이터 입력되는 것 확인(네 번째 사진)
INSERT 시 날짜 데이터 참고 사항
- 날짜 데이터
INSERT
시,'2022/05/08'
과 같이 문자열로 데이터로도 입력이 가능합니다. - 하지만, 의도한 형식에 맞게 데이터를
INSERT
하기 위해서는TO_DATE()
함수를 이용하여 날짜 데이터를 입력하는 것이 좋습니다.
서브쿼리를 활용한 한 번에 여러 데이터 추가하기
만약, EMP
테이블에 존재하는 레코드 중, 급여 등급이 1
인 사원들만 대상으로 EMP_TEMP
테이블에 넣고 싶다면, INSERT
구문에 서브쿼리를 사용해 구현할 수 있습니다.
EMP
테이블에 존재하는 레코드의 급여 등급을 알기 위해 먼저,EMP
테이블과SALGRADE
테이블을 비등가 조인을 진행합니다.- 그 후, 급여 등급이
1
인 사원들에 대해 조회하여 해당 데이터들을INSERT
합니다.
참고로, INSERT
문에서 서브쿼리를 사용할 때에는 아래 내용을 유의해야 합니다.
1. VALUES 절은 사용하지 않습니다.
2. 데이터가 추가되는 테이블의 열 개수와 서브쿼리의 열 개수가 일치해야 합니다.
3. 데이터가 추가되는 테이블의 자료형과 서브쿼리의 자료형이 일치해야 합니다.
테이블에 있는 데이터를 수정하는 UPDATE문
UPDATE [변경할 테이블]
SET [변경할 열1]=[열1 데이터], [변경할 열2]=[열2 데이터], ..., [변경할 열n]=[열n 데이터]
[WHERE 데이터를 변경할 대상 행을 선별하기 위한 조건];
위와 같이, LOC
이 'DALLAS'
인 레코드에 대해 LOC
을 'SEOUL'
로 UPDATE
하면 SELECT
결과에서 기존에 'DALLAS'
였던 컬럼값이 'SEOUL'
로 변경됨을 확인할 수 있습니다.
UPDATE한 내용을 되돌리고 싶을 경우
ROLLBACK;
UPDATE
문을 실행한 후, 이전 상태로 되돌리기 위해서는 ROLLBACK
명령어를 사용하면 됩니다.
ROLLBACK
명령어는TCL(Transaction Control Language)
명령어 중 하나로 정해진 시점 이후에 실행된DML
명령어의 실행을 취소하는 명령어입니다.
서브쿼리를 활용한 여러 열 한 번에 수정하기
- 위와 같이 서브쿼리를 이용해 UPDATE문을 작성한다면, 서브쿼리 결과로 나온 열의 개수 및 데이터 타입이
UPDATE
하고자 하는 열의 개수 및 데이터 타입과 동일해야 합니다.
테이블에 데이터가 있다면 수정하고, 없다면 추가할 수 있는 MERGE문
MERGE INTO [테이블 이름] -- UPDATE 또는 INSERT할 테이블
USING [테이블 이름] -- 비교할 대상 테이블
ON ([조건])
WHEN MATCHED THEN
UPDATE SET
[수정할 컬럼1] = [컬럼1 데이터],
[수정할 컬럼2] = [컬럼2 데이터],
...,
[수정할 컬럼n] = [컬럼n 데이터]
WHEN NOT MATCHED THEN
INSERT (테이블에 추가할 레코드의 컬럼1, 테이블에 추가할 레코드의 컬럼2, ..., 테이블에 추가할 레코드의 컬럼n)
VALUES (컬럼1 데이터, 컬럼2 데이터, ..., 컬럼n 데이터);
MERGE INTO
구문은 테이블에 넣고자 하는 데이터가 존재하면 해당 데이터를 UPDATE
하고, 없다면 INSERT
하고자 할 때 사용합니다.
- 유의할 점은,
ON
조건절에 사용한 컬럼은UPDATE
가 불가능하다는 점이며, 되도록PK
로만 비교하는 것이 좋습니다.
- 위 예시의 경우,
DEPT_TEMP2
테이블에 데이터를 MERGE
하는 것으로,DEPT_TEMP2
의 특정 컬럼값을 체크하는 걸 조건식으로 작성했습니다.MERGE
하는 테이블과 조건을 건 테이블이 동일하기 때문에 USING DUAL로 작성하였습니다. ON
조건식이 참인 경우가 있는 예시이기 때문에UPDATE
하는WHEN MATCHED THEN
부분이 수행됩니다.
- 위 예시의 경우,
ON
조건절이 참인 경우가 없으므로WHEN NOT MATCHED THEN
부분이 수행되어 신규 레코드가INSERT
됩니다.
테이블에 있는 데이터를 삭제하는 DELETE문
DELETE [FROM] [테이블 이름]
[WHERE 삭제할 대상 행을 선별하기 위한 조건식];
서브쿼리를 사용하여 레코드 DELETE하기
사원의 급여에 따라 급여 등급이 정해집니다. 만약, 특정 급여 등급의 사원들의 정보를 삭제하고자 한다면 아래와 같이 서브쿼리를 활용할 수 있습니다.
참고 자료
- MERGE 관련 자료
- 오라클로 배우는 데이터베이스 입문(이지훈 저)
728x90
반응형
'DB > Oracle' 카테고리의 다른 글
[Oracle] Orange 단축키 (0) | 2022.05.24 |
---|---|
[Oracle, macOS] 오라클 튜닝 에센셜 실습 환경 구성하기 (0) | 2022.05.22 |
[Oracle] 조인(join) (0) | 2022.05.08 |
[Oracle] Oracle Function(오라클 함수) - GROUP BY절, HAVING절, 기타 그룹화 관련 함수 (0) | 2022.05.08 |
[Oracle] Oracle Function(오라클 함수) - 다중행 함수(집계 함수) (0) | 2022.05.08 |