Skip to content

SQL DML #
Find similar titles

Structured data

Category
Database

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, '박지성', '사원', 7902, TO_DATE('1980/12/17','YYYY-MM-DD'),  800, NULL,  20);

원하는 데이터만 입력하는 경우(NOT NULL 조건이 없는 컬럼만 가능)

SQL>
INSERT INTO emp (empno, ename)
VALUES (7369, '박지성');

여러 행을 가지고 한 번에 데이터를 등록해야 하는 경우 SELECT(검색)를 통하여 INSERT(등록) 할 수 있다. 단, 등록하려는 테이블의 컬럼의 순서와 개수가 검색해오는 데이터와 같아야 한다.

SQL>
INSERT INTO emp2
SELECT * FROM emp;

UPDATE #

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

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

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

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

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

[예제] #

emp 테이블에서 손흥민의 급여를 2,500,000원으로 변경하는 경우

SQL>
UPDATE emp
SET    salary = 2500000
WHERE  ename  = '손흥민';

DELETE #

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

DELETE [FROM]table_name 
[WHERE conditions];

[예제] #

emp 테이블의 전체 데이터를 삭제하는 경우

SQL>
DELETE FROM emp;

emp 테이블에서 사원명이 ‘손흥민’인 데이터를 삭제하는 경우

SQL>
DELETE FROM emp 
WHERE  ename = '손흥민';

Incoming Links #

Related Articles #

0.0.1_20210630_7_v33