본문 바로가기

카테고리 없음

[Oracle] 데이터 조작어(DML)

DB에 직접적인 영향을 주므로 트랜잭션을 이용하거나 데이터를 미리 확인 후 작업하는 것이 최선의 방법이다

 

연습 (테이블 복사)

실제 데이터에 영향이 있으므로 아래 DML 구문들을 연습하기에 앞서 사용하던 테이블을 카피하여 연습합니다

CREATE TABLE sales_reps 
AS (SELECT employee_id id, last_name name, salary, commission_pct FROM EMPLOYEES WHERE 1=2); 


위 구문은 employees 테이블의 employee_id, last_name, salary, commission_pct 컬럼에 대하여
WHERE에 적힌 조건이 거짓(1=2)이므로 레코드 값 없이 구조만 그대로 가져올 수 있다

 

 

INSERT (행 삽입)

기존의 테이블에 데이터를 추가하기 위해서 사용하는 구문이다

 


기본 문법

 

INSERT INTO 테이블명 VALUES(값1 [, 값2, ...]); 


INTO는 생략할 수 있다

예제

 

departments 테이블에 department_id, department_name, manager_id, location_id 값 추가 
INSERT INTO departments VALUES (330, House, 80, 1700) 


위 처럼 작성 내용 중 테이블 뒤에 '(컬럼)'이 오지않을 경우
존재하는 컬럼에 인덱스에 맞춰 꼭 순서대로 값을 입력해야 한다

만약 department_id와 department_name이 NOT NULL (NULL 값을 허용하지 않는 것) 일 때

INSERT INTO departments VALUES (80, 1700) 


이 구문처럼 department_id와 department_name 작성 값을 무시하고
뒤에 2개의 레코드만 적용하려고 했을 때 에러가 발생한다

위 처럼 모든 컬럼을 생략하고 테이블의 컬럼에 따른 인덱스대로 따라간다면 상관없지만
특정 컬럼만 값을 추가하고 싶을 경우 아래와 같은 문법을 사용하자

INSERT INTO departments (department_id, department_name, location_id) 
VALUES (270, IT, 1700); 


데이터 추가 시 각 컬럼 타입에 맞게 지정해주어야 한다
즉 문자형이나 날짜형인 경우 인용 부호(')를 사용하고 숫자의 경우 그냥 값만 써준다

SQL Server에서 문자형은 Unicode와 ANSI 문자형으로 구분되는데,
Unicode 문자형은 N'값'과 같이 앞에 N을 붙여 표시해준다

이미지와 같은 바이너리 데이터는 헥사 값 앞에 0x를 붙여 표시해준다

다른 테이블의 컬럼을 가져올 수 있는 방법도 있는데 그럴 경우 서브쿼리를 이용해준다

예제
employees 테이블의 employee_id(별칭 id), last_name(별칭 name), salary, commission_pct 컬럼에 대하여
job_id에 'REP' 단어가 포함돼있는 레코드만
sales_reps 테이블의 id, name, salary, commission_pct 컬럼에 추가

INSERT INTO sales_reps (id, name, salary, commission_pct) 
SELECT employee_id AS id, last_name AS name, salary, commission_pct 
FROM employees 
WHERE job_id LIKE '%REP%'; 


만약 NULL 값을 넣어주고 싶을 경우 해당 컬럼 값에 NULL을 넣는다

 

 

UPDATE (행 수정)

기존의 데이터를 수정하기 위해서 사용하는 구문이다

 


기본 문법

 

UPDATE 테이블명 SET 컬럼 = 값; 


예제
departments 테이블의 Finance라는 이름을 가진 department_id를 70으로 수정

UPDATE departments 
SET department_id = 70 
WHERE last_name = 'Finance'; 


복수 컬럼 값을 갱신하고 싶을 때는 아래와 같은 문법을 사용하면 된다

employees 테이블의 job_id에 'IT'가 포함된 레코드들에 대해

기존의 employee_id에 값 1을 증가시키고 hire_date 컬럼을 특정 날짜로 갱신

 

UPDATE employees 
SET employee_id = employee_id+1, hire_date = '2020-2-07' 
WHERE job_id LIKE '%IT%'; 


WHERE절을 생략하거나 잘못 작성했을 경우 모든 데이터가 수정될 수도 있으니 주의할 것!
물론 모든 레코드(Rows)를 수정할 경우 WHERE절을 생략해도 상관없다

실수를 방지하기 위하여 SELECT ... WHERE절을 미리 써놓은 뒤 수정할 내용을 작성하는 습관을 들이는 것이 좋다

 

 

DELETE (행 삭제)

데이터를 삭제하기 위해서 사용하는 구문이다

 


기본 문법

 

DELETE FROM 테이블명 WHERE 조건식; 


WHERE절을 생략하거나 잘못 작성했을 경우 모든 데이터가 삭제될 수도 있으니 주의할 것!
물론 테이블 자체를 삭제할 경우 WHERE절을 생략해도 상관없다

실수를 방지하기 위하여 SELECT ... WHERE절을 미리 써놓은 뒤 삭제할 내용을 작성하는 습관을 들이는 것이 좋다