Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 기초 선택자
- docker
- DDL
- 쿠버네티스 기본 개념
- docker 소개
- 프로그래밍 기초
- 도커
- Flutter
- 기본 API
- 쿠버네티스
- 깃허브
- mybatis
- dql
- ORACLE 기초
- oracle
- DB 모델링
- DB
- 정보처리기사
- github
- 데이터베이스
- DB 개요
- 필기
- MVC 패턴
- 마크다운
- view
- VS Code
- SQL
- java 기초
- java
- 웹개발 기초
Archives
- Today
- Total
핑구
07.DML(INSERT, UPDATE, DELETE) 본문
📅 2021.09.16 ~ 2021.09.17
DML(Data Manipulation Language)
- 데이터 조작 언어로 테이블에 값을 삽입(INSERT), 수정(UPDATE), 삭제(DELETE)하는 구문을 말한다.
- INSERT: 테이블에 새로운 행을 추가하여 테이블의 행 개수를 증가시키는 구문이다.
- UPDATE: 테이블에 기록된 컬럼 값을 수정하는 구문으로 테이블 전체 행 개수는 변하지 않는다.
- DELETE: 테이블의 행을 삭제하는 구문으로 테이블의 행 개수가 줄어든다.
INSERT
- INSERT INTO 테이블명(컬럼명1, 컬럼명2, ...) VALUES(값1, 값2, ...) 형태로 사용한다.
- 정석 INSERT: 해당 테이블에 존재하는 컬럼 명을 작성하는 INSERT문으로 내가 나열한 컬럼 순서대로 값을 넣을 수 있다. 따라서 본 테이블의 컬럼 순서를 기억하지 않아도 되며, 내가 원하는 컬럼만 뽑아서 값을 넣을 수 있다. 하지만 써야 하는 내용이 방대하다.
INSERT INTO EMPLOYEE(EMP_ID, EMP_NAME, EMP_NO, JOB_CODE, SAL_LEVEL) VALUES(500, '김개발', '001122-1223344', 'J7', 'S3');
- 생략 INSERT: 모든 컬럼에 값을 다 넣는 경우에는 컬럼명을 생략하여 작성이 가능하다. 써야 할 내용이 비교적 적으나, 모든 컬럼에 값을 넣어야 하며 일부만 넣는 경우 오류가 발생한다. 또한 본 테이블의 컬럼 순서대로 값을 넣어야 하기 때문에 본 테이블의 컬럼 순서를 알고 있어야 한다.
INSERT INTO EMPLOYEE VALUES(500, '김개발', '001122-1223344', 'gae@naver.com', '01023456789', 'D1', 'J7', 'S3', 3000000, 0.2, 200, SYSDATE, NULL, DEFAULT);
- 아래와 같은 방법으로 여러 개의 행을 한 번에 INSERT하는 것도 가능하다.
INSERT INTO EMP_01( SELECT EMP_ID, EMP_NAME, DEPT_TITLE FROM EMPLOYEE LEFT JOIN DEPARTMENT ON(DEPT_CODE = DEPT_ID) );
INSERT ALL
- 여러 개의 테이블을 한 번에 삽입할 경우 사용한다.
- 서브쿼리의 조건절이 같을 경우에는 아래와 같이 조건을 넣어 한 번에 삽입할 수 있으며, 이때 가져올 컬럼이 서로 달라도 가져올 컬럼들을 모두 SELECT하면 된다.
INSERT ALL INTO EMP_DEPT_D1 VALUES(EMP_ID, EMP_NAME, DEPT_CODE, HIRE_DATE) INTO EMP_MANAGER VALUES(EMP_ID, EMP_NAME, MANAGER_ID) SELECT EMP_ID, EMP_NAME, DEPT_CODE, HIRE_DATE, MANAGER_ID FROM EMPLOYEE WHERE DEPT_CODE = 'D1';
- 서브쿼리의 조건절이 다를 경우에도 INSERT ALL을 사용하여 한 번에 삽입할 수 있으며, 해당 경우에는 WHEN을 이용해 각각 조건을 삽입해 준다.
INSERT ALL WHEN HIRE_DATE < '2000/01/01' THEN INTO EMP_OLD VALUES(EMP_ID, EMP_NAME, HIRE_DATE, SALARY) WHEN HIRE_DATE >= '2000/01/01' THEN INTO EMP_NEW VALUES(EMP_ID, EMP_NAME, HIRE_DATE, SALARY) SELECT EMP_ID, EMP_NAME, HIRE_DATE, SALARY FROM EMPLOYEE;
UPDATE
- 테이블에 기록된 값을 수정하는 명령어로 행 개수가 변하지 않는다.
- WHERE를 사용하여 조건을 설정하지 않는 경우 모든 행에 대한 UPDATE가 진행된다.
UPDATE EMP_SALARY SET (SALARY, BONUS) = (SELECT SALARY, BONUS FROM EMP_SALARY WHERE EMP_NAME = '김개발') WHERE EMP_NAME IN('박개발', '최개발', '정개발', '이개발');
- UPDATE시 내가 지정한 데이터 크기보다 큰 값을 입력하거나, 제약 조건에 위배되는 값을 입력하면 수정되지 않는다. 따라서 제약 조건에 위배되는 값을 입력하지 않도록 주의해야 한다.
DELETE
- 테이블에 있는 행을 삭제하는 명령어로 행의 개수가 줄어든다.
- WHERE를 사용하여 조건을 설정하지 않는 경우 모든 행이 삭제된다.
DELETE FROM EMPLOYEE WHERE EMP_NAME = '김개발';
- FOREIGN KEY를 이용하여 참조되고 있는 값은 삭제가 불가능하지만 부득이하게 삭제해야 하는 경우 제약 조건을 활성화/비활성화 할 수 있다.
-- SYS_C007699 제약조건 비활성화 ALTER TABLE EMPLOYEE DISABLE CONSTRAINT SYS_C007699 CASCADE; -- SYS_C007699 제약조건 활성화 ALTER TABLE EMPLOYEE ENABLE CONSTRAINT SYS_C007699;
- TRANCATE: DELETE와 비슷하며, 테이블의 전체 행을 삭제한다. DELETE보다 수행 속도가 빠르지만 ROLLBACK을 통한 복구가 불가능하다. ROLLBACK할 데이터를 가지고 있지 않기 때문에 속도가 빠르다.
TRUNCATE TABLE EMP_SALARY;
'JAVA 웹 개발 > 2. Oracle' 카테고리의 다른 글
09. VIEW (0) | 2022.08.13 |
---|---|
08. DDL(ALTER, DROP) (0) | 2022.08.13 |
06. DDL(CREATE) (0) | 2022.08.13 |
05. 서브쿼리 (0) | 2022.06.08 |
04. JOIN (0) | 2022.06.08 |