Skip to content

SQL DML #
Find similar titles

DML (데이터 조작 언어 : Data Manipulation Language) #

DML은 데이터베이스 사용자 또는 응용 프로그램 소프트웨어가 컴퓨터 데이터베이스에 대해 데이터 검색, 등록, 삭제, 갱신을 위한, 데이터베이스 언어 또는 데이터베이스 언어 요소이다. 2007년 현재 가장 대중적 데이터 조작 언어는 SQL 데이터 조작 언어이다. SQL은 관계형 데이터베이스에 대해 검색 및 업데이트 등의 데이터 조작을 위해 사용된다. 다른 데이터 조작 언어로는 IMS / DL1 데이터 조작 언어와 CODASYL 데이터베이스(IDMS 등)의 데이터 조작 언어 등이 있다. 데이터 조작 언어는 초기에는 응용 프로그램 소프트웨어에 의해 사용되는 머물러 있었지만, (SQL의 출현에 따라) 데이터베이스 사용자에 따라 사용되어 갔다.

DML의 종류 #

SELECT #

SELECT 문은 하나 또는 그 이상의 테이블에서 데이터를 추출하는 SQL의 데이터 조작 언어(DML) 중 하나이다. 프로그래머는 어떤 결과를 갖고 싶은 것인지를 SQL 문장으로 기술할 필요는 있지만, 그 결과를 얻기 위해 어떤 물리적인 작업이 수행되는지를 지시하지 않아도, 데이터베이스 시스템(쿼리 최적화)이 SQL 문에서 최적의 쿼리 계획(실행 계획)을 작성한다.

덧붙여 "테이블 "은 "표 ", "행 "은 "레코드 ", "열"은 "항목 "이라고 부르기도 한다. 다음과 같은 선택 절을 가진다.

WHERE    : 어떤 열을 불러올 지를 지정
GROUP BY : 연산 함수가 각 그룹에 적용되도록 하기 위해 속성을 그룹 열에 공유하는 것
HAVING   : GROUP BY 절에서 정의된 그룹들 중에서 검색
ORDER BY : 반환하는 열의 정렬 순서를 지정

[예제] #

사번이 7900, 7934번인 사원의 사번과 성명 출력

SQL>
SELECT empno, ename
FROM   emp
WHERE  empno IN (7900, 7934);

INSERT #

INSERT 문은 테이블 또는 뷰에 한개 이상의 행을 추가한다.

INSERT INTO 테이블_또는_뷰_이름 (컬럼1, [컬럼2, ...]) 
VALUES (값1, [값2, ...]);

또는 모든 컬럼의 값을 등록할 경우 대상 컬럼 명을 생략할 수 있다.

INSERT INTO 테이블_또는_뷰_이름 
VALUES (값1, [값2, ...]);

[예제] #

모든 데이터를 입력할 경우

SQL> 
INSERT INTO emp
VALUES (7369, 'SMITH', 'CLERK', 7902, TO_DATE('1980/12/17','YYYY-MM-DD'),  800, NULL,  20);

원하는 데이터만 입력할 경우

SQL>
INSERT INTO dept (deptno, dname)
VALUES (10, 'ACCOUNTING');

SELECT 문장을 이용해 INSERT 할 경우

SQL>
INSERT INTO dept2
SELECT * FROM dept;

UPDATE #

UPDATE 문은 구조화 질의어 중 하나로, 테이블이나 뷰에서 한 개 이상의 행을 바꾼다. 모든 행을 변경해야 되는 경우도 조건절을 사용하여 하위 집합을 선택할 수 있다.

UPDATE table_name 
SET    column_name = value 
    [, column_name = value]
    [, ...]
[WHERE condition]

UPDATE가 성공적으로 이루어진 경우, 사용자는 반드시 데이터 조작 특권 동작 (UPDATE 특권동작)을 반드시 테이블이나 컬럼에서 수행해야 하고 업데이트된 값은 제약 조건에 충돌하지 않아야 한다. 예를 들면 고유키, 고유 인덱스, CHECK 제약조건, 그리고 NOT NULL 제약조건 등이 있다.

어떤 데이터베이스 시스템은 예로 PostgreSQL를 들자면, FROM 절이 존재하면 기본적으로 대상 테이블이 fromlist에 응답되는 테이블로 조인한다. 각각의 출력한 행의 조인은 대상 테이블의 업데이트를 의미한다. FROM을 쓸 때 생성된 최대 한 개의 각각의 출력 행이 조인되었는지 확인해야 한다. 다시 말해서, 대상 행은 다른 테이블에 한 개 이상의 행을 다른 테이블로부터 조인할 수 없다. 만약 그럴 경우 오직 하나의 행만 대상 테이블에 조인한다. 그런 후, 오직 하나의 조인된 행은 대상 행의 업데이트에 사용한다. 그러나 어떤 행을 썼는 지 예측하기는 어렵다.

이 불확정성의 원인은 다른 테이블을 좀 더 안전한 서브셀렉트 범위에서만 참조하고, 종종 읽기가 좀 더 어렵고 조인이 좀 더 느려지기 때문이다.

[예제] #

EMPLOYEE 테이블에서 KMLEE의 급여를 2,500,000원으로 변경

SQL>
UPDATE employee
SET    salary = 2500000
WHERE  ename  = 'KMLEE';

DELETE #

DELETE 문은 테이블 또는 뷰에서 한개 이상의 행을 삭제한다. 하위 집합은 삭제에 대한 조건을 정의할 수 있으며, 정의하지 않으면 모든 행이 삭제된다.

DELETE [FROM]table_name 
[WHERE conditions];

[예제] #

ORDERS 테이블의 전체 데이터를 삭제

SQL>
DELETE FROM orders;

GOODS 테이블에서 물품명이 ‘IM-300’인 레코드를 삭제

SQL>
DELETE FROM goods 
WHERE  gname = 'IM-300';

Incoming Links #

Related Articles #

0.0.1_20140628_0