Database

[ SQLD 이론 심화] Chapter 03. SQL 기본

noahkim_ 2021. 7. 29. 15:38

1. 관계형 데이터베이스 개요

정규화를 통한 합리적인 테이블 모델링을 통해 이상현상을 제거하고 데이터 중복을 피할 수 있으며, 동시성 관리, 병행 제어를 통해
많은 사용자들이 동시에 데이터를 공유 및 조작 가능한 기능 제공
인증된 사용자만이 참조할 수 있도록 보안 기능을 제공함
데이터 무결성 제공
장애로부터 기존 데이터에 대한 작업이 제대로 반영될 수 있도록 보장해주며, 재해 등의 상황에서도 데이터를 회복/복구하는 기능을 제공

 

2. SQL

  • DML
    데이터 조작어 ( 조회, 수정, 삽입, 삭제 )
    Select, Insert, Update, Delete

  • DDL
    데이터 정의어 (테이블 구조 생성, 변경, 삭제)
    Create, Alter, Drop, Rename

  • DCL
    데이터 제어어 (데이터 베이스에 객체들을 사용하도록 권한을 부여 및 회수)
    Grant, Revoke

  • TCL
    트랜잭션 제어어(논리적인 작업 단위를 묶어서 DML에 의 해 조작된 결과를 작업단위 별로 적용 및 취소하는 명령어)
    Commit, Rollback

3. 테이블

칼럼과 행의 2차원 구조로 나타냄

 

4. DDL

  • 주요 데이터 유형
    Char(L) : 고정 길이 문자열. 할당된 문자열이 L값보다 작으면 공백으로 채워짐
    Varchar2(L) : 가변 길이 문자열. L 만큼의 최대 길이를 가짐
    Number(L, D) : 정수, 실수를 저장. L은 전체 자리 수. D값은 소수점 자리 수
    Date : 날짜와 시각 정보

  • 제약조건
    사용자가 원하는 조건의 데이터만 유지하기 생성함
    무결성을 유지하기 위한 방법으로 특정 칼럼에 설정하는 제약

    기본키, Not Null, 외래키
    고유키(고유하기 식별하기 위해 생성. Null 가능), Check(입력할 수 있는 값 종류 및 범위 제한)

  • Alter Table
    칼럼을 추가/삭제하거나 제약조건 추가/삭제하는 작업

  • Rename Table
    테이블 명 변경 가능

  • Truncate table 
    테이블의 데이터 비우기. TRUNCATE 명령 수행 시 삭제한 데이터를 ROLLBACK이 불가능함

  • Drop Table
    테이블 제거

 

5. DML

Insert, Update, Delete, Select (Distinct)
Alias(AS) 지정 가능

합성 연산자("||")를 이용한 문자열 연결 가능

DUAL 테이블을 이용한 연산 수행

 

6. TCL

  • Commit
    트랜잭션을 완료할 수 있음
    이전에는 버퍼에만 영향을 받으므로 DB에는 적용 안됨
    커밋 수행 시 관련된 행에 대한 잠금이 풀리고, 다른 사용자들이 행 조작 가능

  • Rollback 
    Commit 이전에는 변경 사항을 취소 가능
    데이터 변경 사항이 취소되어 데이터의 이전 상태로 복구되며, 관련된 행에 대한 잠금이 풀리고 다른 사용자들이 데이터 변경 가능

  • Save Point
    저장점을 정의하면 롤백 시 현시점에서 SAVEPOINT까지 트랜잭션의 일부만 롤백 할 수 있다.

무결성을 보장하는 것이 커밋과 롤백의 목적

DDL문장 실행 시 전후 시점에 자동으로 커밋됨

데이터베이스를 정상적으로 종료하면 자동으로 트랜잭션이 커밋됨

애플리케이션이 이상 종료로 데이터베이스와의 접속이 단절되었을 때는 트랜잭션이 자동으로 롤백됨

 

7. WHERE 절

자신이 원하는 자료만을 검색할 때 쓰임

  • SQL 연산자
    BETWEEN A AND B
    IN : 리스트에 있는 값중 하나라도 있으면 됨
    LIKE '비교문자열' : 비교문자열의 형태와 일치하면 됨 (와일드카드 사용)
    IS NULL : NULL 값인지 확인

  • 와일드카드
    % : 0개 이상의 어떤 문자를 의미
    _ : 1개인 단일 문자를 의미

  • 논리 연산자
    AND, OR, NOT

  • 부정비교연산자
    !=, <>, ^=, NOT 칼럼명 =  : 같지 않음
    NOT 칼럼명 > : -보다 크지 않다

  • 부정 SQL 연산자 
    NOT BETWEEN A AND B : A와 B값 사이에 있지 않음
    NOT IN
    IS NOT NULL

8. 함수

SELECT, WHERE, ORDER BY 절에 사용 가능
각 행들에 대해 개별적으로 작용. 각각의 행에 대한 조작 결과를 리턴함

단 하나의 결과만 리턴함.

함수의 중첩이 가능

 

  • 단일 행 함수의 종류
    문자형 함수 : LOWER, UPPER, SUBSTR, LENGTH ....
    숫자형 함수 : ABS, MOD, ROUND, TRUNC, SIGN, CEIL
    날짜형 함수 : SYSDATE, EXTRACT
    변환형 함수 : TO_NUMBER, TO_CHAR, TO_DATE
    NULL 관련 함수 : NVL, NULLIF, COALESE


    - NVL(1, 2) : 1이 NULL이면 2 출력. 1이 NULL이 아니라면 1 그대로 출력
    - NULLIF(1, 2) : 1과 2가 같으면 NULL 출력
    - COALESCE(1, 2, ....) : NULL이 아닌 첫번쨰 수식/값을 리턴함

9. GROUP BY, HAVING 절

  • 집계함수
    여러 행들의 그룹이 모여서 그룹당 단 하나의 결과를 돌려주는 함수
    GROUP BY 절은 행들을 소 그룹화 함
    SELECT, HAVING, ORDER BY절에서 사용 가능

  • ALL과 DISTINCT
    DISTINCT : 유일한 값을 출력

  • 집계함수의 종류
    COUNT(*) : NULL 값을 포함한 행의 수 출력
    COUNT(표현식) : 표현식의 값이 NULL아닌 행의 수 출력
    SUM(표현식) : 표현식이 NULL값인 것을 제외한 합계를 출력
    AVG(표현식) : 표현식이 NULL값인 것을 제외한 평균
    MAX(표현식) : 표현식이 NULL값인 것을 제외한 최대값
    MIN(표현식) : 표현식이 NULL값인 것을 제외한 최소값
    STDDEV(표현식) : 표현식이 NULL값인 것을 제외한 표준편차
    VARIAN(표현식) : 표현식이 NULL값인 것을 제외한 분산

  • GROUP BY 절 
    소그릅 별 기준을 정한 후, SELECT절에 집계 함수를 사용함
    ALIAS 명 사용 불가
    집계함수는 WHERE절에는 올 수 없음
    HAVING절은 GROUP BY 절의 기준 항목이나 소그릅의 집계함수를 이용한 조건을 표시할 수 있음

  • HAVING 절
    집계된 결과 집합을 기준으로 특정 조건을 주고 싶은 경우 HAVING절을 이용하면 됨

10. ORDER BY 절

특정 칼럼을 기준으로 정렬하여 출력하는데 사용
칼럼 명 대신에 SELECT절에서 사용한 ALIAS 명이나 칼럼순서를 나타내는 정수도 사용 가능

기본적으로 오름차순이며, SQL문장의 맨 마지막에 위치함 (맨 마지막에 실행됨)

오라클은 NULL값이 제일 크다고 인식함

 

11. 조인

두 개 이상의 테이블들을 연결 또는 결합하여 데이터를 출력하는 것

일반적으로 PRIMARY KEY와 FOREIGN KEY의 값 연관에 의해 조인이 이루어지며 PK, FK관계와는 별도로 일반 칼럼 끼리 조인이 이루어지는 경우도 있음.