[DB] SQL 알아보기

HeeSung Lee·2023년 3월 18일
1

DB

목록 보기
1/1
post-thumbnail
post-custom-banner

🗄️ SQL(Structured Query Language)

SQL은 관계형 데이터베이스에서 데이터 정의, 데이터 조작, 데이터 제어 등을 위하여 사용하는 언어다. SQL의 종류로는 DDL, DML, DCL, TCL 이 있다.

1. DDL(Data Definition Language)

DDL 은 테이블이나 인데스 같은 데이터의 구조를 정의하거나 수정, 삭제하는데 사용되는 명령어다. 이제 DDL 에 대하여 더 알아보자.

DDL 의 대상

DDL 대상설명
Table데이터를 저장하는 기본 저장단위, 행과 열로 구성
View하나 이상의 물리 테이블에서 유도되는 가상의 테이블
Index검색 속도를 향상시키기 위한 데이터베이스 오브젝트
Schema데이터베잉스의 구조와 제약조건에 관한 전반적인 명세를 기술한 메타데이터의 집합

데이터 유형

컬럼을 정의할 때 선언한 데이터 유형은 해당 컴럼이 받아드리는 자료형을 규정해야한다. 또 선언한 데이터의 자료형이 아닌 데이터가 입력되거나 지정한 데이터 크기를 초과하면 에러가 발생한다.

자료형설명
CHARACTER(size)길이가 size인 고정 길이 문자열 데이터
VARCHAR(size)가변 길이 문자 데이터(size 는 최대 크기, 가변 길이로 조정되므로 할당된 변수값 만큼의 byte 만 적용됨)
NUMERIC정수 데이터
DATETIME날짜와 시각 데이터

명령어

DDL 명령어는 생성, 수정, 삭제로 나뉜다.

유형명령어설명
생성CREATE새로운 데이터베이스 개체 생성
수정ALTER이미 존재하는 데이터베이스 개체에 대한 변경
삭제DROP
TRUNCATE
이미 존재하는 데이터베이스 개체 삭제
데이터베이스 개체에서 내용 삭제

1. CREATE 사용하기

CREATE TABLE 을 사용하여 테이블을 생성할 때는 다음을 주의해야한다. 테이블 이름에는 단수형 객체를 의미하는 적절한 이름을 사용하고, 다른 테이블과 중복된 이름을 가져서는 안된다. 또한 한 테이블안에 같은 이름의 컬럼이 존재해서도 안되며 컬럼 뒤에는 반드시 자료형을 지정해주어야한다. 또 모든 컬럼은 반드시 문자로 시작해야하며 예약어는 사용이 불가능하다. 이제 예제를 통해 CREATE TABLE 을 사용하는 법을 알아보자.

CREATE TABLE 문법

명령어설명
NOT NULLNULL 값 불허
PRIMARY KEY기본키 선언
UNIQUE고유키 선언
FOREIGN KEY외래키 선언
CONSTRAINT제약조건 설명

테이블 생성 조건

대상조건
테이블 명STUDNET
컬럼ST_ID 고정문자 8자리
ST_NAME 가변문자 20자리
CLASS_ID 고정문자 4자리
BIRTH 날짜
제약 조건Primary Key: ST_ID(제약조건 명은 ST_PK)
NOT NULL: ST_NAME, ST_ID
CREATE TABEL STUDENT(
	ST_ID CHAR(8) NOT NULL,
    ST_NAME VARCHAR2(20) NOT NULL,
    CLASS_ID CHAR(4),
    BIRTH DATE,
    CONSTRAINT ST_PK PRIMARY KEY(ST ID)
);

2. ALTER 사용하기

ALTER 명령어는 컬럼이나 제약조건을 추가/삭제 하기 위하여 사용한다.

ALTER TABLE 문법

구분문법설명
ADDALETER TABLE 테이블명 ADD 컬럼명 데이터유형 NOT NULL테이블에 컬럼 추가
MODIFYALTER TABLE 테이블명 MODIFY 컬럼명 데이터 유형 NOT NULL컬럼의 제약조건 변경
DROP COLUMNALTER TABLE 테이블명 DROP COLUNM 컬럼명컬럼을 삭제
RENAME COLUNMALTER TABLE 테이블명 RENAME COLUNM 컬럼명 TO 바꿀 컬럼명컬럼의 이름 변경
DROP CONSTRAINTALTER TABLE 테이블명 DROP CONSTRAINT 제약조건기존 제약조건 삭제
ADD CONSTRAINTALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 제약조건테이블에 제약조건 추가

3. DROP TABLE 사용하기

DROP 은 불필요한 테이블을 삭제하기 위한 명령어다.

DROP TABLE 문법

문법설명
DROT TABLE 테이블 명 [CASCADE CONSTRAINT]테이블의 모든 데이터와 구조까지 완전히 삭제
CASECADE CONSTRAINT 는 PRIMARY KEY, UNIQUE KEY 를 참조하는 다른 테이블의 참조 무결성 제약도 함께 삭제시키는 명령이다.

4. TRUNCATE TABLE 사용하기

TRUNCATE TABLE 은 테이블에 저장된 모든 행을 제거하고 저장공간을 재사용 할 수 있도록 해제하는 명령어다.

TRUNCATE 문법

문법설명
TURNCATE TABLE 테이블명테이블의 모든 행을 삭제
최초로 생성된 초기의 상태로 만듦

5. DROP, TRUNCATE, DELETE 비교해보기

구분DROPTRUNCATEDELETE
명령어 종류DDLDDLDML
Rollback불가능불가능COMMIT 안했으면 가능
CommitAutoAuto사용자가 직접 COMMIT
Release테이블이 사용한 모든 저장소 모두테이블이 사용했던 저장소 중 최초 테이블 생성 시 할당된 저장소만 남기고 Realese사용했던 저장소는 Reelase 되지 않음
삭제 상태테이블 정의까지 완전삭제최초 생성된 초기상태로 만듦테이터만 삭제
삭제 로그없음없음있음

2. DML (DATA Mainpulation Language)

DML 은 데이터베이스에 저장된 데이터를 조회, 입력, 수정, 삭제하는 데 사용하는 질의어다. DML은 비절차적 데이터 조작어이고, 사용자가 무슨 데이터를 원하는지 명세한다.

DML 의 유형

유형동작설명
SELECT데이터 조회테이블을 구성하는 레코드 중 전체 또는 조건을 만족하는 레코드를 조회
INSERT데이터 입력테이블에 새로운 *레코드를 입력
UPDATE데이터 수정테이블에 특정 레코드를 변경
DELETE데이터 삭제테이블에 특정 레코드를 삭제

레코드: 관계형 DB에서는 행을 레코드 또는 튜플로 정의함

1. SELECT 사용하기

SELECT 명령어는 데이터의 내용을 조회할 때 사용하는 명령어다.

SELECT 문법

문법설명
SELECT [ALL | DISTINCT]
컬럼명 AS 별명
FROM 테이블명
SELECT절에서 명시한 컬럼을 FROM 절의 테이블에서 조회
ALL(중복된 데이터 O), DISTINCT(중복된 데이터 X) 는 생략 가능
AS 를 사용하면 별명 지을수 있음
AS도 생략 가능

2. INSERT 사용하기

INSERT 명령어는 데이터의 내용을 입력할 떄 사용하는 명령어다.

INSERT 문법

문법설명
INSERT INTO 테이블명(컬럼명) VALUES(입력값)데이터를 입력하고자 하는 테이블의 컬럼을 정의하여 데이터를 입력
컬럼은 생략 가능

3. UPDATE 사용하기

UPDATE 명령어는 데이터의 내용을 수정할 떄 사용하는 명령어다.

UPDATE 문법

문법설명
UPDATE 테이블명
SET 컬럼명=입력값
WHERE 조건
UPDATE 문의 테이블에서 SET 절의 컬럼을 입력값으로 수정
WHERE 절에서 데이터 수정 조건 정의

4. DELETE 사용하기

DELETE 명령어는 데이터의 내용을 삭제할 떄 사용하는 명령어다.

DELETE 문법

문법설명
DELETE[FROM] 테이블명
WHERE 조건
DELETE 문의 테이블에서 WHERE 절의 조건에 맞는 데이터를 제거
FROM 은 생략 가능

3. TCL(Transaction Control Language)

1. 트랜지션

TCL은 트랜재견을 제어하는 명령어다. 트랜잭션은 업무 처리를 위한 데이터베이스의 논리적인 작업 단위를 의미한다. 하나의 트랜잭션은 한 개 이상의 연산으로 이루어질 수 있고, 이 연산들은 완전히 처리되거나 아예 한 개도 처리가 되지 않아야 한다. 트랜잭션의 특징은 다음과 같다.

  • Atomicity(원자성)
  • Consistency(일관성)
  • Isolation(고립성)
  • Durability(영속성)

2. COMMIT

COMMIT 은 하나의 트랜잭션을 정상적으로 완료하고 그 결과를 데이터베이스에 반영하는 명령어다. 쉽게 GitHub 커밋이라 생각하면 된다.

COMMIT 예제

INSERT INTO ARSENAL
VALUES(100,'은케티아',14,101,'아스널 공격수','축신',1400000);
COMMIT;

위 코드에서 INSERT 키워드를 사용하여 데이터를 입력하고 COMMIT 을 통하여 트랜잭션을 완료하고 데이터베이스에 추가한 정보가 반영된 것을 알 수 있다.

3. ROLLBACK

ROLLBACK 은 문제가 발생한 트랜잭션을 취소하기 위한 명령어다. 데이터베이스가 비정상적으로 종료된다면 자동으로 ROLLBACK 된다.

ROLLBACK 예제

UPDATE COACH
	SET COACH_NAME = "아르테타"
WHERE COACH_NAME = "뱅거";
ROLLBACK;

위 코드에서는 UPDATE 문장으로 COACH 테이블에서 COACH_NAME이 '뱅거' 라면 '아르테타'로 수정한다. 그리고 ROLLBACK 명령어를 통해 UPDATE 문장이 데이터베이스에 반영되지 않게 함.

4. SAVEPOINT

SAVEPOINT 는 하나의 트랜잭션을 작게 분할하여 저장하는 명령어다. 하나의 트랜잭션에는 여러개의 SQVEPOINT 지정이 가능하다. 다음 예제를 통해 더 알아보자.

SAVEPOINT 예제

SAVEPOINT SP1;
INSERT INTO MEMBERS VALUES(
	102, '트로사르', 19, 101,
    '최소 아자르', 'FW', 999999
);
SAVEPOINT SP2;
UPDATE MEMBERS
	SET MEMBER_NAME = '외데고르'
WHERE MEMBER_NAME = '외질';
ROLLBACK TO SP2;

다음 코드에서 알 수 있는 동작은 먼저 저장점 SP1을 지정 후 INSERT 문으로 데이터를 입력했다. 그 다음 저장점 SP2 를 지정한 뒤 UPDATE 문으로 MEMBER_NAME을 '외질' 에서 '외데고르'로 수정했다. 그 다음 ROLLBACK 명령어로 SP2 지점까지 롤백했다.

4. SQL 구문과 그 순서

SQL 구문의 종류는 다음과 같다.

구문설명
FROM테이블 고르기
WHERE테이블에 주어진 조건
GROUP BY공통적인 데이터들끼리 그룹 묶기
HAVING주어진 조건에 맞는 그룹들을 추출
SELECT최종적으로 추출된 데이터 조회
ORDER BY추출된 데이터 정렬

SQL 구문의 작성/실행 순서는 다음 코드에서 확인할 수 있다.

SELECT 컬럼명		//5
FROM 테이블명		//1
WHERE 테이블 조건	//2
GROUP BY 컬럼명	//3
HAVING 그룹조건	//4
ORDER BY 컬럼명	//6

오늘은 SQL의 3가지 종류 DML, DCL, TCL 에 대하여 알아보았다.
(사실 내일 SQLD 시험이라 마지막 정리 느낌으로 했는데 붙었으면...)

post-custom-banner

0개의 댓글