Published: Jan 14, 2020 by Dev-hwon
DML(Data Manpulation Language, 데이터 조작어)
- 응용 프로그램, 데이터베이스 관리 시스템 간의 인터페이스를 위한 언어
- 데이터를 실질적으로 관리하는데 사용되는 언어
- 검색, 삽입, 삭제 갱신 연산 등
- 형태
- 절차적 데이터 조작어: 어떤 데이터를 필요로 하고 어떻게 구하는지 명시하는 언어
- 비절차적 데이터 조작어: 어떤 데이터를 필요로 하는지만 명시하는 언어
명령문 | 기능 |
---|---|
SELECT | 테이블에서 전체 또는 조건을 만족하는 튜플을 검색한다. |
JOIN | 2개의 테이블에 대해 연관된 튜플들을 결합한다. |
INSERT | 테이블에서 새로운 튜플을 삽입한다. |
DELETE | 테이블에서 튜플을 삭제한다. |
UPDATE | 테이블에서 튜플의 내용을 갱신한다. |
SELECT
- 테이블을 구성하는 튜플들 중에서 전체 또는 조건을 만족하는 튜플을 검색하여 주기억장치에 임시 테이블로 구성하는 명령문
SELECT문의 일반 형식
SELECT [PREDICATE] [테이블명.]속성명[ AS 별칭][, [테이블명.]속성명, ...]
FROM 테이블명[, 테이블명, ...]
[WHERE 조건]
[GROUP BY 속성명[, 속성명, ...]]
[HAVING 조건]
[ORDER BY 속성명 [ASC|DESC][, 속성명 [ASC|DESC], ...]];
- SELECT절
- PREDICATE : 검색할 튜플을 제한할 목적으로 사용되는 조건
- ALL : 모든 튜플들을 검색할 때 사용, default 값
- DISTINCT : 중복된 튜플을 제거할 때 사용
- DISTINCTROW : 중복된 튜플을 제거하지만, 선택된 속성의 값이 아닌 튜플의 전체 값을 대상으로 할 때 사용
- 속성명 : 검색하여 불러올 속성 또는 수식으로서, 2개 이상의 테이블을 대상으로 검색할 때는 ‘테이블명.속성명’으로 사용
- AS : 속성 및 연산의 이름을 다른 제목으로 표시하기 위해 사용
- PREDICATE : 검색할 튜플을 제한할 목적으로 사용되는 조건
- FROM절 : 검색할 데이터가 들어 있는 테이블명 기술
- WHERE절 : 검색할 조건을 기술, 각 연산자의 처리 순서는 연산자 우선순위를 따름
- GROUP BY절 : 특정 속성을 기준으로 그룹화하여 검색할 때 사용. 일반적으로 그룹 함수와 함께 사용
- HAVING절 : 그룹에 대한 조건을 기술
- ORDER BY절 : 특정 속성을 기준으로 정렬하여 검색할 때 사용
- 속성명 : 정렬의 기준이 되는 속성명 기술
- [ASC|DESC] : 정렬 방식을 기술
JOIN
- 2개의 테이블에 대해 연관된 튜플들을 결합하여, 하나의 새로운 릴레이션을 반환
- INNER JOIN, OUTER JOIN으로 구분
- 일반적으로 FROM절에 기술하지만, 릴레이션이 사용되는 어느 곳에서나 사용 가능하다.
INNER JOIN
일반적으로 EQUI JOIN과 NON-EQUI JOIN으로 구분
- EQUI JOIN
- 대상 테이블에서 공통 속성을 기준으로 ‘=’(equal) 비교에 의해 값은 값을 가지는 행을 연결
- JOIN 조건이 ‘=’일 때 동일한 속성이 두 번 나타나게 되는데, 이 중 중복된 속성을 제거하여 같은 속성을 한 번만 표기하는 방법을 NATURAL JOIN
- 연결 고리가 되는 공통 속성을 JOIN 속성
- WHERE절을 이용한 표기 형식
SELECT [테이블명1.]속성명, [테이블명2.]속성명, ... FROM 테이블명1, 테이블명2, ... WHERE 테이블명1.속성명 = 테이블명2.속성명;
- NATURAL JOIN을 이용한 표기 형식
SELECT [테이블명1.]속성명, [테이블명2.]속성명, ... FROM 테이블명1 NATURAL JOIN 테이블명2;
- JOIN ~ USING절을 이용한 표기 형식
SELECT [테이블명1.]속성명, [테이블명2.]속성명, ... FROM 테이블명1 JOIN 테이블명2 USING(속성명);
- NON-EQUI JOIN
- JOIN 조건에 ‘=’ 조건이 아닌 나머지 비교 연산자, 즉 >, <, <>, >=, <= 연산자를 사용하는 방법
- 표기 형식
SELECT [테이블명1.]속성명, [테이블명2.]속성명, ... FROM 테이블명1, 테이블명2, ... WHERE (NON-EQUI JOIN 조건);
OUTER JOIN
릴레이션에서 JOIN 조건에 만족하지 않는 튜플도 결과로 출력하기 위한 방법, LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN
- LEFT OUTER JOIN
- INNER JOIN의 결과를 구한 후, 우측 항 릴레이션의 어떤 튜플과도 맞지 않는 좌측 항의 릴레이션에 있는 튜플들에 NULL 값을 붙여서 INNER JOIN의 결과에 추가
- 표기 형식
SELECT [테이블명1.]속성명, [테이블명2.]속성명, ... FROM 테이블명1 LEFT OUTER JOIN 테이블명2 ON 테이블명1.속성명 = 테이블명2.속성명;
SELECT [테이블명1.]속성명, [테이블명2.]속성명, ... FROM 테이블명1, 테이블명2 WHERE 테이블명1.속성명 = 테이블명2.속성명(+);
- RIGHT OUTER JOIN
- INNER JOIN의 결과를 구한 후, 좌측 항 릴레이션의 어떤 튜플과도 맞지 않는 우측 항의 릴레이션에 있는 튜플들에 NULL 값을 붙여서 INNER JOIN의 결과에 추가
- 표기 형식
SELECT [테이블명1.]속성명, [테이블명2.]속성명, ... FROM 테이블명1 RIGHT OUTER JOIN 테이블명2 ON 테이블명1.속성명 = 테이블명2.속성명;
SELECT [테이블명1.]속성명, [테이블명2.]속성명, ... FROM 테이블명1, 테이블명2 WHERE 테이블명1.속성명(+) = 테이블명2.속성명;
- FULL OUTER JOIN
- LEFT와 RIGHT를 합쳐 놓은 것
- 표기 형식
SELECT [테이블명1.]속성명, [테이블명2.]속성명, ... FROM 테이블명1 FULL OUTER JOIN 테이블명2 ON 테이블명1.속성명 = 테이블명2.속성명;
SELF JOIN
- 같은 테이블에서 2개의 속성을 연결하여 EQUI JOIN을 하는 방법
- 표기 형식
SELECT [별칭1.]속성명, [별칭1.]속성명, ...
FROM 테이블명1 [AS] 별칭1 JOIN 테이블명1 [AS] 별칭2
ON 별칭1.속성명 = 별칭2.속성명;
SELECT [별칭1.]속성명, [별칭1.]속성명, ...
FROM 테이블명1 [AS] 별칭1, 테이블명1 [AS] 별칭2
WHERE 별칭1.속성명 = 별칭2.속성명;
INSERT문
- 테이블에 새로운 튜플을 삽입할 때 사용하는 명령문
- 표기 형식
INSERT INTO 테이블명[(속성명1, 속성명2, ...)]
VALUES (데이터1, 데이터2, ...);
- 대응하는 속성과 데이터는 개수와 데이터 타입이 일치해야 한다.
- 모든 속성을 삽입할 때는 속성명 생략 가능. 단, CREATE TABLE문에서 기술된 속성 순으로 속성 값들을 지정해야한다.
- SELECT문을 사용하여 다른 테이블의 검색 결과를 삽입할 수 있다.
DELETE문
- 테이블에 있는 튜플들 중에서 특정 튜플을 삭제할 때 사용
- 표기 형식
DELETE FROM 테이블명 WHERE 조건;
- 모든 튜플을 삭제할 때는 WHERE절을 생략
UPDATE문
- 테이블에 있는 튜플들 중에서 특정 튜플의 내용을 갱신할 때 사용
- 표기 형식
UPDATE 테이블명
SET 속성명=데이터[, 속성명=데이터, ...]
WHERE 조건;