본문 바로가기
Database

[DataBase / SQL] - SQL이란

by nam_ji 2023. 12. 12.

SQL의 기본

SQL이란

  • SQL은 관계형 데이터베이스 관리 시스템 (RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어입니다.
  • 관계형 데이터베이스 관리 시스템에서 자료의 검색과 관리, 데이터베이스 스키마 생성과 수정, 데이터베이스 객체 접근 조정 관리를 위해 고안되었습니다.

SQL 실행 순서

1. SQL 쿼리 실행
2. Syntax Check 문법 체크
3. Semantic Check 객체(Object) 및 권한 유무 체크
4. Library Cache Check Cache에서 쿼리 저장 유무 검사 -> 저장되어 있다면 Soft Parse로,
Library Cache에 저장된 쿼리 바로 사용 -> 저장되어 있지 않으면 Hard Parse로
다음 단계로 넘어간다.
5. Optimization 최적화한 쿼리 실행 계획을 만드는 계획
6. Raw Source Generation 위 Optimization 단계에서 생성된 실행 계획을 실제 실행할 수 있게 Formatting
7. Execution 실행

SQL문 실행 순서 예제

  1. SELECT
  2. FROM
  3. WHERE
  4. GROUP BY
  5. HAVING
  6. ORDER BY

SQL 문법 종류

  • 데이터베이스 언어 SQL 문법의 종류는 다음 4가지로 구분됩니다.
    1. 데이터 정의 언어 (DDL : Data Definition Language)
    2. 데이터 조작 언어 (DML : Data Manipulation Language)
    3. 데이터 제어 언어 (DCL : Data Control Language)
    4. 트랜잭션 제어 언어 (TCL : Transaction Control Language)

데이터 정의 언어 (DDL : Data Definition Language)

  • DDL이란
    • 테이블과 컬럼을 정의하는 명령어로 생성, 수정, 삭제 등의 데이터 전체 골격을 결정하는 역할을 담당합니다.
  • DDL 특징
    • DDL은 명령어를 입력하는 순간 작업이 즉시 반영(Auto Commit)되기 때문에 사용할 때 주의해야 합니다.
  • DDL 종류
명령어 내용 기본문법
CREATE 테이블 생성하는 명령어 CREATE TABLE 테이블명 (컬럼명1 타입, 컬럼명2 타입...);
ALTER 테이블 구조를 수정하는 명령어 ALTER TABLE 테이블명 명령어 컬럼명 타입(값);
DROP 테이블 삭제하는 명령어 DROP TABLE 테이블명
TRUNCATE 테이블 초기화 하는 명령어 TRUNCATE TABLE 테이블명

 

  • CREATE 규칙
    • 객체를 의미하는 것이므로 단수형으로 이름을 짓는걸 권고합니다.
    • 유일한 이름으로 명명해야 합니다.
    • 테이블 내의 컬럼명 또한 중복되지 않는 유일한 이름으로 명명해야 합니다.
    • 정의할 때 각 컬럼은 ,으로 구분하며 테이블 생성문의 마지막은 ;입니다.
    • 컬럼명은 데이터 표준화 관점에서 일관성 있게 사용해야 합니다.
    • 컬럼 뒤에 데이터 유형을 반드시 지정해야 합니다.
    • 테이블과 컬럼명은 반드시 문자로 시작해야 합니다.
    • 대소문자 구분을 하지 않지만 기본적으로 대문자로 만들어집니다.
  • ALTER : 컬럼 변경 문법
명령어 내용
ADD COLUMN 컬럼을 추가하는 명령어
DROP COLUMN 컬럼을 삭제하는 명령어
MODIFY COLUMN 컬럼을 수정하는 명령어
RENAME COLUMN 컬럼 이름을 변경하는 명령어
DROP CONSTRAIN 컬럼을 제약조건을 기반해서 삭제하는 명령어

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

  • DML이란
    • 데이터베이스의 내부 데이터를 관리하기 위한 언어입니다. 데이터를 조회, 추가, 변경, 삭제 등의 작업을 수행하기 위해 사용됩니다.
  • DML 특징
    • DDL과 달리 DML은 적는 즉식 반영(Auto Commit)이 되지 않습니다.
      다시 말해, DML에 의한 데이터 변동은 영구적인 변경이 아니기 때문에 ROLLBACK을 다시 되돌릴 수 있습니다.
    • 또한, DML은 Target 테이블을 메모리 버퍼 위에 올려두고 변경을 수행하기 때문에, 실시간으로 테이블에 반영되지 않습니다. Commt 명령어를 통해 Transaction을 종료해야 해당 변경 사항이 테이블에 반영됩니다.
  • DML 종류
명령어 내용 기본문법
SELECT 테이블 데이터를 검색하는 명령어 SELECT 컬럼명1, 컬럼명2.... FROM 테이블명
INSERT 테이블 데이터를 추가하는 명령어 INSERT INTO 테이블명 (컬럼명1, 컬럼명2...) VALUES(컬럼에 맞게 값 입력)
UPDATE 테이블 데이터를 수정하는 명령어 UPDATE 테이블명 SET 컬럼명1=값, 컬럼명2=값 WHERE 조건식
DELETE 테이블 데이터를 삭제하는 명령어 DELETE FROM 테이블명 WHERE 조건식

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

  • DCL이란
    • 데이터를 관리 목적으로 보안, 무결성, 회복, 병행 제어 등을 정의하는데 사용합니다.
      DCL을 사용하면 데이터베이스에 접근하여 읽거나 쓰는 것을 제한할 수 있는 권한을 부여하거나 박탈할 수 있고 트랜잭션을 명시하거나 조작할 수 있습니다.
  • DCL 특징
    • 불법적인 사용자로부터 데이터를 보호하기 위한 데이터 보안의 역할을 수행하며, 데이터의 정확성을 위한 무결성을 유지하기도 합니다.
      마지막으로 시스템 장애에 대비한 회복과 병행수행을 제어합니다.
  • DCL 종류
명령어 내용
GRANT 권한을 정의할 때 사용하는 명령어
REVOKE 권한을 삭제할 때 사용하는 명령어

트랜잭션 제어 언어 (TCL : Transaction Control Language)

  • TCL이란
    • 데이터를 제어하는 언어가 아닌 트랜잭션을 제어할 때 사용합니다.
      논리적인 작업 단위를 묶어 DML에 의해 조작된 결과를 트랜잭션 별로 제업합니다.
  • 트랜잭션(Transaction)이란
    • 데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위를 말한다.
      보통 DBMS 성능을 초당 트랜잭션이 몇개가 실행되었는지로 측정합니다.
      * MySQL의 입력하는 모든 명령어들은 각각 하나의 트랜잭션이라고 할 수 있습니다.
  • 트랜잭션의 4가지 특징
    • 원자성 (Atomicity)
      • 원자성은 트랜잭션이 데이터베이스에 모두 반영되더가, 아니면 전혀 반영되지 않아야 한다는 것입니다.
        트랜잭션은 사람이 설계한 논리적인 작업 단위로서, 일처리는 트랜잭션의 작업이 부분적으로 실행되다가 중단되지 않고 작업단위 별로 이루어져야 사람이 다루느데 무리가 없습니다.
    • 일관성 (Consistency)
      • 일관성은 트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 한다는 것입니다.
        즉, 데이터 타입이 반환 후와 전이 항상 동일해야 합니다.
    • 독립성 (Isolation)
      • 독립성은 하나의 트랜잭션은 다른 트랜잭션에 끼어들 수 없고 마찬가지로 독립적임을 의미합니다.
        각각의 트랜잭션은 서로 간섭이 불가하기 때문에 하나의 특정 트랜잭션이 완료될 때까지, 다른 트랜잭션이 특정 트랜잭션의 결과를 참조할 수 없습니다.
    • 지속성 (Durability)
      • 지속성은 트랜잭션이 성공적을 완료되었을 경우, 결과는 영구적으로 반영되어야 한다는 의미입니다.
        보통 Commit이 완료되면 지속성은 자연스럽게 충족되는 특징입니다.
  • 트랜잭션 5가지 상태
    • Active : 트랜잭션이 현재 실행 중인 상태
    • Failed : 트랜잭션이 실행되다 오류 발생으로 중단된 상태
    • Aborted : 트랜잭션이 비정상 종료되어 Rollback이 수행된 상태
    • Partially Committed : 트랜잭션의 연산이 마지막까지 실행되고 Commi이 되기 직전 상태
    • Commited : 트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태
  • 트랜잭션의 Commit과 Rollback
    • Commit
      Commit은 모든 작업들을 정상 처리하겠다고 확정하는 명령어입니다. 해당 처리 과정을 DB에 영구 저장하겠다는 의미로 Commit을 수행하면 하나의 트랜잭션 과정이 종료됩니다. Commit을 하기 전에는 다른 사용자가 트랜잭션 내용을 확인할 수 없습니다.
      또한, 변경된 행은 잠금이 설정되어 있어서 다른 사용자가 변경할 수 없습니다.
    • Rollback
      Roll-Back은 작업 중 문제가 발생되어 트랜잭션의 처리 과정에서 발생한 변경사항을 취소하는 명령어입니다.
      해당 명령을 트랜잭션에게 하달하면 트랜잭션은 Commit 되기 전의 데이터로 돌아가 변경에 대하여 취소합니다.
      관련된 행에 대한 잠금이 풀리고 데이터 변경 사항이 복구되는 것입니다.
  • TCL 종류
명령어 내용
COMMIT 모든 작업을 정상적으로 처리하겠다는 명령어
ROLLBACK 모든 작업을 다시 돌려 놓겠다는 명령어
SAVEPOINT 트랜잭션을 작게 분할하는 명령어

 


TRUNCATE, DELETE

  • DELETE FROM TABLE
    • 데이터 전체를 삭제하는 것이 아니라 복구할 수 있게끔 삭제하기 때문에 메모리를 많이 차지하여 시스템 부하가 큽니다. 하지만 반대로 정상적인 복구 가능성이 높습니다.
  • TRUNCATE TABLE
    • 데이터 전체를 날려버리기 때문에 메모리를 많이 차지하지 않아서 시스템 부하가 적습니다.
      이 때문에 정상적인 데이터 복구가 불가능합니다.

DISTINCT와 GROUP BY

  • DISTINCT
    • DISTINCT 키워드를 사용하여 데이터 중복을 제거할 때는 DISTINCT 키워드만 명시하면 되므로 쿼리문이 간결합니다.
      하지만, TEMP TABLESPACE를 생성하여 임시로 저장하고 작업하는 방식이라 시스템 부하가 큽니다
  • GROUP BY
    • GROUP BY  절을 이용하면 간결하게 명시할 수 있으며 DISTINCT와 다르게 시스템 부하가 적습니다.