데이터베이스 운영에서 사용되는 SQL(Structured Query Language) 문은 크게 세 가지 유형으로 분류된다. DDL(Data Definition Language), DML(Data Manipulation Language), 그리고 DCL(Data Control Language). 가 있다.
DDL(Data Definition Language)
DDL은 데이터베이스의 구조를 정의하고 관리하는 데 사용된다. 주로 데이터베이스 객체를 생성, 수정, 삭제하는 데에 관련되어 있다. DDL의 명령어는 다음과 같다.
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 명령어노는 GRANT와 REVOKE가 있다.
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"는 해당 권한을 더 이상 가지고 있지 않는다.