SQL Language

SQL 언어 - 데이터베이스에서 데이터를 정의하고, 조작하기 위해 사용하는 언어

Posted by Seohyun Park, Aileen on November 14, 2023 · 3 mins read
DATABASE

SQL Language

SQL(Structured Query Language)은 데이터베이스에서 데이터를 정의하고, 조작하기 위해 사용하는 언어이다.

SQL은 데이터베이스의 종류에 상관없이 사용할 수 있다.


SQL 과 일반 프로그래밍 언어의 차이점

SQL은 자바나, C와 같은 일반 프로그래밍 언어는 아니다.

대신, 데이터 부속어 (Data Sublanguage) 라고 불린다.

그 이유는, 데이터베이스의 데이터와 메타 데이터를 정의하고, 조작하기 위해 사용하는 언어이기 때문이다.

SQL은 DBMS에 직접 입력하여 사용할 수도 있고, 프로그래밍 언어에 SQL 문을 포함시켜 사용할 수도 있다.

반면에, 일반 프로그래밍 언어는 JVM이나, 컴파일러를 통해서만 실행할 수 있다.

SQL은 입출력의 형태가 “테이블”로 정해져있다.

반면에, 일반 프로그래밍 언어는 입출력의 형태가 모든 형태가 될 수 있다.


SQL 문의 종류

SQL 문은 크게 3가지로 나눌 수 있다.

  • DDL(Data Definition Language)

  • DML(Data Manipulation Language)

  • DCL(Data Control Language)

1. DDL(Data Definition Language)

DDL은 데이터베이스의 스키마를 정의하거나, 조작하기 위해 사용하는 언어이다. 테이블이나 관계의 구조를 생성하는데 사용된다.

DDL은 다음과 같은 명령어로 구성되어 있다.

  • CREATE

  • ALTER

  • DROP

  • TRUNCATE

  • RENAME

  • COMMENT

2. DML(Data Manipulation Language)

DML은 데이터를 조작하기 위해 사용하는 언어이다. 테이블에 데이터를 삽입하거나, 수정, 삭제하는데 사용된다.

DML은 다음과 같은 명령어로 구성되어 있다.

  • SELECT ( Query, 질의어 )

  • INSERT

  • UPDATE

  • DELETE

3. DCL(Data Control Language)

DCL은 데이터베이스의 권한을 관리하기 위해 사용하는 언어이다. 데이터베이스 사용자에게 권한을 부여하거나, 빼앗을 때 사용된다.

DCL은 다음과 같은 명령어로 구성되어 있다.

  • GRANT

  • REVOKE

  • COMMIT

  • ROLLBACK


개발자가 작성한 SQL 문의 처리 과정

작성

개발자는 데이터베이스에 요청할 작업을 정의하는 SQL 문을 작성합니다. 이는 데이터를 조회(SELECT), 삽입(INSERT), 수정(UPDATE), 삭제(DELETE)하는 명령을 포함할 수 있습니다.

전송

작성된 SQL 문은 데이터베이스 서버로 전송됩니다. 이는 직접적인 SQL 쿼리, 어플리케이션 코드 내의 API 호출, 또는 ORM을 통해 이루어질 수 있습니다.

파싱

쿼리 문장을 토큰 (MySQL 이 인식할 수 있는 최소의 단위의 어휘나 기호) 으로 분리해 트리 형태의 구조로 만드는 과정입니다.

전처리

파서 과정에서 만들어진 파서 트리를 기반으로, 쿼리 문장에 구조적인 문제점이 있는지 확인합니다.

각 토큰을 테이블 이름이나, 컬럼 이름 등과 같은 데이터베이스 객체와 연결시키는 과정도 이 단계에서 이루어집니다.

실제 존재하지 않는 테이블이나 컬럼을 참조하거나, 접근 권한이 없는 테이블이나 컬럼을 참조하는 경우 여기서 오류가 발생합니다.

최적화

SQL 옵티마이저가 쿼리 실행 계획을 수립합니다. 이 과정에서 여러 가능한 실행 경로를 비교하여 가장 효율적인 경로를 선택합니다. DBMS의 두뇌에 해당하는 옵티마이저는 쿼리 실행 계획을 수립할 때, 데이터베이스의 통계 정보를 참고합니다. 이 통계 정보는 데이터베이스의 테이블과 인덱스에 저장되어 있으며, 테이블의 레코드 수, 인덱스의 유니크한 값의 수, 테이블의 컬럼의 분포도 등을 포함합니다. 이 때,

  • 쿼리 변환,
  • 비용 최적화,
  • 실행 계획 선택

세 단계로 나누어 진행됩니다.

실행

옵티마이저가 두뇌라면, 실행 엔진과 핸들러는 실제로 쿼리를 실행하는 역할을 합니다.

실행 엔진이 쿼리 실행 계획을 받아서, 핸들러에게 요청하고, 각 핸들러에게 요청해서 받은 데이터를 다시 다른 핸들러에게 전달하는 역할을 합니다.

핸들러는, MySQL 서버의 가장 밑단에서, 실행 엔진의 요청에 따라, 데이터를 디스크로 저장하고, 디스크로부터 읽어오는 역할을 합니다.

MyISAM, InnoDB, Memory 등의 스토리지 엔진이 여기에 해당합니다.

결과 반환

쿼리 실행 결과가 생성되면, 이 결과는 클라이언트 어플리케이션으로 반환됩니다. 조회 작업의 경우 결과 집합이 반환되며, 삽입, 수정, 삭제 작업의 경우 해당 작업에 의해 영향을 받은 행의 수가 반환될 수 있습니다.

1702313123963