본문 바로가기

별걸다하는 IT/데이터베이스 Database

[데이터베이스 SQL] DDL, DML, DCL, TCL 및 연습문제

 

데이터베이스(DB, DBMS) 목차

안녕하세요 양햄찌블로그 주인장입니다~~!

오늘은 기초편~!!! 데이터베이스의 명령어 종류에 대해서 볼거예요

 

SQL 문장(질의어)들의 종류-DDL, DML, DCL, TCL

 

사진출처: https://www.sqlsplus.com/what-is-ddl-dml-dcl-and-tcl-in-the-sql-language/

SQL의 문장들은 크게 3가지 또는 4가지로 나눌 수 있어요

1. DDL, DML, DCL

보통 대부분 이렇게 크게 나눕니다. 이럴 경우 TCL은 DCL에 포함된다고 생각하는 경우에요

2. DDL, DML, DCL, TCL

근데 이렇게 4개로 보기도 해요.

 

내가 데이터베이스를 활용하기 위해서 알아야 하는 명령어들이 이렇게 4가지 범주에 포함된다는 것은 알겠는데

이렇게 영어로 약어로만 되어있으니~~ 이것들이 다 뭔가싶죠오~? 

 

설명 예시로

우리 회사 직원의 정보를 데이터베이스에 저장한다고 생각하고 접근해보겠습니다

회사 직원의 개인정보로는 직원번호, 이름, 성명, 핸드폰번호, 이메일 등등....

 

 

 

 

 

DDL (Data Definition Language)

데이터 정의어라는 의민데요

ex) CREATE, ALTER, DROP, RENAME(ANSI sql일 경우) 이와 같은 sql 명령어들이 있습니다.

내가 이름, 성명, 핸드폰번호, 이메일 등등을 저장하려면 이에 알맞는 저장구조를 가진 공간이 필요하겠죠? 그거 설정하는 명령어를 DDL 즉 데이터를 정의하는 데 사용되는 명령어다~ 입니다.

 

엑셀로 정보를 관리한다 생각하면, 직원의 정보를 표로 만들어서 관리하겠죠?

아래처럼요! 데이터베이스도 마찬가지로 이렇게 정보를 표로 만들어서 관리합니다

 

이 표를 데이터베이스에서는 테이블이라고 해요 

 

 



즉 DDL은 테이블과 같은 데이터구조(스키마)를 정의하고

엑셀에서 저장할 직원의 개인정보 목록이 추가되면 표의 열을 추가해서 저장하는데 알맞게 구조를 변경하듯이

데이터베이스에서도 데이터에 맞게 구조를 변경하고 삭제하는 데 사용되는 명령어를 DDL이라고 합니다.

 

대표적으로

CREATE - 테이블을 생성하는 데 사용해요

ALTER - 변경하는 데 사용

DROP - 삭제하는 데 사용

RENAME - 테이블의 이름을 바꾸는 데 사용됩니다.

 

DML (Data Manipulation Language)

그림 출처: https://www.educba.com/data-manipulation-language/

데이터 조작어라고 불러요

ex) SELECT, INSERT, UPDATE, DELETE

 

자 테이블을 생성해서 1000명의 직원들의 정보를 저장했다고 합시다

이제 내가 필요할 때마다 원하는 정보를 쏙쏙 빼서 확인할 수 있어야겠죠?

 

뭐 1000명 직원들의 평균 월급을 확인한다던가.

가장 나이가 많은 직원이 누군지 알고싶다던가..

실적이 높은 직원들만 월급을 올려준다고 가정하면 총 몇명을 올려줘야 하는지 확인하고 싶을 때 등

내가 원하는 형식대로 데이터에 변형을 가해서 조작하고 확인하는 것 = 이래서 데이터 조작어입니다.

 

DDL로 데이터를 저장하기 위한 저장 구조를 만들어놓고

DML로 데이터베이스에 접근해서 데이터를 저장하고, 변형하고, 확인하고 하는거죠

 

SELECT - 추출 즉 데이터를 보여줘 라는 명령어입니다.

UPDATE - 변경사항을 적용하는 거예요. 30살 나이의 직원들을 찾아서 31살로 바꿔줘 ! 할 때~

INSERT - 직원 한명이 입사했네~ 직원 정보 추가~

DELETE - 퇴사했네 삭제

 

근데 데이터 조작어도 두 분류로 나눌 수 있습니다.

 

절차적 데이터 조작어 vs 비절차적 데이터 조작어

- 무슨말이냐면 '직원 저장소(테이블)에서 나이 30 직원 목록을 뽑아줘!' 이러면 그 과정(어떻게 뽑아야 하는지)은 데이터베이스가 알아서 판단하고 결과만 짠하고 전달해주는거죠 이게 비절차적 즉 절차를 알 필요 없이 내가 원하는 걸 명령하면 된다 입니다.

 

반면에 절차적 데이터 조작어는 저 데이터를 뽑으려면 어떻게 접근해야하는 지 명시를 해줘야 하는 언어를 말합니다.

 

DCL (Data Control Language)

사진 출처: https://www.w3schools.in/mysql/ddl-dml-dcl/

데이터 제어어라고 부릅니다.

ex) GRANT, REVOKE

보통 TCL인 COMMIT, ROLLBACK까지 포함해서 즉 둘을 합쳐서 DCL이라고 분류하기도 해요.

 

요새 개인정보 엄청 중요하죠?

회사 직원의 주민등록번호가 유출됐다고 생각해보세요... 난리날거예요

즉 권한에 따라 데이터들을 제어할 자격을 주는거 이게 DCL입니다. 

 

GRANT - 사용자에게 권한을 부여하는 것 (아무나 접근하고 수정하고 지워버리고 하면 안되니까)

REVOKE -권한을 부여했으면 당연히 취소하는 기능도 있겠죠?

 

TCL (Transaction Control Language)

TCL은 트랜잭션 제어어라고 부릅니다.

ex) COMMIT, ROLLBACK

 

트랜잭션을 아시는 분은 그냥 트랜젝션을 제어하기 위한 명령어라고 이해하면 끝이예요.

트랜잭션은 따로 다뤄야할 만큼 할 말이 많은 아이라

TCL을 설명하기 위해 간략하게만 이해를 돕자면  

 

1000명 즉 모든 직원의 연봉을 10프로 인상해주기로 했어요

그래서 UPDATE즉 DML을 이용해서 딱 수행 명령을 내렸는데 도중에 전원이 나가서 전원이 꺼져버렸다고 가정을 해봐요

나중에 키니까 몇명은 업데이트가 안되고 몇명은 업데이트가 되고 이러면 큰일이죠?

이런걸 제어하기 위해 하나의 논리적인 단위로 묶은 것을 트랜잭션이라 하고 이 트랜잭션 관련 명령어를 TCL이라고 생각하면 됩니다.

 

COMMIT - 트랜잭션 작업 결과를 반영 (어떤 애는 수행되고 어떤애는 안수행되고 이렇게 안되게)

ROLLBACK - 트랜잭션 작업을 취소 및 원래대로 복구

SAVEPOINT - 저장 지점을 설정하는거 (게임으로 치자면 중간저장)

 

 

관련 기출문제~~~

(1) 다음 중 데이터 제어어에 해당하는 명령어는?

1. INSERT

2. RENAME

3. COMMIT

4. REVOKE

 

(2) 다음 중 아래 내용의 범주에 해당하는 SQL 명령어로 옳지 않은 것은?

[ 테이블의 구조를 생성/ 변경/ 삭제 하는 등 데이터 구조를 정의하는 데 사용되는 명령어]

1. CREATE

2. GRANT

3. ALTER

4. DROP

 

(3) 아래 내용에 해당하는 SQL 명령어의 종류를 쓰시오

[ 논리적인 작업의 단위를 묶어 DML에 의해 조작된 결과를 작업단위 별로 제어하는 명령어인 commit, rollback, savepoint 등이 여기에 해당하며, 일부에서는 DCL로 분류하기도 한다 ]

 

(4) 데이터베이스를 정의하고 접근하기 위해서는 데이터베이스 관리 시스템과의 통신수단이 필요한데 이를 데이터 언어라고 하며, 그 기능과 사용 목적에 따라 DDL, DML, DCL로 구분된다. 다음 중 데이터 언어와 SQL 명령어에 대한 설명으로 가장 부적절한 것은?

1. 비절차적 데이터 조작어는 사용자가 무슨 데이터를 원하며, 어떻게 그것을 접근해야 되는지를 명세하는 언어이다

2. DML은 데이터베이스 사용자가 응용 프로그램이나 질의어를 통하여 저장된 데이터베이스를 실질적으로 접근하는데 사용되며 SELECT, INSERT, DELETE, UPDATE 등이 있다.

3. DDL은 스키마, 도메인, 테이블, 뷰, 인덱스를 정의하거나 변경 또는 제거할 때 사용되며 CREATE, ALTER, DROP, RENAME 등이 있다.

4. 호스트 프로그램 속에 삽입되어 사용되는 DML 명령어들을 데이터 부속어 (Data sub Language)라고 한다.

 

출처 SQL자격검정실전문제(sqld, sqlp)

 

공감과 댓글은 힘이 됩니다. 그럼 다음 포스팅에서 봐요~!!