DML(SELECT/JOIN/INSERT...)

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 : 속성 및 연산의 이름을 다른 제목으로 표시하기 위해 사용
  • 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 조건;
DML Data Manpulation Language 데이터 조작어 SELECT JOIN INSERT DELETE UPDATE