SQL(Structured Query Language)

Database | (Update : 2018-02-23)

Language : KO

SQL(Structured Query Language)

관계형 데이터베이스에서 데이터 정의, 데이터 조작, 데이터 제어를 하기 위해 사용하는 언어.

DDL(Data Definition Language)

데이터 정의어.

데이터베이스의 구조를 정의한다.

테이블을 생성, 수정, 제거한다.

    CREATE

    테이블 생성

    CREATE TABLE 테이블명 (
        컬럼명1 데이터타입(사이즈),
        컬럼명2 데이터타입(사이즈),
        ...
        [DEFAULT 기본값]
        [무결성 제약 조건]
    );
    • 기존 테이블의 내용을 복사하여 새로운 테이블 생성
    CREATE TABLE 테이블명
     AS
        SELECT * FROM 복사할테이블명
    • 기존 테이블의 구조를 복사하여 새로운 테이블 생성

         WHERE절에 '0 = 1'과 같이 항상 거짓이 되는 조건식을 사용하면 테이블의 구조만 복사된다.

         무결성 제약 조건은 NOT NULL만 복사되고, 

         기본키, 외래키, DEFAULT값과 같은 제약 조건은 복사되지 않는 다.

    CREATE TABLE 테이블명
     AS
        SELECT * FROM 복사할테이블명
        WHERE 0 = 1;

      DROP

      테이블 삭제

      기본키를 다른 테이블에서 참조하고 있으면 삭제할 수 없다.

      DROP TABLE 테이블명;

      다른 테이블에서 참조하고 있을 경우 CASCADE CONSTRAINTS를 사용하면 삭제할 수 있다.

      DROP TABLE 테이블명 CASCADE CONSTRAINTS;

        ALTER

        테이블 컬럼 수정

        • 컬럼 추가
        ALTER TABLE 테이블명
            ADD 컬럼명 데이터타입(사이즈);
        ALTER TABLE 테이블명
            ADD(컬럼명 데이터타입);
        • 컬럼 변경

             데이터가 존재할 경우 크기를 줄일 수 없다.

             NULL값만 있거나 데이터가 존재하지 않아야 크기를 줄일 수 있다.

             데이터가 존재할 경우 타입은 CHAR와 VARCHAR2만 변경할 수 있다.

             변경된 DEFAULT값은 변경한 시점부터 적용된다.

        ALTER TABLE 테이블명
            MODIFY 컬럼명 데이터타입(사이즈);
        • 컬럼 삭제
        ALTER TABLE 테이블명
            DROP COLUMN 컬럼명;

              TRUNCATE

              테이블 내의 모든 데이터 삭제

              TRUNCATE TABLE 테이블명;

                RENAME

                테이블명 변경

                RENAME 기존테이블명 TO 새테이블명

                DML (Data Manipulation Language)

                데이터 조작어.

                데이터를 입력, 수정, 삭제한다.

                  SELECT

                  데이터 조회

                  • 부분 조회
                  SELECT 컬럼1
                      , 컬럼2
                   FROM 테이블명
                   WHERE 조건식;
                  • 전체 조회
                  SELECT * FROM 테이블명;
                  • 중복 제외 조회
                    SELECT DISTINCT 칼럼명
                     FROM 테이블명;

                    INSERT

                    데이터 입력

                    기술한 컬럼의 수, 순서와 값의 수, 순서가 일치해야 한다.

                    컬럼의 데이터 타입이 문자, 날짜일 경우 반드시 작은 따옴표(' ')를 사용한다.

                    INSERT INTO 테이블명 (컬럼1, 컬럼2, ...)
                     VALUES (값1, 값2, ...);

                    INTO절에 컬럼을 명시하지 않으면, 테이블을 생성했을 때 정의한 컬럼 순서와 동일한 순서로 입력된다.

                    INSERT INTO 테이블명
                     VALUES (값1, 값2, ...);

                      UPDATE

                      데이터 수정

                      UPDATE 테이블명
                       SET 컬럼1 = 값1,
                          컬럼2 = 값2
                       WHERE 조건식;

                        DELETE

                        데이터 삭제

                        DELETE FROM 테이블명
                         WHERE 조건식;

                        DCL (Data Control Language)

                        데이터 제어어.

                        사용자의 권한을 제어한다.

                          GRANT

                          권한 생성

                          GRANT 권한1, 권한2 TO 사용자

                            REVOKE

                            권한 삭제

                            REVOKE 권한1, 권한2 FROM 사용자

                            TCL (Transaction Control Language)

                            트랜잭션 제어어.

                            트랜잭션 : 데이터베이스 처리 작업을 모두 완료하거나, 모두 취소하도록 하는 작업 단위.

                                COMMIT

                                모든 작업(DML)이 정상적으로 처리 된 후 데이터베이스에 반영하는 명령어.

                                하나의 트랜잭션을 종료하며, 변경된 내용을 영구 저장한다.

                                DDL과 DCL은 자동으로 COMMIT된다.

                                COMMIT;

                                  ROLLBACK

                                  작업 중 문제가 생겼을 때, 트랜잭션을 처리하는 과정에서 발생한 변경사항을 취소하고 종료하는 명령어.

                                  최종 COMMIT 이후의 작업들을 전부 취소한다.

                                  ROLLBACK;

                                  민갤

                                  Back-End Developer

                                  백엔드 개발자입니다.