본문 바로가기

SQL

SQL 주요 개념 정리

-전부 정리된 건 아님. 공부하면서 추가/수정중

- 코드에서 [ ] 표기는 선택적으로 들어가는 부분, | 표기는 OR의 의미로 쓰임.

SQL (Structured Query Language)

: 관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 만들어진 프로그래밍 언어.


<SQL 기본>

문법 종류와 주요 명령어

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

: DB의 구조를 정의함. 

  • CREATE : 테이블 생성
  • ALTER : 테이블 수정
  • DROP : 테이블 삭제 (테이블 구조까지 아예 삭제됨, 롤백 불가)
  • TRUNCATE : 테이블의 모든 행 삭제 (테이블 구조는 그대로, 데이터만 삭제)

 

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

: DB의 레코드를 조작해 조회, 삽입, 수정, 삭제함.

  • SELECT : 데이터 조회
1
2
3
4
5
6
SELECT 속성명
FROM 릴레이션
[WHERE 조건]
[GROUP BY 속성명]
[HAVING 그룹조건]
[ORDER BY 속성 [ASC | DESC] ];
cs
  • INSERT : 데이터 삽입
1
2
INSERT INTO 릴레이션(속성명)
VALUES(데이터)
cs
  • DELETE : 데이터 삭제 (롤백 가능)
1
2
DELETE FROM 릴레이션
[WHERE 조건]; --WHERE이 생략되면 해당 릴레이션 내 모든 튜플 삭제
cs
  • UPDATE : 데이터 수정
1
2
3
UPDATE 릴레이션
SET 속성명 = 데이터
[WHERE 조건]; --WHERE절 생략되면 해당 릴레이션 내 모든 튜플 수정
cs

 

 

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

: DB의 접근권한 및 트랜잭션을 제어함.

  • GRANT : 권한을 부여
1
2
GRANT 권한 ON 테이블 TO 사용자
[WITH GRANT OPTION]; --다른 사람과 권한을 나눠가질 수 있는 옵션
cs
  • REVOKE : 권한을 회수
1
2
REVOKE 권한 ON 테이블 FROM 사용자
[CASCADE CONTRAINTS]; --연쇄적인 권한 해제(WITH GRANT OPTION으로 부여된 것까지 취소)
cs

 


<SQL 응용>

프로시저, 사용자 정의함수, 트리거

프로시저

: SQL을 활용해 특정한 기능을 수행하는 트랜잭션 언어. 

: 프로시저 호출을 통해 실행됨. (EXECUTE 문 사용)

: 선언부, 시작/종료부, 제어부, 예외부, 실행부로 구성

 

1. 선언부

: 프로시저 이름, 변수 이름과 타입 선언

1
2
3
4
CRATE PROCEDURE 프로시저_이름
(파라미터_이름 모드 데이터_타입 ...)
IS
변수 선언
cs
  • CREATE 대신 CREATE OR REPLACE을 사용하면 해당 이름의 프로시저가 존재할 시 덮어씌움. 
  • 모드 종류 
    • IS : OS에서 프로시저로 값 전달하는 모드
    • OUT : 프로시저에서 처리된 결과를 OS로 전달하는 모드
    • INOUT : IN과 OUT의 두 기능을 동시에 수행하는 모드
  • IS는 AS로 쓸 수도 있음. 

2. 시작/종료부

: 프로시저 본문의 시작과 종료를 나타내는 블록

: BEGIN ~ END

 

3. 제어부

: 제어문이나 반복문 등을 통해 실행흐름을 제어함. 

 

4. SQL

: 데이터 조작 (조회, 생성, 변경, 삭제) 가능

 

5. 예외부

: 실행 중 생길 수 있는 예외 상황을 처리함.

1
2
3
EXCEPTION
    WHEN 조건 THEN
    SET 명령어;
cs

 

6. 실행부

: 프로시저에서 수행한 내용을 DBMS에 반영할지 여부를 결정함

  • COMMIT : 트랜잭션 결과를 DBMS에 반영.
  • ROLLBACK : 트랜잭션을 처음부터 다시 시작하거나, 부분적으로 연산을 취소함.

 

<프로시저 전체 구성 요약 >

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CREATE PROCEDURE 프로시저_이름
(입력받을_파라미터_이름 IN 데이터_타입)
IS
변수_이름 데이터_타입
  BEGIN 
  
    IF 조건1
    THEN 
        실행_내용
    ELSEIF 조건2
    THEN
        실행_내용
    END IF
    
    EXCEPTION
    WHEN 예외조건 THEN 
    SET 예외처리_내용
    
  COMMIT; --종료시 트랜잭션을 DBMS에 반영
  END; 
cs

 

사용자 정의함수

: 사용자가 직접 정의하고 작성하는 함수. 기본적인 것은 프로시저와 같으나 리턴값이 있음.

: 선언부, 시작/종료부, 제어부, SQL, 예외부, 반환부로 구성

 

1. 선언부

 

2. 시작/종료부

: 함수 본문의 시작과 종료를 나타내는 블록

: BEGIN ~ END

 

3. 제어부

: 제어문이나 반복문 등을 통해 실행흐름을 제어함. 

 

4. SQL 

: SELECT만 가능

 

5. 예외부

: 실행 중 생길 수 있는 예외 상황을 처리함.

 

6. 반환부

: RETURN 명령을 통해 반환할 단일 값을 정의

 

<사용자 정의 함수 전체 구성 요약 >

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE PROCEDURE 프로시저_이름
(입력받을_파라미터_이름 IN 데이터_타입)
IS
변수_이름 데이터_타입
  
  BEGIN 
    IF 조건1
    THEN 
        실행_내용
    ELSEIF 조건2
    THEN
       실행_내용
    END IF
    
  RETURN 리턴값;
  END; 
cs

 

 

트리거

: 특정한 이벤트(테이블 삽입, 수정 삭제 등) 발생 시 자동적으로 실행되도록 만든 프로그램.

: 트리거의 종류

  • 행 트리거 - 데이터 변화가 생길 때마다 실행됨
  • 문장 트리거 - 단 한 번만 실행됨

: 트리거 내에 COMMIT, ROLLBACK같은 트랜잭션 제어어(TCL)는 사용불가

: 선언부, 이벤트부, 시작/종료부, 제어부, SQL, 예외부로 구성됨. 

 

 

1. 선언부 

: 트리거의 이름, 변수 및 상수, 타입 선언

1
2
CREATE TRIGGER 트리거이름 -- 새 트리거 생성
CREATE OR REPLACE TRIGGER 트리거이름 -- 기존 트리거 존재 시 덮어씀
cs

 

2. 이벤트부
: 트리거가 실행되는 이벤트 조건을 명시. 

: BEFORE과 AFTER가 있다.

1
2
BEFORE ON 테이블이름 -- 이벤트 발생 전 트리거가 실행됨
AFTER ON 테이블이름 -- 이벤트 발생 후 트리거가 실행됨
cs

3. 시작/종료부

: 트리거 본문의 시작과 종료를 나타내는 블록

: BEGIN ~ END

 

4. 제어부

: 제어문이나 반복문 등을 통해 실행흐름을 제어함. 

 

5. SQL

: 데이터 조작(SELECT, INSERT, DELETE, UPDAT)을 주로 수행

 

6. 예외부

: 실행 중 생길 수 있는 예외 상황을 처리함. 

 

<트리거 전체 구성 요약 >

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE TRIGGER 트리거이름
 
  AFTER UPDATE OR DELETE -- 테이블에 수정/삭제가 발생한 후 트리거가 실행됨
  ON 테이블이름
  FOR EACH ROW 
  DECLARE
      --변수 선언
  BEGIN 
    IF UPDATING
    THEN 
        --테이블에 수정 발생시 실행할 내용
    ELSEIF DELETING
    THEN
        --\\테이블에 삭제발생 시 실행할 내용
    END IF
  END; --종료
cs

 


데이터 분석 함수

: 데이터 분석을 목적으로 하는 다중 행 함수. 대개 GROUP BY 구문을 활용해 여러 행을 그룹핑한다.

: SELECT, HAVING, ORDER BY 등의 구문에 활용함.

: 종류로는 집계함수, 그룹 함수, 윈도 함수가 있다.

 

집계함수

: 여러 행으로부터 하나의 결괏값을 반환하는 함수

  • COUNT - 라인 갯수
  • SUM - 합계
  • AVG - 평균
  • MAX - 최댓값
  • MIN - 최솟값
  • STDDEV - 표준편차
  • VARIAN - 분산

 

그룹 함수

: 그룹별로 결과를 출력하는 함수

  • ROLLUP - 지정된 컬럼의 중간 집계 값을 산출
  • CUBE - 결합 가능한 모든 값에 대한 다차원 집계를 생성
  • GROUPING SETS - 대상 컬럼들의 개별 집계를 구함. (컬럼 간 순서 무관)

 

윈도 함수 (=OLAP 함수, OnLine Analytical Processing)

: DB를 사용한 온라인 분석 처리 용도로 사용

: 순위 함수, 행순서 함수, 그룹 내 비율 함수가 있다.

 

1. 순위 함수

: 컬럼에 대한 순위를 구하는 함수

  • RANK - 동일 순위 레코드 있을 때, 후순위는 넘어감 (EX. 1, 2, 2, 4, 5)
  • DENSE_RANK - 동일 순위 레코드 있을 때, 후순위 넘어가지 않음 (EX. 1, 2, 2, 3, 4)
  • ROW_NUMBER - 동일 순위 레코드 상관 없이 연속 번호 부여 (EX. 1, 2, 3, 4, 5)

2. 행순서 함수

: 파티션별 윈도에서 행의 순서를 다루는 함수

  • FIRST_VALUE - 가장 먼저 나오는 값을 찾음
  • LAST_VALUE - 가장 늦게 나오는 값을 찾음
  • LAG - 이전 행의 값을 반환
  • LEAD - 다음 행의 값을 반환

3. 그룹 내 비율 함수

: 해당하는 그룹 내에서 각 행의 비율을 구하는 함수

  • RATIO_TO_REPORT - 0~1의 범위 내에서 각 행의 상대적 비율을 반환
  • PERCENT_RANK - 제일 먼저 나오는 것을 0, 제일 늦게 나오는 것을 1로 하여 각 행의 순서별 백분율을 구함

 


참고한 자료: 수제비 정보처리기사 2020, 데이터베이스 배움터