본문 바로가기
Language/SQL

SQL DDL/DCL/DML 구조

by 박살낼겨 2022. 6. 9.

1. DDL(Data Define Language) : 데이터 정의어

     1) DDL 유형

         - CREATE : SCHEMA, DOMAIN, TABLE, VIEW, INDEX

         - ALTER : TABLE의 정의 수정 시

         - DROP : SCHEMA, DOMAIN, TABLE, VIEW, INDEX 삭제

 

     2) SCHEMA

         * SCHEMA : DB의 구조와 제약 조건에 대한 명세 개체(Entity), 속성(Attribute), 관계(Relationship)을 정의

CREATE SCHEMA 스키마명 
AUTHORIZATION 사용자ID
;

 

     3) DOMAIN

         * DOMAIN : 하나의 속성이 취할 수 있는 동일한 원자값의 집합

CREATE DOMAIN 도메인명 [AS] CHAR(1)
     [DEFAULT 기본값]
   [CONSTAINT 제약조건명 
        CHECK (범위값)]
;

     

      4) TABLE

CREATE TABLE 테이블명 
           (   
             컬럼명1 데이터_타입 [DEFAULT 기본값] [NOT NULL]
           , 컬럼명2 데이터_타입 [DEFAULT 기본값] [NOT NULL]
             ...
           , 컬럼명n 데이터_타입 [DEFAULT 기본값] [NOT NULL]
          [, PRIMARY KEY(컬럼명1)
           , FOREIGN KEY(컬럼명2) REFERENCES 다른테이블명(다른테이블의 컬럼명)
                                         -- 다른테이블의 튜플 삭제 시 해당 테이블 컬럼값 속성정의
                                         ON DELETE SET 옵션
                                         -- 다른테이블 수정 시 같이 변경 옵션
                                         ON UPDATE 옵션
           -- 제약 조건의 이름 지정
           , CONSTRAINT 제약명    
                  -- 해당 컬럼값의 조건 정의
                  CHECK (컬럼명n의 조건)]
             )
;

 

     5) VIEW

CREATE VIEW 뷰명
         [( 
            속성명1
          , 속성명2
          ...
          , 속성명n
            )]
         AS SELECT 속성명1
                 , 속성명2
              FROM 테이블1
             WHERE 조건
;

 

     6) INDEX

CREATE [UNIQUE] INDEX 인덱스명
                   ON 테이블명 ( 속성1 [ASC|DESC]
                              [, 속성2 [ASC|DESC]])
             [CLUSTER]
;

 

     7) ALTER

ALTER TABLE 테이블명 ADD 추가컬럼명 데이터타입 [DEFAULT '기본값']
;
ALTER TABLE 테이블명 ALTER 수정할컬럼명 [SET DEFAULT '기본값']
;
ALTER TABLE 테이블명 DROP COLUMN 삭제할컬럼명 [CASCADE]
;

 

     8) DROP

DROP SCHEMA | DOMAIN | TABLE | VIEW | INDEX 해당제거이름 [CASCADE | RESTRICT]
;

         - SCHEMA, DOMAIN, TABLE, VIEW, INDEX 등을 제거

 

 

2. DCL(Data Control Language) : 데이터 제어어

     1) COMMIT : 수행결과 디스크에 저장

     2) ROLLBACK : COMMIT 되지 않은 내용 취소, DB를 이전 상태로 되돌림

     3) GRANT : 사용 권한 부여

     4) REVOKE : 사용 권한 취소

     5) SAVEPOINT : 트랜잭션 내 ROLLBACK할 위치 지정

 

 

3. DML(Data Manipulation Language) : 데이터 조작어

     1) SELECT 

         * SELECT문을 읽어들이는 순서(★)

           FROM > WHERE > AND > GROUP BY > HAVING > SELECT > ORDER BY

           !(★) 위와 같은 순서 때문에 FROM절에 여러 테이블을 나열 할 시 ALIAS가 매우 중요하다.

                   또한, 테이블의 오너가 다를 경우 반드시 오너를 지정해 줘야한다.

                   예를 들어, 테이블1은 DB1에 존재하고 테이블2는 DB2에 존재할 때

                   FROM DB1.테이블1 AS A, DB2.테이블2 AS B 이런식으로 반드시 지정을 해야한다.

 

 

SELECT 컬럼1 [AS 별칭]
     , 컬럼2
     ...
     , 컬럼n
    [, 그룹함수(컬럼1) [AS 별칭]] 
    [, WINDOW함수 OVER (PARTITION BY 컬럼1
                                   , 컬럼2
                                   , 컬럼n
                            ORDER BY 컬럼1) [AS 별칭]
  FROM 테이블1
 WHERE 1=1
   [AND 테이블1에 대한 조건]
 [GROUP BY
[HAVING 그룹바이에 대한 조건]
 [ORDER BY 컬럼명1 [ASC | DESC]]
;

*자주 쓰이는 함수만 작성*

         # 그룹함수 

            - COUNT(컬럼명)

            - SUM(컬럼명)

            - AVG(컬럼명)

            - MAX(컬럼명)

            - MIN(컬럼명)

         # WINDOW함수 

            - ROW_NUMBER() : 각 레코드에 대한 일련번호 부여

            - RANK() : 공동 순위 반영

            - DENSE_RANK() : 공동 순위 무시 순서부여

 

     2) INSERT 

         * 속성명 몇개만 지정할 경우 VALUES에 지정한 몇개만의 값만 지정해도 된다.

INSERT INTO 테이블명
VALUES (데이터1
      , 데이터2
      , … 모든 컬럼에 넣어줄 데이터)
;

         * 속성명 지정 안할 경우 VALUES에 반드시 모든 컬럼의 값을 지정해야한다.

INSERT INTO 테이블명([속성명1
                    , 속성명2
                    , …]) 
VALUES (데이터1
      , 데이터2
      , … )
;

 

     3) UPDATE 

UPDATE 테이블명 
   SET 속성명=데이터
    [, 속성명=데이터
     , ...] 
[WHERE 조건]
;

 

     4) DELETE 

DELETE FROM 테이블명 
[WHERE 조건]
;