Database/MS-SQL

SQL 개념 정리 (DDL, DML, DCL, TCL)

ㅈㅣ니 2024. 7. 4.

 

 

 

오늘은 SQL 문법의 개념과 종류에 대해서 알아보는 시간을 가져보고 다양한 예제를 보여주려한다.

 

참고로 Sample Data는 아래 사이트에서 가져왔다.

 

https://www.sqlservertutorial.net/getting-started/load-sample-database/

 

Load SQL Server Sample Database

This tutorial shows you step by step how to load a sample database BikeStores into the SQL Server for practicing.

www.sqlservertutorial.net

 

SQL 문법은 DDL, DML, DCL, TCL로 구분 지을 수 있다.

 

DDL (Data Definition Language) : 데이터 정의어

- 데이터베이스 구조 정의에 사용하는 언어로, 테이블이나 컬럼 등을 생성, 수정, 삭제한다.

종류 역할
CREATE 새로운 테이블 생성
ALTER 기존 테이블 구조 변경
DROP 기존 테이블 삭제
TRUNCATE 기존 테이블 초기화
RENAME 기존 테이블 이름 변경

 

 

CREATE 구문 예시

CREATE TABLE production.categories (
	category_id INT IDENTITY (1, 1) PRIMARY KEY,		-- 1번부터 1씩 증가 == 오라클 시퀀스랑 동일
	category_name VARCHAR (255) NOT NULL
);

[결과]

위와 같이 테이블이 생성된 걸 확인할 수 있다.

 

 

+ TRUNCATE 와 DROP 명령어 구문 예시

DROP TABLE BikeStores.production.categories;
-- 테이블 자체가 아예 사라짐

TRUNCATE TABLE BikeStores.production.categories;
-- 테이블의 뼈대는 남긴 채 모든 데이터 삭제

 

 

DML (Data Manipulation Language) : 데이터 조작어

- 데이터 조작에 사용하는 언어로, 테이블의 데이터를 조회, 저장, 수정, 삭제한다.

=> 저장된 데이터들을 다루는 역할을 한다.

종류 역할
SELECT 저장된 데이터를 조회
INSERT 새로운 데이터를 저장
UPDATE 저장된 데이터를 수정
DELETE 저장된 데이터를 삭제

 

INSERT 구문 예시

INSERT INTO 테이블명 컬럼명1,컬럼명2 VALUES(데이터1,데이터2)

 

SET IDENTITY_INSERT production.brands ON;  

-- identity 를 부여했을 때 자동으로 입력되기 때문에 위의 명령어를 넣어줘야 수동으로 입력할 수 있다.

INSERT INTO production.brands(brand_id,brand_name) VALUES(1,'Electra')
INSERT INTO production.brands(brand_id,brand_name) VALUES(2,'Haro')
INSERT INTO production.brands(brand_id,brand_name) VALUES(3,'Heller')
INSERT INTO production.brands(brand_id,brand_name) VALUES(4,'Pure Cycles')
INSERT INTO production.brands(brand_id,brand_name) VALUES(5,'Ritchey')
INSERT INTO production.brands(brand_id,brand_name) VALUES(6,'Strider')
INSERT INTO production.brands(brand_id,brand_name) VALUES(7,'Sun Bicycles')
INSERT INTO production.brands(brand_id,brand_name) VALUES(8,'Surly')
INSERT INTO production.brands(brand_id,brand_name) VALUES(9,'Trek')

SET IDENTITY_INSERT production.brands OFF;
-- IDENTITY_INSERT OFF

 

SELECT 구문 예시

select * from 테이블명;

SELECT 컬럼명 FROM 테이블명
WHERE 조건;
select * from BikeStores.production.brands;

[결과]

 

 

INSERT 구문으로 입력된 데이터들이 출력되는 것을 확인할 수 있다.

 

INSERT  예시 2)

INSERT INTO production.categories(category_id,category_name) VALUES(1,'Children Bicycles')
INSERT INTO production.categories VALUES ('Comfort Bicycles')

 

 

 

 

이전에 CREATE 문에서 category_id에 identity 설정을 해줬기 때문에,

따로 value 값을 입력하지 않아도 자동으로 입력이 되는 것을 확인할 수 있다.

 

 

UPDATE 구문 예시

UPDATE BikeStores.production.categories
SET category_name = '편안한 자전거'
WHERE category_id = 2

select * from BikeStores.production.categories;

 

 

 

 

update 구문으로 인해 데이터가 바뀐것을 확인할 수 있다.

 

 

 

DB 를 활용하다보면, 주로 조회를 많이 하는 데, 그 때 JOIN 구문이 잘 활용됩니다.

 

위의 테이블을 기준으로 간단한 JOIN 구문에 대해서 설명해보겠습니다.

SELECT *
FROM [BikeStores].[production].[brands] a			-- a 라고 alias 선언
JOIN [BikeStores].[production].[products] b 		-- b 라고 alias 선언
ON a.brand_id = b.brand_id
WHERE model_year = 2016

 위와 같은 방식은 이퀄 조인이라고 한다. == INNER JOIN

(서로 다른 테이블에 같은 이름의 컬럼이 있기 때문이다.)

 

 

두개의 테이블을 합쳐서 보이게 할 수 있다.

 

select *
from [BikeStores].[production].[brands] a
JOIN [BikeStores].[production].[products] b ON a.brand_id = b.brand_id
WHERE model_year = 2016 AND category_id <> 6

 

=> WHERE 절에 category_id가 6인 것을 제외하는 조건을 추가했다.

 

 

DCL (Data Control Language) : 데이터 제어어

- 데이터베이스에 대한 접근 권한 제어에 사용하는 언어로, 각종 권한을 부여, 회수한다.

종류 역할
GRANT 권한을 부여
REVOKE 권한을 회수

 

 

TCL (Transaction Control Language) : 트랜잭션 제어어

- DCL에서 트랜잭션을 컨트롤하는 명령어를 TCL로 분류한다.

종류 역할
COMMIT 작업한 데이터를 데이터베이스에 영구적으로 반영하는 명령어
ROLLBACK 작업 시작 이전의 상태로 되돌림
SAVEPOINT 저장점을 지정 후 Rollback을 사용하여 특정 지점까지 Rollback이 가능하게 하는 명령어

 

+ 추가 내용

 

AUTO COMMIT

  • SQL Server ( MS-SQL )에서는 Auto Commit 이 default 값이다.
  • DML, DDL 문을 수행할 때 마다 DBMS가 트랜잭션을 컨트롤 하는 방식이다.
  • 명령어가 수행되면 자동 COMMIT을 수행하고, 오류가 발생할 시에는 자동 ROLLBACK을 수행한다.

 

 

 

반응형

'Database > MS-SQL' 카테고리의 다른 글

[SQL] WHERE 절의 IN 연산자  (0) 2024.08.01
정규화 (Normalization) 란?  (0) 2024.08.01
JOIN  (0) 2024.07.11
와일드 카드를 이용한 SELECT  (0) 2024.06.20
SQL Server 2022 설치하기  (0) 2024.06.13