Programming/SQL

[SQL] SQL의 개념과 종류

bu119 2023. 8. 5. 09:00
728x90
반응형

SQL의 개념

Structured Query Language의 약자로서, 구조화된 질의 언어이다.

관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수한 목적의 프로그래밍 언어

 

관계형 데이터베이스 관리 시스템(RDBMS)을 사용할 때 해당 시스템의 데이터를 정의하고, 조작하고, 제어할 목적으로 만들어진 프로그래밍 언어이다.

 

SQL 문법은 는 크게 DDL, DML, DCL 세 가지 종류로 구분될 수 있다.

 

  1. 데이터 정의어 (DDL, Data Definition Language)
    • 대상 : 데이터베이스 객체 (테이블, 뷰, 시퀀스 제약조건 등)
    • 데이터 정의 언어로 풀어 말할 수 있으며 스키마를 정의하거나 조작하기 위해 사용한다.
  2. 데이터 조작어 (DML, Data Manipulation Language)
    • 대상 : 데이터
    • 데이터 조작 언어로 풀어 말할 수 있으며 데이터를 조작(조회, 추가, 변경, 삭제) 하기 위해서 사용한다.
    • 사용자가 응용 프로그램과 데이터 베이스 사이에 실질적인 데이터 처리를 위해서 주로 사용된다.
  3. 데이터 제어어 (DCL, Data Control Language)
    • 대상 : 데이터베이스 권한, 시스템 권한 (예. DB 서버에 관한 권한), 객체 권한 (예. 테이블 생성, 변경 etc), 롤
    • 데이터 제어 언어로 풀어 말할 수 있으며 말 그대로 데이터를 제어하는 언어이다.
    • 데이터의 보안, 무결성, 회복, 병행 수행제어 등을 정의하는 데 사용한다.

 

SQL의 특징

1. RDBMS의 표준이다.

표준 SQL 문법이 존재해 DBMS 종류(Oracle, MSSQL, MySQL 등)에 얽매이지 않고 사용할 수 있다. SQL은 RDBMS를 사용할 때 만들어진 프로그래밍 언어이기 때문에 ORACLE, MYSQL로 대표되는 RDBMS에서는 모두 사용이 가능하다.

 

단, 오해하면 안 될 것은 이 내용은 표준화된 SQL을 한정하여 이야기하는 것이며, 각 RDBMS에서 사용되고 있는 독자적인 문법 또는 함수, 명령어 등은 차이점이 있다.

 

예를 들면, 현재시간을 표현할 때 오라클에서는 SYSDATE를 사용하지만, MYSQL은 NOW() (또는 SYSDATE()) 형태로 사용되곤 합니다.

 

2. 다른 언어와 달리 쉽게 배울 수 있다.

SQL은 기본적은 데이터를 정의, 조작, 제어에 방점이 찍혀 있는 언어이다. 그렇기 때문에 프로그램을 만들기 위해 탄생한 다른 언어(C, JAVA, 등)보다는 학습 난이도는 쉬운 편이다. 특히, 테이블 생성 및 삭제, 데이터 조회, 데이터 추가, 데이터 삭제, 데이터 수정 이 정도만 할 수 있어도 최소한의 데이터를 제어함에 있어서 큰 문제는 없다. 다른 문법적인 요소는 이러한 최소한의 데이터를 제어함에 있어 보다 쉽고, 빠르고, 복잡한 이슈를 처리하기 위해 추가된 내용 정도로 이해해도 충분하다.

 

3. 데이터 접근의 유일한 창구이다.

SQL은 데이터를 접근하고자 만들어진 언어이다. 따라서, 모든 RDBMS는 SQL을 통해서만 데이터를 추가할 수 있고, 삭제할 수 있고, 조회할 수 있다.

 

4. 대소문자를 구분하지 않는다.

다만, 가독성을 위해서 주로 대문자를 사용하기도 하며, 간혹 서버 환경이나 데이터베이스 시스템에 따라 대소문자를 구분하기도 한다.

 

SQL문법의 종류

1. 데이터 정의어 (DDL, Data Definition Language)

데이터베이스 구조 정의에 사용하는 언어이다.

 

사용자가 구현하고자 하는 데이터베이스를 만들거나, 수정하거나, 삭제하거나, 데이터를 초기화한다.

데이터베이스의 전체 골격을 구성하는 역할을 한다.

 

  • CREATE : 데이터베이스 객체를 생성 (새로운 테이블 생성)
    • 대표적인 예로, 실질적으로 데이터를 넣을 수 있는 테이블을 만들 수 있고, VIEW, 인덱스, 프로시저와 같이 테이블 외의 요소들을 생성할 때 사용된다.

 

  • ALTER : 데이터베이스 객체를 수정 (기존 테이블 구조 변경)
    • 예를 들면, 이미 만들어진 테이블의 칼럼 추가한다던가, VIEW 내용을 수정하거나, 기존 인덱스 내용을 변경하는 등의 작업을 할 때 사용한다.

 

  • DROP : 데이터베이스 객체를 삭제 (기존 테이블 삭제)
    • 예를 들면, 이미 만들어진 테이블을 없앤다던가, 기존에 사용하고 있던 VIEW를 더 이상 사용할 필요가 없어 삭제한다던가, 속도 개선을 위해 새롭게 인덱스를 만들었는데 오히려 속도가 느려져서 새롭게 만든 인덱스를 지운다던가 특정 요소를 제거할 목적일 때 DROP을 이용한다.

 

  • TRUNCATE : 테이블에서 데이터를 삭제 후 생성 (기존 테이블 초기화)
    • 해당 명령어는 DELETE와 비슷해 보이지만 차이점으로는 DELETE는 일부 데이터만 제거할 수 있지만 TRUNCATE는 해당 테이블의 모든 데이터를 제거한다.
    • 또한, DELETE의 경우 삭제 후 복구할 수 있는 방법이 있지만 TRUNCATE는 복구할 수 없다.

 

  • RENAME : 기존 테이블 이름 변경

 

SCHEMA, DOMAIN, TABLE, VIEW, INDEX를 정의하거나 변경 또는 삭제할 때 사용한다.

Oracle 11g 이전 버전과 MySQL은 DDL에 대해서 트랜잭션을 지원하지 않는다.

 

2. 데이터 조작어 (DML, Data Manipulation Language)

테이블의 데이터를 조작할 때 사용되는 언어이다.

 

테이블의 데이터를 조회(SELECT), 추가(INSERT), 수정(UPDATE), 삭제(DELETE)한다.

데이터베이스 내부에 실제로 저장된 데이터를 다루는 역할을 한다.

 

  • SELECT : 테이블에 저장된 데이터를 조회
  • INSERT : 테이블에 새로운 데이터를 추가
  • UPDATE : 테이블에 저장된 데이터를 수정
  • DELETE : 테이블에 저장된 데이터를 삭제

 

기본적인 위의 명령어 외에 LOCK, EXPLAIN, CALL 등도 DML에 포함된다.

데이터베이스 사용자가 응용 프로그램이나 쿼리문을 통해 저장된 데이터를 실질적으로 처리하는 데 사용하는 명령어다.

 

Select문은 데이터를 조작하지 않으므로 DQL (Database Query Language)로 분류하기도 한다.

Merge란 일반 DML과 달리, 소스 테이블과 목적 테이블이 있고 두 개의 테이블을 비교 후 동일하게 만들기 위해 insert, update, delete를 실행하는 기능이다.

 

3. 데이터 질의어 (DQL, Data Query Language)

일부에서는 DML에서 SELECT 만을 따로 분리해서 DQL (Data Query Language) 나 간단히 쿼리로 표현하기도 한다.

하지만, 대부분 DML에 포함시킨다.

 

  • SELECT : 테이블에 저장된 데이터를 조회

 

4. 데이터 제어어 (DCL, Data Control Language)

데이터베이스에 대한 접근 권한 제어에 사용하는 언어이다.

 

각종 권한을 부여, 회수한다.

권한 관리를 통해 시스템 보안을 유지하는 역할을 한다.

 

  • GRANT : 사용자에게 권한을 부여
  • REVOKE : 사용자로부터 권한을 취소(회수)
  • COMMIT : 트랜잭션의 작업 결과를 반영
  • ROLLBACK : 트랜잭션의 작업을 취소 및 원래대로 복구

 

5. 트랜잭션 제어어 (TCL, Transaction Control Language)

일부 위의 DCL에서 트랜잭션을 제어하는 명령인 COMMIT과 ROLLBACK 만을 따로 분리해서 TCL (Transaction Control Language)라고 표현하기도 한다.

즉, DCL에서 트랜잭션을 컨트롤하는 명령어를 TCL로 분류한다. 

하나의 트랜잭션을 가지고 이것을 DB에 반영(reflect)시킬지, 취소(cancel)할지, 트랜잭션이 반영된 것을 롤백(rollback)시킬지를 다루는 것이다.

 

트랜잭션은 데이터베이스에서 논리적인 작업 단위를 구성하는 세부적인 연산들의 집합을 의미한다. 

 

  • COMMIT :  올바르게 완료한 작업으로 변경된 데이터를 데이터베이스에 영구 저장
    • DML에 문제가 없을 시 데이터베이스에 데이터가 영구적으로 반영된다.
    • 트랜잭션 처리가 정상적으로 종료되어 트랜잭션이 수행한 변경 내용을 데이터베이스에 반영하는 연산이다.
    • 내용을 변경한 트랜잭션이 완료되면 그 트랜잭션에 의해 데이터베이스는 새롭게 일관된 상태로 변경되며, 이 상태는 시스템 오류가 발생하더라도 취소되지 않습니다.

 

  • ROLLBACK :  작업 시작 이전의 상태로 되돌림
    • 트랜잭션 중 문제 발생 시 트랜잭션 시작 전 상태로 돌린다.
    • 하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성이 깨졌을 때, 트랜잭션이 행한 모든 변경 작업을 취소하고 이전 상태로 되돌리는 연산이다.
    • ROLLBACK 연산 시 해당 트랜잭션은 받았던 자원과 잠금(LOCK)을 모두 반환하고, 재시작(Restart)되든지 폐기된다.

 

  • SAVEPOINT : 특정 위치까지를 영구 저장 혹은 이전 상태로 돌리기 위해 저장지점을 만듦
    • 트랜잭션 중간으로 되돌릴 수 있도록 중간 지점을 설정한다.
    • 이후 ROLLBACK과 함께 사용하여 특정 지점까지 ROLLBACK 가능하다.
    • 현재의 트랜잭션을 작게 분할하는 명령어이다.
    • 저장된 SAVEPOINT는 ROLLBACK TO SAVEPOINT문을 사용하여 지정한 곳까지 ROLLBACK 할 수 있다.
    • 여러 개의 SQL문을 수반하는 트랜잭션의 경우, 사용자가 트랜잭션 중간 단계에서 SAVEPOINT를 지정할 수 있다.
    • ROLLBACK과 함께 사용하며, 현재 트랜잭션 내의 특정 SAVEPOINT까지 ROLLBACK 할 수 있다.

 

데이터의 일관성을 유지하면서 안정적으로 데이터를 복구시키기 위해서 사용한다.

Transaction은 여러 개의 DML(데이터조작어) 명령문들을 하나의 작업단위로 묶어놓은 집합이다.

실수 없이 완벽하게 입력한 명령어만 영구 저장하기 위해 TCL을 사용한다.

 


 

참고 자료

https://statkwon.netlify.app/2020/06/16/sql-join/

https://rh-cp.tistory.com/41

https://velog.io/@ysong0504/%EC%98%A4%EB%9D%BC%ED%81%B4-DB-SQL-%EB%AC%B8

https://icedhotchoco.tistory.com/entry/SQL-DDL-DML-DCL-TCL

https://kaaangbboonge.tistory.com/11

https://doishalf.tistory.com/9

728x90
반응형