실습 : 초보자를 위한 DB2 SQL 사용 가이드

최시열·2023년 3월 30일
0

Unit 1

TOPIC 01 RDBMS 개요

RDBMS

  • 데이터 베이스 관리 시스템

  • Relational DataBase Management System

Table

  • 데이터베이스에서 데이터를 이차원의 표 형식으로 관리하는 것.

Column

  • 개체의 고유한 특성

  • 컬럼, 열, 필드

Row

  • 각 컬럼에 어떤 값을 대응 시킨 한 건의 데이터

  • 로우, 행, 레코드

Primary Key 기본키(PK)

  • table의 각 row를 고유하게 식별할 수 있게 하는 한 개 이상의 column들.

  • 한 테이블에 한 개만 정의 가능

Unique Key 고유키(UK)

  • table의 각 row가 고유한 값을 가지는 column

  • 한 테이블에 여러 개 정의 가능

Foreign Key 외래키(FK)

다른 table의 기본키 또는 고유키를 참조하는 column들

외래키에 지정되는 값은 항상 참조하는 column에 존재하는 값

Check Constraint 검사규정(CC)

  • 특정 컬럼에 들어갈 수 있는 값을 제한하거나, 서로 다른 column의 값들 간의 상관 관계 규정

참조무결성

  • 외래키에 있는 값이 참조하는 기본키 column에 항상 존재하는 값이어야 한다는 것.

TOPIC 02 SQL 개요


SQL Structured Query Language 구조적 질의 언어

  • RDBMS의 데이터를 관리하기 위해 사용하는 데이터 언어

  • 기본적인 영어 구문의 형식을 이용하여 사용자가 원하는 작업을 표현

  • 비절차적인 언어 : 원하는 작업은 지정하지만 방법이나 절차는 지정하지 않음

DDL Data Definition Language 데이터 정의 언어

  • table을 비롯한 database 객체를 정의하는 SQL문

  • CREATE : 데이터베이스 객체 생성

  • ALTER : 데이터베이스 객체의 특성 변경

  • DROP : 데이터베이스 객체 제거

DML Data Manipulation Language 데이터 조작 언어

  • table의 데이터를 조작하는 SQL문

  • SELECT : 테이블의 데이터를 조회

    • SELECT는 데이터를 변경시키지 않으므로 데이터 쿼리 언어로 분류하기도 한다.
  • INSERT : 테이블에 데이터를 추가

  • UPDATE : 테이블의 데이터를 변경

  • DELETE : 테이블의 데이터를 삭제

DCL Data Control Language 데이터 제어 언어

  • 사용자의 데이터 접근을 제어하고, 사용자가 실행하는 transaction을 제어하는 SQL문

    • Transaction : 여러 개의 SQL문을 묶어서 한 개의 작업 단위로 처리하는 것
  • 권한 제어

    • GRANT : 데이터베이스 객체에 대한 권한을 부여
    • REVOKE : 데이터베이스 객체에 대한 권한을 회수
  • 접속 제어

    • CONNECT : 데이터베이스에 접속하거나, 데이터베이스의 접속을 해제
  • 트랜잭션 제어

    • SAVEPOINT : 세이브 포인트를 설정
    • RELEASE SAVEPOINT : 세이브 포인트를 해제
    • COMMIT : 트랜잭션을 확정
    • ROLLBACK : 트랜잭션을 취소

SQL의 구성 요소

  • 절 (Clause)

    • 키워드를 기준으로 구분되는 한 부분
    • 한 개의 절은 SQL 키워드, 테이블명, 컬럼명, 수식, 술어 등으로 구성
  • 수식, 필드 (Expression)

    • 컬럼, 상수, 연산자, SQL 함수 등으로 구성되는 연산 식
    • 수식에 컬럼의 실제 값을 대입하여 나온 결과를 필드의 값이라고 표현
  • 술어, 조건 (Predicate)

    • 컬럼, 상수, 연산자, SQL 함수, 수식 등으로 구성되어 “~이 ~하다” 라는 형식으로 서술되는 조건식
    • 술어에 컬럼의 실제 값을 대입해서 조건식이 성립되면, 해당 로우는 조건을 만족한다고 표현
# 테이블 KES.EMPL의 데이터를 조회하는 문장

SELECT ENAME SALARY * 1.2     # SELECT절     # ENAME : 컬럼명     # SQLARY * 1.2 : 수식
FROM KES.EMPL     # FROM절    # KES.EMPL : 테이블 명
WHERE COMM >= 10    # WHERE절    # COMM >= 10 : 술어

SQL문 작성 방법

  • 키워드 구분자 : 한 개 이상의 공백, 탭, 개행 문자로 키워드를 구분

  • 항목 구분자 : ,로 동일 수준의 항목들을 구분

  • 문장 구분자 : ;으로 SQL문을 구분

  • 키워드, 테이블명, 컬럼명 : 대소문자를 구분하지 않고 지정

  • 연산자 : 두 글자 이상의 연산자는 분리하지 말고 한 단어로 표시

  • 숫자 상수 : 0 ~ 9, +, -, 소수점, E 기호 사용

  • 문자 상수 : 작은 따옴표 안에 문자열 지정, 지정된 문자열은 대소문자 구분, 공백, 탭 등도 유효

  • 날짜 상수 : 한국 기준 'YYYY-MM-DD', 시간은 'HH-MM-SS' 형식으로 지정

  • 주석문 : /**/ 사이에 지정 한 줄 주석은 --

테이블명 지정 방법

  • 완전 테이블명 지정이 원칙

  • 스키마명 . 테이블명

  • 스키마명테이블명은 대소문자 구분하지 않음

  • 테이블명만 지정할 경우 스키마명.은 생략된 것으로 해석

    • 이 때 스키마명
      1. CURRENT_SCHEMA라는 시스템 변수에 설정된 기본 스키마명
      2. 데이터베이스에 접속한 사용자 ID가 기본 스키마명
  • 해석되는 테이블명이 데이터베이스에 없으면 오류 발생

테이블의 별명 지정 방법

  • 테이블명 바로 뒤에 한 칸 이상의 공백 문자로 구분하여 지정

  • 대소문자 구분 없음

  • 짧은 것이 좋음

컬럼명 지정 방법

  • 완전 컬럼명 지정이 원칙

  • 스키마명 . 테이블명 . 컬럼명

  • 대소문자 구분 없음

  • 컬럼명은 테이블 내에서 고유해야 함

  • SQL문에 한 개의 테이블만 있다면 단순히 컬럼명만 지정해도 된다

  • 여러 개의 테이블이 있는 경우에도 컬럼명만으로 구분이 된다면 컬럼명만 지정 가능

  • 별명이 있는 경우 별명.컬럼명 형식으로 지정하거나 단순히 컬럼명으로 지정해야 함

데이터 지정 방법

  • 저장되는 데이터의 유형은 숫자형, 문자형, 날짜형

NULL

  • 컬럼에 지정할 데이터가 없을 때 값이 없음을 의미하는 NULL

  • 숫자형, 문자형, 날짜형 데이터의 초기값이 아님

  • 다른 값 또는 다른 NULL과 동등 비교 또는 대소 비교 불가능

  • 어떤 컬럼에 NULL을 지정하도록 허용할 것인지는 테이블을 정의할 때 결정 가능

NULL != ''   # 길이가 0인 문자열
		 != ' '  # 공백 문자
		 != 0    # 숫자 0
		 != NULL # 다른 NULL

쿼리와 결과 집합

  • 쿼리 : 사용자가 SQL문을 이용하여 RDBMS에게 보내는 모든 요청

    • SELECT문으로 데이터의 조회 요청하는 의미로 많이 씀
  • 결과 집합(결과 테이블) : 쿼리의 실행 결과로 반환 되는 row의 집합

SQLCA SQL Communication Area SQL 통신 영역

  • DBMS가 사용자에게 SQL문의 실행에 대한 정보를 전달하기 위해 사용하는 구조체

  • 사용자가 SQL문의 실행을 요청하면, DBMS는 요청된 SQL문을 실행하고, 해당 SQL문의 성공 여부에 대한 정보를 SQLCA의 각 필드에 저장하여 사용자에게 반환

  • SQL문이 실패했다면, SQLCODESQLSTATE를 이용해 SQL문의 실패 원인 파악 가능

  • ex)

# 오류 메시지
SQL0407N NOT NULL 컬럼 # SQLCODE : SQL 다음에 숫자가 오고 N은 Negative의 약자
TBSQPCEID=3, TABLEID=26,
COLNO-1"에 널(NULL) 값을
지정할 수 없습니다.
SQLSTATE=23502 # SQLSTATE : SQLSTATE= 다음에 5개의 문자로 표시
profile
최시열

0개의 댓글