SQL 명령어는 데이터베이스에서 데이터를 정의, 조작, 제어하는 데 사용되는 여러 종류의 명령어로 구성되어 있습니다. 이를 크게 데이터 정의 언어 (DDL), 데이터 조작 언어 (DML), 데이터 제어 언어 (DCL), **트랜잭션 제어 언어 (TCL)**로 구분할 수 있습니다. 각 명령어의 주요 예시를 아래에 소개합니다.
1. 데이터 정의 언어 (DDL, Data Definition Language)
DDL 명령어는 데이터베이스의 구조를 정의하거나 변경하는 데 사용됩니다.
- CREATE: 데이터베이스, 테이블, 인덱스 등을 생성합니다.
- CREATE DATABASE mydb; -- 데이터베이스 생성 CREATE TABLE 학생 ( 학생ID INT PRIMARY KEY, 이름 VARCHAR(100), 나이 INT ); -- 테이블 생성
- ALTER: 이미 존재하는 데이터베이스 또는 테이블의 구조를 변경합니다.
- ALTER TABLE 학생 ADD COLUMN 성별 VARCHAR(10); -- 테이블에 컬럼 추가 ALTER TABLE 학생 MODIFY COLUMN 나이 INT NOT NULL; -- 컬럼 수정
- DROP: 데이터베이스나 테이블을 삭제합니다.
- DROP TABLE 학생; -- 테이블 삭제 DROP DATABASE mydb; -- 데이터베이스 삭제
- TRUNCATE: 테이블의 모든 데이터를 삭제하지만 테이블 구조는 유지됩니다.
- TRUNCATE TABLE 학생; -- 테이블의 모든 데이터 삭제
2. 데이터 조작 언어 (DML, Data Manipulation Language)
DML 명령어는 데이터베이스 내의 데이터를 조회, 삽입, 수정, 삭제하는 데 사용됩니다.
- SELECT: 데이터베이스에서 데이터를 조회합니다.
- SELECT * FROM 학생; -- 모든 학생 조회 SELECT 이름, 나이 FROM 학생 WHERE 나이 > 18; -- 특정 조건으로 데이터 조회
- INSERT: 데이터베이스에 새로운 데이터를 삽입합니다.
- INSERT INTO 학생 (학생ID, 이름, 나이) VALUES (1, '홍길동', 20); -- 데이터 삽입
- UPDATE: 기존 데이터를 수정합니다.
- UPDATE 학생 SET 나이 = 21 WHERE 학생ID = 1; -- 특정 학생의 나이 수정
- DELETE: 데이터를 삭제합니다.
- DELETE FROM 학생 WHERE 학생ID = 1; -- 특정 학생 삭제
3. 데이터 제어 언어 (DCL, Data Control Language)
DCL 명령어는 데이터베이스 객체에 대한 권한을 관리하는 데 사용됩니다.
- GRANT: 사용자에게 특정 권한을 부여합니다.
- GRANT SELECT, INSERT ON 학생 TO user_name; -- 특정 사용자에게 권한 부여
- REVOKE: 사용자에게 부여된 권한을 철회합니다.
- REVOKE SELECT ON 학생 FROM user_name; -- 특정 사용자에게 권한 철회
4. 트랜잭션 제어 언어 (TCL, Transaction Control Language)
TCL 명령어는 데이터베이스 트랜잭션을 관리하는 데 사용됩니다. 트랜잭션은 여러 개의 데이터베이스 작업을 하나의 단위로 처리하는 작업입니다.
- COMMIT: 트랜잭션에서 수행된 작업을 영구적으로 확정합니다.
- COMMIT; -- 트랜잭션 확정
- ROLLBACK: 트랜잭션에서 수행된 작업을 취소합니다.
- ROLLBACK; -- 트랜잭션 취소
- SAVEPOINT: 트랜잭션 내에서 특정 지점까지 작업을 되돌릴 수 있게 설정합니다.
- SAVEPOINT my_savepoint; -- 트랜잭션 내에서 저장점 설정
- SET TRANSACTION: 트랜잭션의 속성을 설정합니다.
- SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; -- 트랜잭션 격리 수준 설정
기타 중요한 SQL 명령어
- JOIN: 여러 테이블에서 데이터를 결합할 때 사용합니다.
- SELECT 학생.이름, 수업.수업명 FROM 학생 JOIN 수업 ON 학생.학생ID = 수업.학생ID; -- 두 테이블 조인
- GROUP BY: 데이터를 그룹화하여 집계함수를 적용합니다.
- SELECT 나이, COUNT(*) FROM 학생 GROUP BY 나이; -- 나이별 학생 수
- ORDER BY: 데이터를 정렬합니다.
- SELECT * FROM 학생 ORDER BY 나이 DESC; -- 나이를 기준으로 내림차순 정렬
- LIMIT: 조회할 데이터의 개수를 제한합니다.
- SELECT * FROM 학생 LIMIT 5; -- 상위 5개 데이터만 조회
SQL은 관계형 데이터베이스에서 데이터를 처리하는 데 필수적인 언어이며, 각 명령어를 적절히 사용하여 원하는 데이터를 효율적으로 관리하고 처리할 수 있습니다.
SQL을 사용하는 일반적인 방식은 데이터베이스를 설계하고, 데이터를 삽입, 조회, 수정, 삭제하는 등 여러 작업을 수행하는 것입니다. 이러한 작업은 대개 **데이터베이스 관리 시스템(DBMS)**을 통해 이루어집니다. 일반적인 SQL 사용 흐름을 단계별로 설명하면 다음과 같습니다:
1. 데이터베이스 연결
SQL을 사용하려면 먼저 데이터베이스에 연결해야 합니다. DBMS에 로그인하고, 사용할 데이터베이스를 선택하는 과정입니다. 예를 들어, MySQL에서는 다음과 같은 명령어로 데이터베이스에 접속할 수 있습니다.
mysql -u 사용자명 -p
그런 다음, 사용할 데이터베이스를 선택합니다:
USE 데이터베이스명;
2. 테이블 생성
데이터를 저장하기 위해 테이블을 생성해야 합니다. 테이블은 데이터베이스 내에서 데이터를 저장하는 구조입니다. 테이블을 생성하려면 CREATE TABLE 명령어를 사용합니다.
CREATE TABLE 직원 (
직원ID INT AUTO_INCREMENT PRIMARY KEY,
이름 VARCHAR(100),
부서 VARCHAR(50),
입사일 DATE
);
3. 데이터 삽입
테이블이 생성된 후, 데이터를 삽입할 수 있습니다. INSERT INTO 명령어를 사용하여 데이터를 추가합니다.
INSERT INTO 직원 (이름, 부서, 입사일)
VALUES ('홍길동', '인사부', '2025-03-28');
이 명령어는 직원 테이블에 새로운 데이터를 추가합니다. 직원ID는 자동으로 증가하는 AUTO_INCREMENT 속성을 가지고 있기 때문에, 명시적으로 값을 입력할 필요는 없습니다.
4. 데이터 조회
삽입된 데이터를 조회하려면 SELECT 명령어를 사용합니다. SELECT는 가장 많이 사용되는 SQL 명령어 중 하나로, 데이터베이스에서 데이터를 검색하는 데 사용됩니다.
- 모든 데이터 조회:
- SELECT * FROM 직원;
- 특정 조건으로 조회:
- SELECT 이름, 부서 FROM 직원 WHERE 부서 = '인사부';
- 정렬해서 조회:
- SELECT * FROM 직원 ORDER BY 입사일 DESC;
5. 데이터 수정
이미 삽입된 데이터를 수정하려면 UPDATE 명령어를 사용합니다. 특정 조건에 맞는 데이터를 수정할 수 있습니다.
UPDATE 직원 SET 부서 = '경영부' WHERE 이름 = '홍길동';
이 명령어는 이름이 '홍길동'인 직원의 부서를 '경영부'로 변경합니다.
6. 데이터 삭제
데이터를 삭제하려면 DELETE 명령어를 사용합니다. 주의해야 할 점은, 조건을 정확하게 지정하지 않으면 모든 데이터가 삭제될 수 있다는 점입니다.
DELETE FROM 직원 WHERE 이름 = '홍길동';
이 명령어는 '홍길동'이라는 이름을 가진 직원을 삭제합니다.
7. 데이터베이스 스키마 변경
데이터베이스와 테이블은 시간이 지나면서 변할 수 있습니다. 새로운 컬럼을 추가하거나 기존 컬럼을 수정하는 등의 작업을 하려면 ALTER TABLE 명령어를 사용합니다.
- 컬럼 추가:
- ALTER TABLE 직원 ADD COLUMN 급여 DECIMAL(10, 2);
- 컬럼 수정:
- ALTER TABLE 직원 MODIFY COLUMN 부서 VARCHAR(100);
- 컬럼 삭제:
- ALTER TABLE 직원 DROP COLUMN 급여;
8. 인덱스 생성
데이터가 많아질 경우, 검색 속도를 개선하기 위해 인덱스를 생성할 수 있습니다. CREATE INDEX 명령어를 사용합니다.
CREATE INDEX idx_부서 ON 직원(부서);
이 명령어는 직원 테이블의 부서 컬럼에 인덱스를 추가하여, 해당 컬럼을 기준으로 검색을 빠르게 할 수 있도록 합니다.
9. 조인 (JOIN) 사용
여러 테이블에서 관련 데이터를 결합할 때 조인을 사용합니다. INNER JOIN, LEFT JOIN, RIGHT JOIN 등이 있습니다. 예를 들어, 두 테이블(직원, 부서)이 있을 때, 각 직원의 부서를 조회하려면 JOIN을 사용합니다.
SELECT 직원.이름, 부서.부서명
FROM 직원
INNER JOIN 부서 ON 직원.부서ID = 부서.부서ID;
이 예제는 직원 테이블과 부서 테이블을 부서ID를 기준으로 결합하여, 직원의 이름과 그가 속한 부서명을 조회합니다.
10. 그룹화 및 집계 함수
GROUP BY와 집계 함수(COUNT, SUM, AVG, MAX, MIN)를 사용하여 데이터를 그룹화하고 집계할 수 있습니다.
SELECT 부서, COUNT(*) AS 직원수
FROM 직원
GROUP BY 부서;
이 명령어는 각 부서별로 직원 수를 계산합니다.
11. 트랜잭션 처리
데이터의 일관성을 유지하려면 트랜잭션을 사용하여 여러 작업을 하나의 단위로 처리할 수 있습니다. 트랜잭션은 COMMIT, ROLLBACK으로 처리합니다.
BEGIN;
UPDATE 직원 SET 부서 = '기술부' WHERE 이름 = '홍길동';
COMMIT; -- 작업 확정
또는, 문제가 발생하면 변경된 내용을 취소할 수 있습니다:
ROLLBACK; -- 트랜잭션 취소
SQL 사용 시 일반적인 흐름:
- 데이터베이스 생성 및 연결: 데이터베이스를 생성하고 연결합니다.
- 테이블 설계 및 생성: 테이블을 설계하고 생성합니다.
- 데이터 삽입: 데이터를 삽입하여 테이블을 채웁니다.
- 데이터 조회 및 분석: SELECT 문을 사용하여 데이터를 조회하고 분석합니다.
- 데이터 수정 및 삭제: UPDATE, DELETE 명령어로 데이터를 수정하거나 삭제합니다.
- 데이터베이스 구조 변경: 필요한 경우 테이블 구조를 변경합니다.
- 인덱스 및 성능 최적화: 검색 성능을 향상시키기 위해 인덱스를 추가합니다.
SQL을 활용한 작업은 이러한 기본적인 흐름에 따라 이루어지며, 데이터베이스의 설계 및 관리, 데이터의 입력, 업데이트, 삭제, 조회 등의 작업을 체계적으로 진행할 수 있습니다.
'데이터베이스' 카테고리의 다른 글
SQL 이란? (0) | 2025.03.28 |
---|---|
SQL Server 관리 스튜디오로 새 테이블 만들기 (0) | 2025.03.28 |
MS SQL Server - 시퀀스 서버 관리 스튜디오 사용하기 (0) | 2025.03.28 |
MS-SQL 설치 (0) | 2025.03.28 |
프라이머리 키란? (0) | 2025.03.28 |