일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 로드밸런서 컨트롤러
- Kubernetes
- blue-green
- SAA 합격 후기
- livenessPorbe
- 딥레이서
- grafana on kubernetes
- helm
- 메탈LB
- LoadBalancer Controller
- headless service
- Aurora cluster
- jenkins
- github action 사용법
- 그라파나 대시보드
- Firelens
- 쿠버네티스 컴포넌트
- EFS CSI Driver
- EKS 클러스터
- 솔데스크
- terraform
- 깃허브 액션
- 딥레이서 보상함수
- 그라파나 시각화
- Prometheus install
- kubernetes 동작 원리
- 쿠버네티스
- Kubernets on Jenkins
- Solution Architecture
- AWS 딥레이서
mingming
Oracle - SQL (DML) 본문
DML (Data Manipualte Language)
DML문을 사용한 테이블 관리
INERT 구문
INSERT INTO table (column, ...) VALUES (value, ...)
새 행 삽입
문자와 날짜 값은 작은따옴표로 묶습니다.
INSERT INTO departments_new(department_id, department_name, manager_id, location_id)
VALUES(70, 'Public Relations', 100, 1700)
데이터 타입을 확인하는 방법
DESCRIBE departments_new;
SELECT * FROM USER_TAB_COLUMNS
WHERE TABLE_NAME = 'DEPARTMENTS_NEW';
NULL 값을 가진 행 삽입
암시적 방법 : 열 리스트에서 열을 생략합니다.
INSERT INTO departments(department_id, department_name)
VALUES(30, 'Purchasing');
명시적 방법 : VALUES 절에서 NULL 키워드를 지정합니다.
INSERT INTO departments
VALUES (100, 'Finance', NULL, NULL)
특수 값 삽입
CURRENT_DATE 함수는 세션 시간대의현재 날짜를 반환합니다.
INSERT INTO employees_new(employee_id, first_name, last_name, email, phone_number, hire_date, job_id
, salary, commission_pct, manager_id, department_id)
VALUES (113, 'Louis', 'Popp', 'LPOPP', '515.153.4567', CURRENT_DATE, 'AC_ACCOUNT',6900,NULL, 205,110);
특정 날짜 및 시간 값 삽입
INSERT INTO employees_new
VALUES(114, 'DEN', 'Raphealy', 'DRAPHEAL', '515.127.4561',
TO_DATE('2016-07-13','YYYY-MM-DD'), 'SA_REP', 11000, 0.2, 100, 60);
TO_DATE 함수는 Oracle 데이터베이스에서 사용되는 날짜 문자열을 실제 날짜 데이터로 변환하는 함수입니다. 주로 문자열 형식의 날짜 데이터를 Oracle 날짜 데이터 타입인 **DATE**로 변환할 때 사용됩니다.
- date_string: 날짜 정보를 포함하는 문자열입니다. 이 문자열은 특정 형식에 따라야 합니다.
- format: **date_string**의 형식을 지정하는 문자열입니다. 형식 문자열은 날짜 및 시간 요소의 구분, 형식 및 순서를 정의합니다.
다른 테이블에서 행 복사
- INSERT 문을 subquery로 작성합니다.
## SALES_REPS 테이블 생성
CREATE TABLE sales_reps
AS
SELECT * FROM employees
WHERE 1 = 0 ;
# employees 테이블에서 행 복사
INSERT INTO sales_reps(id, name, salary, commission_pct)
SELECT id, name, salary, commission_pct
FROM employees
WHERE job_id LIKE '%REP%'
- VALUES 절을 사용하지 않습니다.
- INSERT 절의 열 개수를 subquery의 열 개수와 일치시킵니다.
- subquery에서 반환되는 모든 행을 SALES_REPS 테이블에 삽입합니다.
테이블의 데이터 변경
UPDATE 문 구문
UPDATE table
SET comulmn = value
WHERE condition ;
테이블의 행 갱신
- WHERE 절을 지정하면 특정 행에서 값이 수정됩니다.
UPDATE employees_new
SET department_id = 50
WHERE emplpoyee_id = 113;
- WHERE 절을 생략하면 테이블의 모든 행에서 값이 수정됩니다.
UPDATE copy_emp
SET department = 110;
- SET column_name = NULL 을 지정하여 열 값을 NULL 로 갱신합니다.
UPDATE employees
SET job_id = 'IT_PROG', commission_pct = NULL
WHERE employee_id = 114;
Subquery를 사용하여 두 개의 열 갱신
사원 103의 직무와 급여를 사원 205와 일치하도록 갱신
UPDATE employees_new
SET (job_id, salary) = (SELECT job_id, salary
FROM employees
WHERE employee_id = 205)
WHERE employee_id = 103;
다른 테이블을 기반으로 행 갱신
UPDATE 문에서 Subquery를 사용하여 다른 테입르의 값을 기반으로 테이블의 행 값을 갱신합니다.
## employees_new 테이블의 department_id column 수정
UPDATE employees_new
## employees 테이블의 employee_id 값이 100인 행의 department_id 값으로 수정
SET department_id = (SELECT department_id
FROM employees
WHERE employee_id = 100)
## employee_id가 200 인 행 수정
WHERE job _id = (SELECT job_id
FROM employees
WHERE employee_id = 200);
DELETE 문
DLEETE FROM table
WHERE condition;
테이블에서 행 삭제
- WHERE 절을 지정하면 특정 행이 삭제됩니다.
DELETE FROM departments
WHERE department_name = 'Finance';
- WHERE 절을 생략하면 모든 행이 삭제됩니다.
DELETE FROM copy_emp;
다른 테이블을 기반으로 행 삭제
DELETE FROM employees_new
WHERE department_id IN (SELECT department_id
FROM departments
WHERE department_name LIKE '%Public%'
백업 및 복구 작업
- 데이터베이스의 내용을 수정할 때엔 반드시 백업과정을 거쳐야 합니다.
## 백업하기
CREATE TABLE employees_new_2023
AS
SELECT * FROM employees_new
WHERE department_id = 50;
## UPDATE 문으로 수정 후 커밋
UPDATE employees_new
SET department_id = 100
WHERE employee_id = 113;
COMMIT;
## 백업해둔 값으로 복구하기
UPDATE employees_new
SET department_id = (SELECT department_id
FROM employees_new
WHERE employee_id = 113)
WHERE employee_id = 113;
데이터베이스 트랜잭션
트랜잭션 시작과 종료
첫번쨰 DML 문이 실행될 때 시작됩니다.
다음 상황 중 하나가 발생하면 종료됩니다.
- COMMIT 또는 ROLLBACK 문 실행
- DDL 또는 DCL 문 실행(auto commit)
- 유저가 SQL Developer 또는 SQL*Plus 종료
- 시스템 중단
COMMIT 및 ROLLBACK 문의 이점
- 데이터 일관성 보장
- 변경 사항을 영구 적용하기 전에 데이터 변경 사항 검토
- 논리적으로 관련된 작업 그룹화
COMMIT 또는 ROLLBACK 이전의 데이터 상태
- 이전의 데이터 상태를 복구 할 수 있습니다.
- 현재 세션은 SELECT 문을 사용하여 DML 작업의 결과를 확인할 수 있습니다.
- 다른 세션은 현재 세션이 실행한 DML 문의 결과를 볼 수 없습니다.
- 영향을 받는 행이 잠기므로 다른 세션이 영향을 받는 행의 데이터를 변경할 수 있습니다.
'새싹 하이브리드 클라우드 > Database' 카테고리의 다른 글
Oracle - 제약 조건 & Subquery (0) | 2023.10.07 |
---|---|
Oracle - SQL (DDL) (3) | 2023.10.07 |
Oracle - SQL Query (2) (0) | 2023.10.06 |
데이터 베이스 언어 SQL (0) | 2023.10.06 |
Oracle - SQL Query (0) | 2023.10.05 |