DML(Data Manupulation Language)

  • 테이블에 새로운 데이터를 입력하거나 기존 데이터를 수정 또는 삭제하기 위한 명령어
  • 종류: INSERT, UPDATE, DELETE, MERGE

INSERT

단일 행 입력

-- 컬럼명 생략
INSERT INTO student 
VALUES(1011, '홍길동', 'hong', 1, '8501011143098', '85/01/01', '041-630-3114', 170, 70, 101, 9903); 

-- 컬럼명 명시
-- 날짜형식을 '85/01/01' 이렇게 넣을 수 있음. 단 버전 별로 안될수도 있으니 TO_DATE('2006/01/01','YYYY/MM/DD') 이 방식도 알아야함!
INSERT INTO PROFESSOR(profno, name, position, hiredate, deptno)
VALUES(9920, '최윤식', '조교수', TO_DATE('2006/01/01','YYYY/MM/DD'), 102);

 

다중 행 입력

방법 1) SELECT 조건으로 넣어주기

INSERT INTO MMSUM30 (SUM_YYMM, ITEM_CODE, ITEM_GUBN, STCK_QTY, SawonID, RegiDate)
             (SELECT p_sum_yymm, ITEM_CODE, '0', STCK_QTY, SawonID, SYSDATE
              FROM  MMSUM30
              WHERE SUM_YYMM = TO_CHAR(ADD_MONTHS(TO_DATE(p_sum_yymm, 'YYYYMM'), -1), 'YYYYMM')
              AND   ITEM_GUBN = '1');

 

방법 2) INSERT ALL

: 서브쿼리의 결과 집합을 여러 테이블에 동시에 입력

-- ex1)
INSERT ALL
INTO   height_info VALUES(studno, name, height)
INTO   weight_info VALUES(studno, name, weight)
SELECT studno, name, height, weight
FROM   student
WHERE  grade >= 2;

-- ex2)
INSERT ALL 
WHEN   height > 170       THEN 
       INTO height_info VALUES(studno, name, height)
WHEN   weight >70         THEN
       INTO weight_info VALUES(studno, name, weight) 
SELECT studno, name, height, weight
FROM   student
WHERE  grade >= 2;

 

방법 3) INSERT FIRST

조건을 지정하여 조건에 만족하는 첫번째 테이블에 값을 우선적으로 입력하기 위한 명령문

서브쿼리의 결과 집합중에서 조건을 만족하는 첫 번째 WHEN절에서 지정한 테이블에만 입력하고 나머지 WHEN절 무시

INSERT FIRST
WHEN   height > 170    THEN
       INTO height_info VALUES(studno, name, height)
WHEN   weight > 70     THEN
       INTO weight_info VALUES(studno, name, weight)
SELECT studno, name, height, weight
FROM   student
WHERE  grade >= 2; 

 

 

PIVOTING INSERT

- OLTP(OnLine Transaction Processing) 업무에서 사용되는 데이터를 데이터웨어하우스 업무에서 사용되는 분석용 데이터로 변환하는 경우에 유용

- PIVOTING INSERT 명령문을 사용하여 SALES 테이블의 요일별 데이터를 통합하여 SALES_DATA 테이블에 하나의 행으로 입력

-- 알아두자. => 데이터를 다양하게 조작할 수 있는 테이블!
INSERT ALL
INTO   sales_data VALUES(sales_no, week_no, '1', sales_mon)
INTO   sales_data VALUES(sales_no, week_no, '2', sales_tue)
INTO   sales_data VALUES(sales_no, week_no, '3', sales_wed)
INTO   sales_data VALUES(sales_no, week_no, '4', sales_thu)
INTO   sales_data VALUES(sales_no, week_no, '5', sales_fri)
SELECT sales_no, week_no, sales_mon, sales_tue, sales_wed, sales_thu, sales_fri
FROM   sales;

 

UPDATE

WHERE로 조건을 꼭! 줘야함.

-- ex1)
UPDATE professor
SET    position = '부교수',
       sal = 390
WHERE  profno = 9903;

-- ex2)
UPDATE student
SET(grade, deptno) = (SELECT grade, deptno 
                      FROM   student
                      WHERE  studno = 10103)
WHERE studno = 10201;          

 

DELETE

-- ex1)
DELETE student
WHERE  studno = 20103;

-- ex2)
DELETE student
WHERE  deptno = (SELECT deptno 
                 FROM   department
                 WHERE  dname = '컴퓨터공학과');

 

 

Merge

구조가 같은 두개의 테이블을 비교하여 하나의 테이블로 합치기 위한 데이터 조작어

CREATE TABLE professor_temp AS
SELECT *
FROM   professor
WHERE  position = '교수';

UPDATE PROFESSOR_TEMP
SET    position = '명예교수'
WHERE  position = '교수';

INSERT INTO PROFESSOR_TEMP
VALUES(9999, '김도경', 'arom21', '전임강사', 200, SYSDATE, 10, 101);

MERGE INTO professor p
USING professor_temp f
ON(p.profno = f.profno)
WHEN matched THEN
     UPDATE set p.position = f.position
WHEN not matched THEN
     INSERT VALUES(f.profno, f.name, f.userid, f.position, f.sal, f.hiredate, f.comm, f.deptno);

 

데이터베이스(Database)

  • 공유하는 관련 데이터 모임. 서로 관련있는 데이터들을 하나로 통합하여 데이터베이스 구축

데이터베이스 관리 시스템(DBMS: Database Management System)

  • 사용자 또는 응용 시스템과 데이터베이스간의 인터페이스 역할을 담당하는 시스템 소프트웨어
  • 주요 기능
    - 데이터 정의 기능: 데이터베이스에 스키마 정의
    - 데이터 조작 기능
    - 데이터 제어 기능: 데이터의 정확성와 안정성을 유지하기 위한 기능, 데이터의 정확성 유지를 위한 트랜젝션 관리나 접근 권한 관리 기능
  • 장점
    - 데이터 중복의 최소화
    - 데이터 공유
    - 데이터 일관성 유지
    - 데이터 무결성 유지
    - 데이터 보안 보장
    - 전체 데이터에 대한 요구 조정

데이터베이스의 개념적 구조

ANSI/SPARC 3단계 데이터베이스 구조  (3-Layer Database Archetecture) 

- ANSI(American National Standards institute)에서 Database를 개념적으로 이해하기 위해 Database를 보는 관점(View)을 세 단계로 분리하여 복잡한 구조를 단순화하여 표현함.

- 주요 목적: Database에 대한 사용자의 뷰와 Database가 실제로 표현되는 방식을 분리하기 위함

 

  • 외부 단계 (External Level) 
    - 외부 스키마로 구성: Sub Schema라고도 하며, View의 개념. 개념 스키마 중 사용자에게 필요한 부분 스키마
    - 각 사용자가 다른 뷰를 가지는 이유는 최종 사용자와 응용 프로그래머들은 데이터베이스의 일부분만 필요하기 때문
  • 개념 단계 (Conceptual Level)
    - 전체 데이터베이스의 논리적인 구조를 기술
    - 개념 스키마로 구성: 전체 데이터베이스의 정의를 말하는 것으로 통합 조직별로 하나만 존재. 저장 장치에 독립적으로 기술되며, 데이터와의 관계(relationship), 제약사항, 무결성에 대한 내용이 포함.
  • 내부 단계 (Internal Level)
    - 내부 스키마로 구성: 실제 물리적인 데이터구조에 관한 스키마. DB에 어떤 데이터가 어떻게 저장되어 있는가 기술

3-Layer Database Archetecture

 

데이터 독립성(Data Independence)3-Layer Database Archetecture의 특징

하위 단계의 내용을 추상화하여 상위 단계에 그 세부 사항을 숨김으로써 한 단계 내의 변경에 대해서 다른 단계와 상호 간섭이 없도록 하는 것

- 논리적 데이터 독립성(logical data independence) : 외부 단계와 개념 단계 사이의 독립성

- 물리적 데이터 독립성(physical data independence): 개념 단계와 내부 단계 사이의 독립성

 

DDL / DML / DCL (SQL 언어의 분류)

  • DDL (Data Definition Language)
    - DBMS에 저장된 테이블 구조 정의(스키마 정의). 쿼리가 입력되면 DBMS가 스키마에 대한 명세를 시스템 카탈로그에 저장
    - CREATE, ALTER, DROP, RENAME
  • DML (Data Manipulation Language)
    - 데이터베이스의 원하는 데이터 수정, 삽입, 삭제하는 언어
    SELECT, INSERT, UPDATE, DELETE
  • DCL (Data Control Language)
    - 데이터베이스의 규정이나 기법을 정의하고 제어하는 언어
    - 권한 부여/취소, 보안, 병행수행 제어
    - GRANT, REVOKE
  • TCL (Transaction Control Language)
    - 논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 작업 단위(트랜젝션) 별로 제어하는 언어
    - COMMIT, ROLLBACK, SAVEPOINT

 

관계형 데이터 모델(Relational data model)

  • 테이블 형식을 이용하여 데이터를 정의하고 설명한 모델
  • 용어 정리 - 개념/논리 데이터 모델에서 사용
    - 속성 (Attribute) - 물리 데이터 모델 Column
      : 각 열의 이름 
    - 도메인 (Domain)
      : 입력 가능한 값들의 범위
    - 차수 (Degree)
      : 속성의 수
    - 튜플 (Tuple) - 물리 데이터 모델 Row
      : 하나의 row
    - 카디널리티 (Cardinality)
      : 튜플의 수
    - 릴레이션 (Relation)
      : 2차원 테이블 구조, 튜플(tuple)과 속성(attribute)의 집합으로 구성
    - 키 (Key)
      : 튜플을 유일하게 식별할 수 있는 속성이나 속성의 집합
    - 후보키 (Candinate key)
      : 튜플을 구분할 수 있는 최소한의 속성만으로 구성된 키
    - 기본키 (Primary key)

 

SQL(Structed Query Language)

  • 관계형 데이터 모델로 표현되는 데이터베이스를 다루는 언어

 

 

 

 

 

Ref.

오라클 중심의 sql 배움터 

https://m.blog.naver.com/PostView.nhn?blogId=kookh1&logNo=120184864273&proxyReferer=https%3A%2F%2Fwww.google.com%2F

+ Recent posts