Database 기초 및 SQL
데이터베이스(Database)란
여러 사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데이터의 집합으로, 작성된 목록으로써 여러 응용 시스템들의 통합된 정보들을 저장하여 운영할 수 있는 공용 데이터들의 묶음이다.
데이터베이스 관리 시스템(DBMS, Database Management System)
다수의 사용자들이 데이베이스 내의 데이터를 접근할 수 있도록 관리해주는 소프트웨어(미들웨어)
ex) Oracle, Mysql, MS_SQL, Postgresql 등
데이터베이스 특징
- 실시간 접근성 - 비정형적인 질의에 대해 실시간 처리에 의한 응답이 가능
- 계속적인 변화 - 데이터의 삽입, 삭제, 갱신으로 항상 최신 데이터 유지
- 동시 공용 - 다수의 사용자가 동시에 같은 내용의 데이터 접근
- 내용에 의한 참조 - 주소나 위치가 아닌 데이터 내용으로 찾음
데이터베이스 용어
- Tuple(튜플) : 행을 의미하며, 같은 말로는 Record, Row라고 함
- Cardinality : 튜플의 수
- Attribute(어트리뷰트) : 열을 의미하며, Column이라고 함
- Degree : 어트리뷰트의 수
Schema(스키마)
- DB의 구조와 제약 조건에 관한 전반적인 병세를 기술한 메타데이터의 집합
- Entity, Attribute, Relationship 및 데이터 조작시 데이터 값들이 갖는 제약 조건 등에 관한 전반적 정의
- 외부 스키마, 개념 스키마, 내부 스키마로 나뉨
- 외부 스키마 = 서브 스키마 = 사용자 View
- 외부 스키마는 사용자 입장에서 필요로 하는 DB의 논리적 구조 정의
- 개념 스키마
- 개체간의 관계와 제약 조건을 나타내고 DB 접근 권한, 보안 및 무결성 규칙에 관한 명세 정의
- 내부 스키마
- 물리적 저장장치에서 본 DB 구조
- 외부 스키마 = 서브 스키마 = 사용자 View
Transaction(트랜잭션)
- 데이터베이스의 상태를 변환 시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위
- 장애시 데이터를 복구하는 작업의 단위
- 작업을 서로 분리하는 단위
- all or nothing - 전체가 수행되거나 전혀 수행되지 않아야 한다.
트랜잭션의 성질
- 원자성(Atomicity) - all or nothing
- 일관성(Consistency) - 수행하기 전이나 수행한 후나 일관된 상태 유지
- 독립성(Isolation) - 수행중인 트랜잭션에 다른 트랜잭션이 끼어들어 데이터를 훼손하지 말아야 한다.
- 영속성(지속성)(Durability) - 수행이 완료된 트랜잭션은 영구 저장해야 한다.
SQL(Structured Query Language)
- 비절차적 언어(선언적 언어)
- 자신이 원하는 바(what)만 명시하며, 원하는 것을 처리하는 방법(how)은 명시할 수 없음
- 자연어에 가까운 구문을 사용하여 질의를 표현할 수 있음
SQL의 구성요소
-
데이터 정의어(Data Definition Language:DDL)
- 데이터 정의어 란? 데이터베이스를 정의하는 언어이며, 데이터를 생성, 수정, 삭제하는 등의 데이터의 전체의 골격을 결정하는 역할을 하는 언어
- CREATE
- DOMAIN, TABLE, VIEW, INDEX
- ALTER
- TABLE
- ADD () PRIMARY KEY
- DROP
- TABLE
- DROP
- DOMAIN, TABLE, VIEW, INDEX
-
데이터 조작어(Data Manipulation Language:DML)
- 정의된 데이터베이스에 입력된 레코드를 조회하거나 수정하거나 삭제하는 등의 역할을 하는 언어
- UPDATE
UPDATE DEPARTMENT SET FLOOR = 10 WHERE DEPTNO = 1;
- DELETE
DELETE FROM DEPARTMENT WHERE DEPTNAME = 총무;
- INSERT
INSERT INTO DEPARTMENT VALUES(5, '연구', 9);
- SELECT
- RDB에서 정보를 검색하는 SQL문으로 가장 많이 사용 됨
- 별칭(alias) - 서로 다른 릴레이션에 동이한 이름을 가진 attribute가 있을 때 구분하는 방법, as로 사용됨
- DISTINCT - 중복 제거
- %를 사용한 문자 비교
- 연산자 우선순위
- 비교 연산자 = > NOT > AND > OR
attr BETWEEN A AND B
== A ≤ attr ≤ B- IN - 리스트를 사용한 검색
- 산술 연산자(+, -, *, /) 가능
- NULL 비교는
attr = NULL
이 아닌attr IS NULL
,attr IS NOT NULL
- count(), max(), min(), avg(), sum()
- 통계함수와 함께 where절을 사용할 시 where조건을 먼저 실행 한 후의 통계값을 추출한다.
- Group by .. Having
- 만들어진 그룹에 대해 조건을 줄 경우 사용
- SELECT는 AVG, MAX 등의 조건을 주지 못함
- IN - 한 attribute가 집합에 속하는 가
- EXISTS - 한 attribute가 집합에 속하는 가
- IN과 EXISTS의 비교는 EXISTS는 ROW를 체크하고 return하지만, IN은 값까지 비교한다.
- ANY - 한 attribute가 집합에 속하는 하나 이상의 값들과 관계를 갖는가
- ALL - 한 attribute가 집합에 속하는 모든 값들과 관계를 갖는가
#--- 사용 예제 SELECT [DISTINCT] attr1, attr2, ... FROM RELATIONS [WHERE 조건] [GROUP BY attr1] [HAVING 조건] [ORDER BY attr1] #--- SELECT DEPTNAME, FLOOR FROM DEPARTMENT AS D, EMPLOYEE AS E WHERE DEPTNO = 1 OR DEPOTNO = 3; #--- %를 이용한 문자열 비교 SELECT EMPNAME, TITLE, DNO FROM EMPLOYEE WHERE EMPNAME LIKE '%이%'; #--- IN을 이용한 검색 SELECT * FROM EMPLOYEE WHERE DNO IN (1, 3); #--- 산술 연산자를 이용한 검색 SELECT EMPNAME, SALARY, SALARY * 1.1 AS NEWSALARY FROM EMPLOYEE WHERE TITLE = '과장';
-
데이터 제어어(DCL)
Query 실행순서
- FROM
- ON
- JOIN
- WHERE
- GROUP BY
- HAVING
- SELECT
- DISTINCT
- ORDER BY
- TOP
데이터 타입
제약조건
-
기본키(PRIMARY KEY) 제약조건
-
외래키(FOREIGN KEY) 제약조건
-
ON UPDATE CASCADE
상위 테이블에서 primary 값이 수정될 경우, 하위 테이블의 reference값은 변경된 상위 테이블의 수정된 값을 가지면서 참조 무결성을 유지합니다. -
ON DELETE CASCADE
상위 테이블에서 primary 값이 삭제될 경우, 하위 테이블의 reference값은 삭제되면서 참조 무결성을 유지합니다.
-
-
UNIQUE 제약조건
-
CHECK 제약조건
-
DEFAULT 정의
SELECT - JOIN
- 조인은 두 개 이상의 릴레이션으로부터 연관된 튜플들을 결합
- FROM 절에 두 개 이상의 릴레이션들이 열거되고 조건이 WHERE절에 표현 됨
SELECT - 중첩 질의
- WHERE절에 다시 SELECT … FROM … WHERE 형태로 포함된 SELECT 문
- subquery(부질의)라고 함
- INSERT, DELETE, UPDATE에도 사용 됨
SELECT *
FROM (SELECT * FROM products ORDER BY no DESC) as A
WHERE A.no <= 3;
---
SELECT *
FROM EMPLOYEE E
WHERE DNO IN (
SELECT DEPTNO
FROM DEPARTMENT
WHERE DEPTNAME = '영업' OR DEPTNAME = '개발'
)
Trigger
- 명시된 이벤트가 발생할 때마다 DBMS가 자동적으로 수행하는, 사용자가 정의하는 프로시저
- ECA(Event-Condition-Action)이라고 함
- 트리거를 명시하려면 트리거를 활성화시키는 사건인 이벤트, 트리거가 활성화되었을 때 수행되는 테스트인 조건, 트리거가 활성화되고 조건이 참일 때 수행되는 프로시저를 표현
CREATE TRIGGER <TRIGGER_NAME>
AFTER <트리거 유발하는 이벤트
ON <릴레이션>
[WHERE <조건>]
BEGIN <SQL문(들)> END
---
CREATE TRIGGER RAISE_SALARY
ON EMPLOYEE
FOR INSERT
AS
UPDATE EMPLOYEE
SET SALARY = SALARY * 1.1
WHERE SALARY < 1500000;