새소식

반응형
Database/Theory

[Database] 데이터베이스 DDL, DML, DCL

  • -
반응형

데이터베이스 로고 사진입니다.
데이터베이스

 

데이터베이스 DDL, DML, DCL


데이터베이스 운영에서 사용되는 SQL(Structured Query Language) 문은 크게 세 가지 유형으로 분류된다. DDL(Data Definition Language), DML(Data Manipulation Language), 그리고 DCL(Data Control Language). 가 있다.

 

DDL(Data Definition Language)

DDL은 데이터베이스의 구조를 정의하고 관리하는 데 사용된다. 주로 데이터베이스 객체를 생성, 수정, 삭제하는 데에 관련되어 있다. DDL의 명령어는 다음과 같다.

  • CREATE - 새로운 데이터베이스 객체(테이블, 뷰, 인덱스 등)를 생성한다.
  • ALTER - 기존 데이터베이스 객체의 구조를 변경한다.
  • DROP - 데이터베이스 객체를 삭제한다.
  • TRUNCATE - 테이블의 모든 레코드를 삭제하지만 테이블 구조는 그대로 유지한다.

 

CREATE

CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,
    FirstName VARCHAR(50),
    LastName VARCHAR(50)
);
  • "Employees"라는 테이블을 생성하는 명령어이다.
  • EmployeeID는 정수형(INT)으로 주요 키(PRIMARY KEY)로 설정되어 있다. 주요 키는 각 행을 고유하게 식별하는 열이다.
  • FirstName과 LaskName은 최대 50자까지의 문자열(VARCHAR(50))을 저장할 수 있는 열이다.

위의 예제에서 확인할 수 있듯이 테이블의 칼럼을 정의할 땐 칼럼이름 데이터타입과 같이 선언하면 된다.(주요 키 같은 경우 맨 끝에 PRIMARY KEY를 선언해 주면 된다.)

 

ALTER

ALTER TABLE Employees
ADD COLUMN Salary INT;
  • "Employees" 테이블에 Salary라는 새로운 열을 추가하는 명령어이다.
  • Salary 열은 정수형(INT)으로 정의되어 있다. 이제 직원의 급여 정보를 저장할 수 있게 되었다.

 

DROP

DROP TABLE Employees;
  • "Employees" 테이블을 삭제하는 명령어이다.
  • 테이블을 삭제하면 해당 테이블과 관련된 모든 데이터가 손실되니 이 작업은 주의해서 사용해야 한다.

 

TRUNCATE

TRUNCATE TABLE employees;

TRUNCATE는 데이터베이스에서 테이블의 모든 행을 삭제하는 SQL 명령어이다. 하지만 DELETE 명령과는 다르게 TRUNCATE는 테이블 스키마를 유지한 채로 데이터만 삭제한다. 또한, 롤백할 수 없고 트리거도 실행되지 않는다. 

 

위의 코드를 실행하면 employees 테이블의 모든 행을 삭제한다. 다만, 테이블 구조는 그대로 유지된다.

 

 

DML(Data Manipulation Language)

DML(Data Manipulation Language)은 데이터베이스에서 데이터를 조작, 삽입, 수정, 삭제하는 데 사용되는 언어와 명령문들의 모음이다. DML은 주로 데이터베이스의 레코드(행)와 관련된 작업을 수행한다. 가장 흔히 사용되는 DML 명령어에는 SELECT, INSERT, UPDATE, DELETE가 포함된다.

  • SELECT - 데이터베이스에서 데이터를 조회하는 데 사용된다. 특정 열이나 특정 조건을 가진 행을 선택할 수 있다.
  • INSERT - 새로운 데이터를 데이터베이스에 추가하는 데 사용된다.
  • UPDATE - 이미 존재하는 데이터의 값을 수정하는 데 사용된다. 특정 조건을 가진 행의 값을 업데이트할 수 있다.
  • DELETE - 데이터베이스에서 특정 행이나 조건을 가진 데이터를 삭제하는 데 사용된다.

SELECT

-- 모든 열을 선택하는 경우
SELECT * FROM employees;

-- 특정 열을 선택하는 경우
SELECT employee_id, first_name, last_name FROM employees;

-- 특정 테이블에서 조건에 맞는 행 선택
SELECT * FROM employees WHERE department_id = 30;

-- 조건을 여러 개 사용하여 행 선택
SELECT * FROM employees WHERE salary > 50000 AND department_id = 20;

-- 행의 정렬
SELECT * FROM employees ORDER BY hire_date DESC;

-- 특정 열에 별칭(alias) 사용
SELECT first_name AS "First Name", last_name AS "Last Name" FROM employees;

-- 중복된 값을 제외하고 유일한 값만 선택
SELECT DISTINCT department_id FROM employees;

-- 특정 범위의 행 선택
SELECT * FROM employees WHERE hire_date BETWEEN '01-JAN-21' AND '31-DEC-21';
  • SELECT - 테이블에서 데이터를 조회하는 키워드이다. 특정 열을 선택하거나 모든 열을 선택할 수 있다.
  • FROM - 데이터를 조회할 테이블의 이름을 지정하는 키워드이다. 데이터는 이 테이블에서 가져온다.
  • WHERE - 특정 조건을 만족하는 행을 선택하는 데 사용되는 키워드이다. 여기서 조건은 주어진 열의 값과 비교된다.
  • ORDER BY - 조회한 데이터의 정렬 순서를 지정하는 키워드이다. 주로 날짜나 숫자 등을 기준으로 정렬할 때 사용된다.
  • DESC  - 내림차순 정렬을 나타내는 키워드로, 가장 큰 값부터 작은 값 순서로 정렬한다.
  • ASC - 오름차순 정렬을 나타내는 키워드로, 가장 작은 값부터 큰 값 순서로 정렬한다.
  • AS - 열 또는 테이블에 별칭(alias)을 지정하는 키워드이다. 별칭을 사용하면 열 또는 테이블에 대해 더 명시적인 이름을 사용할 수 있다.
  • DISTINCT - 중복된 값을 제외하고 유일한 값만 선택하는 키워드이다.
  • BETWEEN - 특정 범위의 값에 대한 조건을 지정하는 키워드로, 특정 값이나 두 값 사이에 있는 데이터를 선택할 때 사용된다.
  • AND - 두 개 이상의 조건을 결합하는 데 사용된다(모든 조건이 True일 때만 True를 반환한다.)

 

INSERT

-- 기본 구조
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

-- 예시
INSERT INTO employees (employee_id, first_name, last_name, salary)
VALUES (101, 'John', 'Doe', 50000);

INSERT 문은 SQL에서 데이터베이스 테이블에 새로운 레코드(행)를 삽입하는 데 사용된다.

  • INSERT INTO - 행을 삽입할 대상 테이블을 지정한다.
  • table_name - 삽입할 대상 테이블의 이름을 지정한다.
  • (column1, column2,...) - 삽입할 열(칼럼)의 목록을 지정한다.
  • VALUES(value1, value2,...) - 각 열에 대응하는 값을 지정한다. 이 값들이 새로운 레코드의 데이터가 된다.

예제에서는 "employees" 테이블에 새로운 직원 레코드를 삽입하는 것을 보여준다. "employee_id", "first_name", "last_name", "salary" 열에 해당하는 값을 지정하여 새로운 레코드를 추가한다.

 

UPDATE

-- 기본 구조
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

-- 예시
UPDATE employees
SET salary = 55000
WHERE employee_id = 101;

UPDATE 문은 SQL에서 데이터베이스 테이블의 기존 레코드를 수정하는 데 사용된다.

  • UPDATE - 수정할 대상 테이블을 지정한다.
  • table_name - 수정할 대상 테이블의 이름을 지정한다.
  • SET column1 = value1, column2 = value 2,... - 수정할 열(칼럼)과 해당하는 값을 지정한다.
  • WHERE condition - 어떤 레코드를 수정할지를 결정하는 조건을 지정한다.

예제에서는 "employees" 테이블에서 "employee_id"가 101인 레코드의 "salary"를 55000으로 수정하는 것을 보여준다. 조건인 WHERE employee_id = 101은 특정 레코드를 식별하는 기준이 된다.

 

DELETE

-- 기본 구조 (모든 레코드 삭제)
DELETE FROM table_name;

-- 예시 (특정 조건을 만족하는 레코드 삭제)
DELETE FROM employees
WHERE employee_id = 101;

DELETE 문은 SQL에서 데이터베이스 테이블에서 특정 레코드나 모든 레코드를 삭제하는 데 사용된다.

  • DELETE - 삭제할 대상 테이블을 지정한다.(테이블을 삭제하는 것은 아니다)
  • FROM table_name - 삭제할 대상 테이블의 이름을 지정한다.
  • WHERE condition - 어떤 레코드를 삭제할지를 결정하는 조건을 지정한다. 조건을 생략하면 테이블의 모든 레코드가 삭제된다.

위의 예제에서는 "employees" 테이블에서 "employees_id"가 101인 레코드를 삭제하는 것을 보여준다.

 

DCL(Data Control Language)

DCL(Data Control Language)은 데이터베이스 객체에 대한 액세스 권한을 제어하는 데 사용되는 SQL 언어의 하위 언어이다. 주로 데이터베이스 관리자(DBA)가 데이터베이스에 대한 접근 권한을 설정하거나 제거할 때 사용된다. 주요 DCL 명령어노는 GRANTREVOKE가 있다.

  • GRANT - 특정 사용자나 사용자 그룹에 대한 특정 권한을 부여한다.
  • REVOKE - 특정 사용자나 사용자 그룹에 대한 권한을 제거한다.

GRANT

GRANT SELECT, INSERT ON employees TO john_doe;

GRATNT 문은 데이터베이스 사용자에게 특정 권한을 부여하는 데 사용된다. 위의 예제에서는 "employees" 테이블에 대한 SELECT 및 INSERT 권한이 "john_doe"라는 사용자에게 부여된다. 이제 "john_doe"는 "employees" 테이블에서 데이터를 조회하고 새로운 데이터를 삽입할 수 있다.

 

REVOKE

REVOKE SELECT, INSERT ON employees FROM john_doe;

REVOKE 문은 사용자 또는 역할로부터 특정 권한을 취소하는 데 사용된다.  위의 예제에서는 "employees" 테이블에 대한 SELECT 및 INSERT 권한이 "john_doe" 사용자로부터 취소된다. 이제 "john_doe"는 해당 권한을 더 이상 가지고 있지 않는다.

 

 

 

읽어주셔서 감사합니다.

728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.