hyeonga_code
Database_45_데이터 조작과 트랜잭션_DML 데이터 조작어 본문
-- DML_Data Management Language 데이터 조작어
-- INSERT
/*
INSERT INTO table [ (column, ... )]
VALUES (value, ...);
*/
-- 테이블에 데이터를 추가합니다.
-- 한 번에 한 행만 추가할 수 있습니다.
-- 각 열에 대한 값을 포함하는 새 행을 삽입합니다.
-- 테이블 열의 기본 순서대로 값을 작성해야 합니다.
-- INSERT 절에 열을 직접 나열할 수 있습니다.
-- 테이블 생성시 선언한 순서대로 데이터를 삽입하는 경우 컬럼 이름을 생략할 수 있습니다.
-- 문자 및 날짜 값은 작은 따옴표로 묶어 작성합니다.
-- 1)
INSERT INTO departments(department_id, department_name,
manager_id, location_id)
VALUES (70, 'Public Relations', 100, 1700);
-- 2) 테이블 생성시 선언한 순서대로 데이터를 삽입하는 경우 컬럼 이름을 생략할 수 있습니다.
INSERT INTO departments
VALUES (70, 'Public Relations', 100, 1700);
/*
1 행 이(가) 삽입되었습니다.
*/
SELECT * FROM departments;
/*
DP_ID DEPARTMENT_NAME M_ID LO_ID
---------------------------------------------------------------------
10 Administration 200 1700
20 Marketing 201 1800
50 Shipping 124 1500
60 IT 103 1400
80 Sales 149 2500
90 Executive 100 1700
110 Accounting 205 1700
190 Contracting ( null ) 1700
70 Public Relations 100 1700
-- 데이터가 삽입되는 순서는 무작위입니다.
-- 트랜잭션이 끝난 상태는 아닙니다.
-- 새 sqldeveloper를 실행하여 조회하면 70번 데이터는 출력되지 않습니다.
-- 진행 중인 트랜잭션은 공유되지 않습니다.
-- 동시성을 제어합니다.
*/
-- 널 값을 가지는 행 삽입
-- 암시적_Implicit : 열 목록에서 해당 열을 생략합니다.
-- 명시적_Explicit : VALUES 절에서 NULL 키워드를 지정합니다.
-- 암시적
INSERT INTO departments (department_id, department_name)
VALUES (30, 'Purchasing');
INSERT INTO departments (department_id, department_name, location_id)
VALUES (40, 'Human Resource', 2500);
SELECT * FROM departments;
/*
DP_ID DP_NAME M_ID LO_ID
--------------------------------------------------------------------
30 Purchasing ( null ) ( null )
40 Human Resource ( null ) 2500
*/
-- 명시적
INSERT INTO departments
VALUES (100, 'Finance', NULL, NULL);
SELECT * FROM departments;
/*
DP_ID DP_NAME M_ID LO_ID
--------------------------------------------------------------------
100 Finance ( null ) ( null )
*/
-- 특정 값 삽입
-- SYSDATE 함수
-- 현재 날짜 및 시간을 기록합니다.
INSERT INTO employees
VALUES(113, '수현', '김', 'KSH', '02.1234.5678', SYSDATE, 'AC_ACCOUNT', 6900, NULL, 205, 100);
/*
1 행 이(가) 삽입되었습니다.
*/
SELECT first_name, last_name, hire_date FROM employees;
/*
FIRST_NAME LAST_NAME HIRE_DATE
----------------------------------------------------------
수현 김 23/07/06
...
*/
-- TO_DATE 함수
-- 날짜를 기본 형식이 아닌 다른 형식으로 입력하고 싶은 경우 사용합니다.
INSERT INTO employees
VALUES (114, 'Den', 'Raphealy', 'DRAPHEAL', '515.127.4561', TO_DATE('02 03 1999', 'MM DD YYYY'), 'AC_ACCOUNT', 11000, NULL, 100, 10);
-- 고려사항
-- 연도를 YY 형식 사용 시, 세기의 기본값으로 현재 세기를 사용합니다.
INSERT INTO employees
VALUES(214, 'Mark', 'Kim', 'MKIM', '234.3456.6789', TO_DATE('05-11-99', 'DD-MM-YY'), 'AC_ACCOUNT', 11000, NULL, 100, 10);
-- 이전 세기를 다루고자 하는 경우 RR형식을 사용합니다.
INSERT INTO employees
VALUES (215, 'Jason', 'Lee', 'JLEE', '513.723.4590', TO_DATE('05-11-99', 'DD-MM-RR'), 'AC_ACCOUNT', 11000, NULL, 100, 80);
SELECT *
FROM employees
where employee_id IN (114, 214, 215);
/*
EM_ID L_N HIRE_DATE
-----------------------------------------------------
114 Raphealy 99/02/03
214 Kim 99/11/05
215 Lee 99/11/05
*/
-- 트랜잭션을 적용하고 완료합니다.
-- 본인은 확인하기 어렵습니다.
-- 다른 창에서 확인하면 보이지 않던 70 번 데이터를 확인할 수 있습니다.
COMMIT;
-- 트랜잭션을 취소하고 종료합니다.
-- 세 개의 데이터를 삽입했던 다른 창에서 취소하고 종료합니다.
-- 본인도 작업했던 데이터를 확인할 수 없습니다.
-- 가장 최근의 COMMIT 상태로 데이터를 복구합니다.
ROLLBACK;
/*
SELECT employee_id, last_name, salary, commission_pct, job_id, department_id
FROM employees
WHERE 1=2;
-- 데이터가 없는 빈 테이블이 출력됩니다.
*/
-- 다른 테이블에서 행 복사
CREATE TABLE sales_reps(id, name, salary, comm, job_id, department_id)
AS
SELECT employee_id, last_name, salary, commission_pct, job_id, department_id
FROM employees
WHERE 1=2;
/*
Table SALES_REPS이(가) 생성되었습니다.
-- 다른 창에서 실행하는 경우, 따로 COMMIT하지 않았으나 삽입한 데이터를 확인할 수 있습니다.
-- 동일한 트랜잭션에서 DML 작성 중에 DDL 구문을 실행하는 경우 자동으로 COMMIT하는 기능이 있습니다.
-- 순서대로 커밋이 되기 때문에 이전에 실행한 DML 구문들도 모두 COMMIT됩니다.
*/
-- 두 번째 창에서 데이터 추가
-- INSERT 절의 열 수와 서브쿼리 열 수를 일치시킵니다.
-- SELECT 를 사용하여 서브쿼리를 INSERT 문에 사용하여 기존 테이블에서 파생되는 값을 포함하는 행을 추가할 수 있습니다.
SELECT employee_id, last_name, salary, commission_pct, job_id, department_id
FROM employees
WHERE job_id LIKE '%REP%';
/*
EM_ID LAST_NAME SALARY COM_PCT JOB_ID DP_ID
-----------------------------------------------------------------------------------------------
174 Abel 11000 0.3 SA_REP 80
176 Taylor 8600 0.2 SA_REP 80
178 Grant 7000 0.15 SA_REP ( null )
202 Fay 6000 ( null ) MK_REP 20
*/
'Oracle Database' 카테고리의 다른 글
Database_47_데이터 조작과 트랜잭션_DML 데이터 조작어 DELETE (0) | 2023.08.04 |
---|---|
Database_46_데이터 조작과 트랜잭션_DML 데이터 조작어 UPDATE (0) | 2023.08.04 |
Database_44_데이터 조작과 트랜잭션_작업 단위 (0) | 2023.08.03 |
Database_43_SUB QUERY_서브쿼리에서의 널(NULL) 값 (0) | 2023.08.02 |
Database_42_SUB QUERY_다중 행 연산자 IN, OUT, AN (0) | 2023.08.02 |