[데이터베이스]
: 조직에 필요한 정보를 얻기 위해 논리적으로 연관된 데이터를 모아 구조적으로 통합해 놓은 것.
운영(조직의 목적을 위해 사용) 데이터를 통합(데이터중복을 최소화)하여 저장하며 공용으로 사용한다.
- 데이터 : 관찰의 결과로 나타난 실제 값.
- 정보 : 데이터에 의미를 부여한 것.
*데이터베이스의 특징
- 실시간 접근성(real time accessibility) : 사용자의 데이터 요구에 실시간으로 서비스 제공
- 계속적인 변화(continuous change) : 데이터의 계속적인 삽입, 삭제, 수정을 통해 현재의 정확한 데이터를 유지
- 동시 공유(concurrent sharing) : 서로 다른 업무 또는 여러 사용자에게 동시에 공유, 서로 다른 데이터 뿐 아니라 같은 데이터의 동시 사용도 지원.
- 내용에 따른 참조(reference by content) : 데이터의 물리적인 위치가 아니라 데이터 값에 따라 참조
*데이터베이스 시스템의 구성
데이터베이스 / 데이터베이스 관리시스템 / 데이터모델(데이터 저장 기법) / 사용자 / 데이터 언어(SQL)
*DBMS의 등장배경 (파일 시스템의 문제점)
응용 프로그램이 데이터 파일에 종속적인 데이터 종속성 때문에 파일의 구조를 변경하면 응용 프로그램도 함께 변경해야하는 문제점 때문에 데이터파일에 대한 동시공유, 보안, 회복 기능이 부족하다. 또한 중복 데이터가 저장되는 데이터 중복성 때문에 데이터 무결성을 유지하기 어렵다.
*DBMS의 정의
데이터베이스 관리 시스템(DataBase Management System) : 파일 시스템의 문제를 해결하기 위해 제시된 소프트웨어
- 데이터베이스 관리 시스템의 주요 기능
1. 데이터 정의(Definition) : 데이터의 구조를 정의하고 데이터 구조에 대한 삭제 및 변경 기능을 수행함.
2. 데이터 조작(manipulation) : 소프트웨어(응용 프로그램)가 요청하는 데이터의 삽입, 수정, 삭제 작업을 지원함.
3. 데이터 제어(Control) : 데이터베이스 사용자를 생성하고 모니터링하며 접근을 제어.
백업과 회복, 동시성 제어 등의 기능 지원.
[데이터베이스 시스템]
*데이터베이스 시스템의 구성.
사용자 : 일반 사용자 / 응용프로그래머 / SQL 사용자 / DBA
인터페이스 : 응용프로그램화면 / 응용프로그램 개발 / SQL질의 / 데이터베이스 스키마
DBMS : / Embedded DML / DML컴파일러 / DDL컴파일러
오브젝트코드 질의 처리기
데이터베이스 : 데이터 파일 / 인덱스 / 데이터 통계 / 데이터 사전
*데이터베이스의 구조
- 스키마(schema) : 데이터베이스에 저장되는 데이터 구조와 제약조건을 정의한 것.
- 인스턴스(instance) : 스키마에 따라 데이터베이스에 실제로 저장된 값
- 데이터 사전(data dictionary) : 시스템 카탈로그라고도 하며 데이터베이스에 저장되는 데이터에 관한 정보, 즉 메타 데이터를 유지하는 시스템 데이터베이스이다. DBMS 스스로 생성하고 유지함.
- 데이터 디렉토리(data directory) : 데이터 사전에 있는 데이터에 실제로 접근하는데 필요한 위치정보를 저장하는 시스템 데이터베이스. 일반 사용자의 접근은 허용x
*3단계 데이터베이스 구조
- 외부 단계 (external level) : 데이터 베이스를 개별 사용자 관점에서 이해하고 표현하는 단계
ㄴ 외부 스키마(external schema) : 서브스키마라고도 하며 외부단계에서 사용자에게 필요한 데이터베이스를 정의한것.
- 개념 단계 (conceptual level) : 조직 전체의 관점
ㄴ 개념 스키마(conceptual schema) : 데이터베이스 전체의 논리적 구조를 정의한 것으로 저장될 데이터, 데이터들의 관계, 제약조건들에 대한 정의, 보안 정책이나 접근 권한에 대한 정의도 포함된다.
- 내부 단계 (internal level) : 물리적인 저장 장치의 관점. 데이터베이스 하나에 내부 스키마가 하나만 존재함다.
ㄴ 내부 스키마 (internal schema) : 전체 데이터베이스가 저장장치에 실제로 저장되는 방법을 정의한 것으로 레코드구 조, 필드 크기, 레코드 접근 경로 등 물리적 저장 구조를 정의한다.
* 데이터베이스 관리 시스템의 구성
- 데이터 베이스 관리 시스템 : 사용자와 데이터베이스를 연결시켜주는 소프트웨어. 데이터베이스관리와 사용자의 데이터 처리요구 수행
- 주요 구성요소
질의 처리기(query processor) : 사용자의 데이터 처리요구를 해석하여 처리.
ㄴDDL컴파일러, DML 프리컴파일러, DML 컴파일러, 런타임 데이터베이스 처리기, 트랜잭션 관지라 등
저장데이터 관리자(stored data manager) : 디스크에 저장된 사용자 데이터베이스와 데이터 사전을 관리.
*데이터베이스 언어 (SQL) - DDL, DML, DCL
- 데이터 정의어(DDL) : 데이터베이스를 정의하거나 그 정의를 수정. 구조를 정의, 데이터 사전 OR 카탈로그 생성.
- 데이터 조작어(DML) : 데이터의 검색, 삽입, 삭제, 변경 등 원하는 처리를 지정.
- 데이터 제어어(DCL) : 데이터를 정확하게 사용하기 위한 규정이나 규칙을 정의. 주로 데이터베이스 관리자(DBA)가 이용.
* 관계 데이터모델
데이터모델이란? 물리적 or 추상적으로 존재하는 현실세계를 단순화되고 정형화된 형태를 표현하는 하나의 방식.
데이터를 2차원 테이블 형태인 릴레이션으로 표현한다. 릴레이션에 대한 제약조건(constraints)과 관계 연산을 위한 관계대수(relational algebra)를 정의.
*릴레이션
- 관계형 데이터모델(relational data model) : 테이블 형식을 이용하여 데이터들을 정의하고 설명한 모델.
테이블을 릴레이션(relation)이라고 부른다.
- 스키마의 요소
속성(attribute) : 릴레이션 스키마의 열
도메인(domain) : 속성이 가질 수 있는 값의 집합. 더 이상 분리되지 않는 원자값(atomic value)이어야 한다.
차수(degree) : 속성의 개수 (속성이 n개면 n항 테이블)
- 릴레이션 인스턴스 : 릴레이션스키마에 현실세계의 데이터를 레코드로 저장한 형태.
ㄴ스키마는 정의 한 후에 거의 변함이 없지만 인스턴스는 삽입, 삭제, 수정 등으로 수시로 바뀔 수 있다.
- 인스턴스
튜플(tuple) : 릴레이션의 행. 릴레이션 내의 중복된 튜플은 허용x
카이널리티(cardinality) : 튜플의 수
*릴레이션의 특징
속성, 튜플의 순서는 의미 없음.
속성은 단일 값(원자값)을 가짐.
한 속성의 값은 모두 같은 도메인 값을 가짐.
*키(key)
: 튜플간의순서가 의미가 없으므로 튜플을 구분하기 위해서 각 튜플의 값을 이용한다.
=>튜플을 식별해낼 수 있는 식별자(identifier)
일반적으로 하나의 속성을 지정하여 키로 지정하나 , 여러 개의 속성으로 키를 구성할 수도 있다.(복합키 composite key)
* 무결성 제약조건
데이터 무결성 : 데이터의 일관성과 정확성을 지키는 것.
*개체 무결성 제약조건
-
삽입 : 기본키값이 같으면 삽입금지.
-
수정 : 기본키 값이 같거나 null로도 수정 금지
-
삭제 : 특별한 확인이 필요하지 않으며 즉시 수행
*참조 무결성 제약조건
- 삽입 : 부모 릴레이션은 튜플삽입 후 정상적으로 진행되지만 자식은 참조받는 테이블에 외래키 값이 없으므로 삽입금지.
- 삭제 : 부모테이블에서 삭제는 가능하지만 추가 작업 필요. 자식쪽에선 바로 삭제 가능.
- 수정 : 삭제와 삽입 명령이 연속해서 수행됨.
*관계대수 (relational algebra)
: 릴레이션에서 원하는 결과를 얻기 위해 수학의 대수와 같은 연산을 이용해 어떻게 찾는지에 대한 처리 절차를 명시하는 절자적 언어. DBMS 내부의 처리 언어로 사용된다.
- 관계해석 : 어떤 데이터를 찾는지만 명시하는 선언적 언어로 비적차적 언어이다. 관계대수와 함께 SQL의 이론기반을 제공
*셀렉션(selection)
: 렐레이션의 튜플을 추출하기 위한 연산. 단항 연산자이며 조건을 명시하고 그 조건에 만족하는 튜플을 반환.
비교연산자(<,>,<=,>=,<>)와 부울 연산자(^,ㄱ,v)의 조합
*프로젝션(projection)
: 릴레이션의 속성을 추출하기 위한 연산. 단항연산자. 중복을 제거해야 한다.
*개명 연산(재명명 연산)
: 테이블에 이름을 부여하거나 변경하는 연산.
*집합연산
: 수학적 집합 이론에서 정의된 연산. 합집합, 차집합, 카티션 프로덕트(Cartesian product), 교집합(차집합으로 정의 할 수 있음)
합집합, 차집합, 교집합 연산에서 두 피연산자의 차수와 속성이름들이 동일해야 한다.
- 카티전 프로덕트 : 두 릴레이션을 연결시켜 하나로 합칠 때 사용함.
*조인(join) - 중요!!
: 두 릴레이션의 공통 속성을 기준으로 속성 값이 같은 투플을 수평으로 결합하는 연산.
세타조인 / 동등조인 / 자연조인 / 외부조인 / 세미조인
[SQL기초]
*데이터 정의어(DDL)
- CREATE : 데이터 구조 정의. 테이블을 만든다.
CREATE TABLE T
(
C1 NUMBER,
C2 NUMBER(5),
C3 NUMBER(5,2),
C4 CHAR(5),
C5 VARCHAR2(5),
C6 NVARCHAR2(5)
);
ㄴ일반적으로 대소문자 구별이 없지만 따옴표 안에 있는 것들은 대소문자를 구분한다.
- DROP : 데이터 구조 삭제
DROP TABLE T;
- ALTER : 데이터 구조 변경
*데이터 구조
-
Numeric
-
Character
-
Date
-
LOB
*데이터 조작어(DML)
SELECT, INSERT, DELETE, UPDATE 등 테이블의 데이터를 검색, 삽입, 수정, 삭제 하는데 사용.
INSERT INTO T(C1, C2, C3, C4, C5, C6)
VALUES(12345.678, 12345, 123.67, 'HELLO', 'A1', 'ㄱ1');
SELECT * FROM T;
SELECT C1, C2 FROM T;
ALTER TABLE T DROP COLUMN C1;
ALTER TABLE T ADD C1 NUMBER;
ALTER TABLE T MODIFY C1 VARCHAR(10);
INSERT INTO T(C1, C2, C3, C4, C5, C6)
VALUES('ABCD', 12345, 123.67, 'HELLO', 'A1', 'ㄱ1');
*데이터 제어어(DCL)
GRANT, REVOKE 등 데이터의 사용 권한을 관리하는 데 사용.
*데이터 삽입하기 - INSERT
INSERT INTO T(C1, C2, C3, C4, C5, C6)
VALUES('ABCD', 12345, 123.67, 'HELLO', 'A1', 'ㄱ1');
순서대로 값을 입력할 때는 insert into따로 안써도 된다.
insert into Orders values(10,3,8,13000, to_date('2014-07-10','yyyy-mm-dd'));
insert into Customer values(1,'박지성','영국 맨체스터', '000-5000-0001');
insert into Book values(10,'Olympic Champions', 'Pearson', 13000);
ㄴ이런식으로 삽입.
*데이터 조회하기 - SELECT
모든값을 조회
SELECT * FROM Book;
원하는 속성만 순서대로 조회
SELECT bookid, bookname FROM Book;
원하는 속성(컬럼)을 원하는 별칭으로 조회
SELECT bookid "book ID", bookname FROM Book;
SELECT bookid AS bID, bookname FROM Book;
*데이터 삭제하기 - DELETE (DROP과 구별하기)
delete Imported_book;
ㄴ 모든 행이 삭제됨.
delete Imported_book where bookid=21;
ㄴ bookid가 21번인것이 삭제된다. where이 조건
*데이터 수정하기 - UPDATE
update Imported_book set bookid = 101;
ㄴ 모든 bookid를 101로 바꿈.
update Imported_book set bookid = 21, bookname = '젠골프' where bookname = 'Zen Golf';
ㄴ bookname이 Zen Golf였던 애가 젠골프로 바뀐다.
-예제
hr계정의 사원정보(Employees)에서 사원번호(employee_id)), 이름(first_name, last_name 두가지를 하나로 묶어 별칭으로 출력), 급여(salary), 업무(job_id), 입사일(hire_date), 상사의 사원번호(manager_id)를 출력하기. (이때 , 이름은 이름과 성을 연결하여 Name이라는 별칭으로 출력)
select employee_id, first_name ||' '|| last_name as Name, salary, job_id, hire_date, manager_id
from employees;
피연산자와 결과 둘 다 테이블이다.
-예제
1. 사원정보테이블에서 사원의 이름과 성은 name, 업무, 급여 연봉에 $100보너스를 추가하여 계산한 값은 Increase ann_salary, 월급에 $100 보너스를 추가하여 계산한 연봉은 Increase Salary라는 별칭을 붙여 출력하기.
select first_name ||' '|| last_name as Name, salary*12+100 as "Increase Ann_Salary",
salary+100 as "Increase Salary"
from employees;
2. 모든 사원의 성과 연봉을 “성: 1 Year Salary = $연봉”형식으로 출력하고, 1 Year Salary라는 별칭을 붙여 출력하기.
select last_name || ': 1 Year Salary = $' ||salary*12 as "1 Year Salary"
from employees;
3. 부서별로 담당하는 업무를 한 번씩만 출력하기.
select distinct department_id, job_id
from employees;
*WHERE 조건
- 범위(between ~and ~;) : 이상, 이하를 의미한다.
select * from Book
where price between 10000 and 20000;
- 집합(IN) : 집합에 속해있는 것들을 가져온다. (NOT IN은 그것을 빼고 가져옴)
select *from Book
where publisher in('굿스포츠','대한미디어');
select *from Book
where publisher not in('굿스포츠','대한미디어');
- 패턴 : 특정한 값이 아닌 종류
select bookname, publisher
from Book
where bookname like '축구의 역사';
select bookname, publisher
from Book
where bookname like '%축구%'; //축구라는 단어를 포함하는것들 검색.
select *
from Book
where bookname like '_구%'; //도서이름 왼쪽 두번째 위치에 ‘구’ 라는 문자열을 갖는 도서를 검색.
글자수를 지정하려면 언더바_ 를 사용한다.
select *
from Book
where bookname like '__의%'; //3번 째 자리에 '의'가 들어가는 책 검색
'공부 > Oracle' 카테고리의 다른 글
0601 데이터모델링, JDBC (0) | 2020.06.02 |
---|---|
0529 뷰, 트랜잭션, 세션, 시퀀스, 사용자 관리 (0) | 2020.06.01 |
0528 PL/SQL, 시퀀스, 프로시저 (0) | 2020.05.29 |
0527 서브쿼리, 연습문제, DDL,DML, 내장함수 (0) | 2020.05.28 |
0526 WHERE조건, ORDER BY, GROUP BY, 집계함수 (0) | 2020.05.26 |