지직전기
[데이터베이스] 7주차 교육 정리 본문
목차
- 데이터베이스
- 데이터베이스의 정의
- 데이터베이스의 특징
- SQL 소개
- 기능에따라 분류
- SELECT문의 기본 문법
- SELECT문 예제
- 관계데이터 모델
- 기본 용어 정리
- 관계
- 릴레이션 스키마
- 스키마의 표현
- 릴레이션의 특징
- 관계 데이터 모델이란?
- 무결성 제약조건
- 키
- 슈퍼키
- 후보키
- 기본키
- 대리키
- 대체키
- 외래키
- 무결성 제약조건 종류
- 데이터 무결성
- 도메인 무결성 제약조건
- 개체 무결성 제약조건
- 참조 무결성 제약조건
- 관계 대수
- 관계대수와 관계해석
- 관계대수 연산자
- 관계대수식
- 셀렉션
- 프로젝션
- 합집합
- 교집합
- 차집합
- 카디션 프로덕트
- 조인
데이터베이스(DataBase)
조직에 필요한 정보를 얻기 위해 논리저으로 연관된 데이터를 모아 놓은 구조적으로 통합해 놓은 것
(ex. 학생데이터-학사DB, 신용카드데이터-은행DB 등)
- 데이터 : 관찰의 결과로 나타난 정량적, 정성적인 실제 값
- 정보 : 데이터에 의미를 부여한 것
- 지식 : 사물이나 현상에 대한 이해
데이터베이스 시스템은 데이터의 검색과 변경 작업을 주로 수행함
변경이란 시간에 따라 변하는 데이터 값을 데이터베이스에 반영하기 위해 수행하는 삽입, 삭제, 수정 등의 작업
데이터베이스의 정의
통합된 데이터(Integrated data) : 데이터를 통합하는 개념으로, 각자 사용하던 데이터의 중복을 최소화하여 중복으로 인한 데이터 불일치 현상을 제거(중복이 아예 없을 수는 없음. 최소화)
저장된 데이터(Stored data) : 문서로 보관된 데이터가 아니라 디스크, 데이프 같은 컴퓨터 저장장치에 저장된 데이터를 의미
운영 데이터(Operational data) : 조직의 목적을 위해 사용되는 데이터를 의미한다. 즉 업무를 위한 검색을 할 목적으로 저장된 데이터
공용 데이터(Shared data) : 한 사람 또는 한 업무를 위해 사용되는 데이터가 아니라 공동으로 사용되는 데이터를 의미
데이터베이스의 특징
실시간 접근성(real tie accessibility)
데이터베이스는 실시간으로 서비스, 사용자가 데이터를 요청하면 몇 시간이나 몇 일 뒤에 결과를 전송하는 것이 아니라 수 초 내에 결과를 서비스
계속적인 변화(continuous change)
데이터베이스에 저장된 내용은 어느 한 순간의 상태를 나타내지만, 데이터 값은 시간에 따라 항상 바뀜. 데이터베이스는 삽입(insert), 삭제(delete), 수정(update) 등의 작업을 통하여 바뀐 데이터 값을 저장
동시 공유(concurrent sharing)
데이터베이스는 서로 다른 업무 또는 여러 사용자에게 동시 공유동시(concurrent)는 병행이라고도 하며, 데이터베이스에 접근하는 프로그램이 여러 개 있다는 의미
내용에 따른 참조(reference by content)
데이터베이스에 저장된 데이터는 데이터의 물리적인 위치가 아니라 데이터 값에 따라 참조
SQL 소개
SQL : 1970년 IBM이 SEQUEL 이름으로 개발한 관계형 데이터베이스 언어이다.
1986년 ANSI에서 표준 승인한 언어
-Data SubLanguage 데이터 구조에 관한 데이터를 생성하고 처리하는 문법만을 가지고 있다.
기능에 따라 분류
1. 데이터 정의어(DDL) - CREATE(생성), ALTER(수정), DROP(삭제) 명령어
2. 데이터 조작어(DML) - INSERT, UPDATE, DELETE (테이블)
3. 데이터 제어어(DCL) - GRANT, REVOKE, COMMIT, ROLLBACK
4.데이터 질의어(DQL) - SELECT
SELECT 문의 기본 문법
// 기본 예시
SELECT phone FROM Customer
WHERE name = '홍길동';
//SELECT문의 기본 문법
SELECT
[ALL | DISTINCT]
[테이블이름.]{* | 속성이름 [[AS] 속성이름 별칭]}
[FROM
{테이블이름 [AS 테이블 이름 별칭]}
[INNER JOIN | LEFT [OUTER] JOIN | RIGHT [OUTER] JOIN
{테이블이름 [ON 검색조건]}
|FULL [OUTER] JOIN {테이블이름}]]
[WHERE 검색조건(들)]
[GROUP BY{속성이름, [..., n]}]
[HAVING 검색조건(들)]
[질의 UNION 질의 | 질의 UNION ALL 질의]
[ORDER BY {속성이름 [ASC | DESC], [...,n]}]
-----------------------------------------------------
[] : 대괄호 안의 SQL 예약어들은 선택적으로 사용한다.
{} : 중괄호 안의 SQL 예악어들은 필수적으로 사용한다.
| : 선택 가능한 문법 중 한 개를 사용할 수 있다.
SELECT : 질의 결과 추출되는 속성 리스트를 열거한다.
FROM : 질의에 어느 테이블이 사용되는지 열거한다.
WHERE : 질의의 조건을 작성한다.
SELECT문 예제)
mysql> SELECT bookname, price FROM book; //질의 3-1 모든 도서의 이름과 가격을 검색하시오
+-------------------+-------+
| bookname | price |
+-------------------+-------+
| 축구의 역사 | 7000 |
| 축구 아는 여자 | 13000 |
| 축구의 이해 | 22000 |
| 골프 바이블 | 35000 |
| 피겨 교본 | 8000 |
| 배구 단계별기술 | 6000 |
| 야구의 추억 | 20000 |
| 야구를 부탁해 | 13000 |
| 올림픽 이야기 | 7500 |
| Olympic Champions | 13000 |
+-------------------+-------+
10 rows in set (0.00 sec)
mysql> SELECT price, bookname FROM book; //질의 3-1 변형 모든 도서의 이름과 가격을 검색하시오
+-------+-------------------+
| price | bookname |
+-------+-------------------+
| 7000 | 축구의 역사 |
| 13000 | 축구 아는 여자 |
| 22000 | 축구의 이해 |
| 35000 | 골프 바이블 |
| 8000 | 피겨 교본 |
| 6000 | 배구 단계별기술 |
| 20000 | 야구의 추억 |
| 13000 | 야구를 부탁해 |
| 7500 | 올림픽 이야기 |
| 13000 | Olympic Champions |
+-------+-------------------+
10 rows in set (0.00 sec)
mysql> SELECT * FROM book; //질의 3-2 모든 도서의 도서번호, 도서이름, 출판사, 가격을 검색하시오.
+--------+-------------------+------------+-------+
| bookid | bookname | publisher | price |
+--------+-------------------+------------+-------+
| 1 | 축구의 역사 | 굿스포츠 | 7000 |
| 2 | 축구 아는 여자 | 나무수 | 13000 |
| 3 | 축구의 이해 | 대한미디어 | 22000 |
| 4 | 골프 바이블 | 대한미디어 | 35000 |
| 5 | 피겨 교본 | 굿스포츠 | 8000 |
| 6 | 배구 단계별기술 | 굿스포츠 | 6000 |
| 7 | 야구의 추억 | 이상미디어 | 20000 |
| 8 | 야구를 부탁해 | 이상미디어 | 13000 |
| 9 | 올림픽 이야기 | 삼성당 | 7500 |
| 10 | Olympic Champions | Pearson | 13000 |
+--------+-------------------+------------+-------+
10 rows in set (0.00 sec)
mysql> SELECT DISTINCT publisher FROM book; // 질의 3-3 도서 테이블에 있는 모든 출판사를 중복 제거하여 검색하시오.
+------------+
| publisher |
+------------+
| 굿스포츠 |
| 나무수 |
| 대한미디어 |
| 이상미디어 |
| 삼성당 |
| Pearson |
+------------+
6 rows in set (0.00 sec)
mysql> SELECT * FROM book WHERE price <20000; // 질의 3-4 가격이 20,000원 미만인 도서를 검색하시오.
+--------+-------------------+------------+-------+
| bookid | bookname | publisher | price |
+--------+-------------------+------------+-------+
| 1 | 축구의 역사 | 굿스포츠 | 7000 |
| 2 | 축구 아는 여자 | 나무수 | 13000 |
| 5 | 피겨 교본 | 굿스포츠 | 8000 |
| 6 | 배구 단계별기술 | 굿스포츠 | 6000 |
| 8 | 야구를 부탁해 | 이상미디어 | 13000 |
| 9 | 올림픽 이야기 | 삼성당 | 7500 |
| 10 | Olympic Champions | Pearson | 13000 |
+--------+-------------------+------------+-------+
7 rows in set (0.00 sec)
mysql> SELECT * FROM book WHERE price BETWEEN 10000 AND 20000; // 질의 3-5 가격이 10,000원 이상 20,000 이하인 도서를 검색하시오.
+--------+-------------------+------------+-------+
| bookid | bookname | publisher | price |
+--------+-------------------+------------+-------+
| 2 | 축구 아는 여자 | 나무수 | 13000 |
| 7 | 야구의 추억 | 이상미디어 | 20000 |
| 8 | 야구를 부탁해 | 이상미디어 | 13000 |
| 10 | Olympic Champions | Pearson | 13000 |
+--------+-------------------+------------+-------+
4 rows in set (0.00 sec)
mysql> SELECT * FROM book WHERE (publisher LIKE '굿스포츠') OR (publisher LIKE '대한미디어'); // 질의 3-6 출판사가 ‘굿스포츠’ 혹은 ‘대한미디어’인 도서를 검색하시오.
+--------+-----------------+------------+-------+
| bookid | bookname | publisher | price |
+--------+-----------------+------------+-------+
| 1 | 축구의 역사 | 굿스포츠 | 7000 |
| 3 | 축구의 이해 | 대한미디어 | 22000 |
| 4 | 골프 바이블 | 대한미디어 | 35000 |
| 5 | 피겨 교본 | 굿스포츠 | 8000 |
| 6 | 배구 단계별기술 | 굿스포츠 | 6000 |
+--------+-----------------+------------+-------+
5 rows in set (0.00 sec)
mysql> SELECT * FROM book WHERE (publisher NOT LIKE '굿스포츠') AND (publisher NOT LIKE '대한미디어');
+--------+-------------------+------------+-------+
| bookid | bookname | publisher | price |
+--------+-------------------+------------+-------+
| 2 | 축구 아는 여자 | 나무수 | 13000 |
| 7 | 야구의 추억 | 이상미디어 | 20000 |
| 8 | 야구를 부탁해 | 이상미디어 | 13000 |
| 9 | 올림픽 이야기 | 삼성당 | 7500 |
| 10 | Olympic Champions | Pearson | 13000 |
+--------+-------------------+------------+-------+
5 rows in set (0.00 sec)
mysql> SELECT bookname, publisher FROM book WHERE bookname LIKE '축구의 역사'; // 질의 3-7 ‘축구의 역사’를 출간한 출판사를 검색하시오.
+-------------+-----------+
| bookname | publisher |
+-------------+-----------+
| 축구의 역사 | 굿스포츠 |
+-------------+-----------+
1 row in set (0.00 sec)
mysql> SELECT bookname, publisher FROM book WHERE bookname LIKE '%축구%'; // 질의 3-8 도서이름에 ‘축구’가 포함된 출판사를 검색하시오.
+----------------+------------+
| bookname | publisher |
+----------------+------------+
| 축구의 역사 | 굿스포츠 |
| 축구 아는 여자 | 나무수 |
| 축구의 이해 | 대한미디어 |
+----------------+------------+
3 rows in set (0.00 sec)
mysql> SELECT * FROM book WHERE bookname like '_구%'; // 질의 3-9 도서이름의 왼쪽 두 번째 위치에 ‘구’라는 문자열을 갖는 도서를 검색하시오.
+--------+-----------------+------------+-------+
| bookid | bookname | publisher | price |
+--------+-----------------+------------+-------+
| 1 | 축구의 역사 | 굿스포츠 | 7000 |
| 2 | 축구 아는 여자 | 나무수 | 13000 |
| 3 | 축구의 이해 | 대한미디어 | 22000 |
| 6 | 배구 단계별기술 | 굿스포츠 | 6000 |
| 7 | 야구의 추억 | 이상미디어 | 20000 |
| 8 | 야구를 부탁해 | 이상미디어 | 13000 |
+--------+-----------------+------------+-------+
6 rows in set (0.00 sec)
mysql> SELECT * FROM book WHERE bookname LIKE '%축구%' AND (price >=20000); // 질의 3-10 축구에 관한 도서 중 가격이 20,000원 이상인 도서를 검색하시오.
+--------+-------------+------------+-------+
| bookid | bookname | publisher | price |
+--------+-------------+------------+-------+
| 3 | 축구의 이해 | 대한미디어 | 22000 |
+--------+-------------+------------+-------+
1 row in set (0.00 sec)
mysql> SELECT * FROM book WHERE (publisher LIKE '굿스포츠') OR (publisher LIKE '대한미디어'); // 질의 3-11 출판사가 ‘굿스포츠’ 혹은 ‘대한미디어’인 도서를 검색하시오.
+--------+-----------------+------------+-------+
| bookid | bookname | publisher | price |
+--------+-----------------+------------+-------+
| 1 | 축구의 역사 | 굿스포츠 | 7000 |
| 3 | 축구의 이해 | 대한미디어 | 22000 |
| 4 | 골프 바이블 | 대한미디어 | 35000 |
| 5 | 피겨 교본 | 굿스포츠 | 8000 |
| 6 | 배구 단계별기술 | 굿스포츠 | 6000 |
+--------+-----------------+------------+-------+
5 rows in set (0.00 sec)
트랜잭션 : 테이블의 데이터를 변경(입력 / 수정 / 삭제) 할 때 실제 테이블에 완전히 적용하지 않고, 임시로 적용시키는 것.
실수가 있을 경우 취소할 수 있다.
관계데이터 모델
기본 용어 정리
- 릴레이션 : 행과 열로 구성된 테이블
- 속성(Attribute) : 세로 값으로 열(Column) 이라고 한다.
- 튜블(Tuple) : 가로 값으로 행(Row)이라고 한다.
- 차수 : 속성의 수
- 카디날리티 : 튜플의 수
- 인스턴스 : 정의된 스키마에 따라 테이블에 실제 저장된 데이터의 집합
- 스키마 : 릴레이션이 어떻게 구성되는지, 어떤 정보를 담고 있는지에 대한 기본적인 구조를 정의

릴레이션 예시
위 그림은 데이터를 릴레이션(테이블)으로 구성한 것입니다. 차수(Degree)는 도서번호, 도서이름, 출판사, 가격으로 4가 되며, 5개의 튜플을 가지고 있으므로 카디날리티는 5가 됩니다.
관계(relationshop)
- 릴레이션 내에서 생성되는 관계 : 릴레이션 내 데이터들의 관계
- 릴레이션 간에 생성되는 관계 : 릴레이션 간의 관계
릴레이션 스키마
- 속성 : 릴레이션 스키마의 열
- 도메인 : 속성이 가질 수 있는 값의 집합
- 차수 : 속성의 개수
스키마의 표현
- 릴레이션 이름(속성1 : 도메인1, 속성2 : 도메인2, 속성3 : 도메인3 ...)
예시) 도서(도서번호:integer, 도서이름:char(40), 출판사:char(40), 가격:integer)
릴레이션의 특징
- 속성은 단일 값을 가진다
- 각 속성의 값은 도메인에 정의된 값을 가지며 그 값은 모두 단일 값이여야 함
- 속성은 서로 다른 이름을 가진다
- 속성은 한 릴레이션에서 서로 다른 이름을 가져야만 함
- 한 속성의 값은 모두 같은 도메인 값을 가진다
- 한 속성에 속한 열은 모두 그 소성에서 정의한 도메인 값만 가질 수 있음
- 속성의 순서는 상관 없다
- 속성의 순서가 달라도 릴레이션 스키마는 같음
- 릴레이션 내의 중복된 튜플은 허용하지 않는다
- 하나의 릴레이션 인스턴스 내에서는 서로 중복된 값을 가질 수 없음. 즉 모든 튜플은 서로 값이 달라야함
- 튜플의 순서는 상관없다
- 튜플의 순서가 달라도 같은 릴레이션임. 관계 데이터 모델의 튜플은 실제적인 값을 가지고 있으며 이 값은 시간이 지남에 따라 데이터의 삭제, 수정, 삽입에 따라 순서가 바뀔 수 있음
관계 데이터 모델이란?
- 관게데이터 모델은 데이터를 2차원 데이블 형태인 릴레이션으로 표현함.
릴레이션에 대한 제약조건(constraints)과 관계 연산을 위한 관계대수(relational algebra)를 정의함.

무결성 제약 조건
키
- 특정 튜플을 식별할 때 사용하는 속성 혹은 속성의 집합
- 릴레이션은 중복된 튜플을 허용하지 않기 때문에 각각의 튜플에 포함됨 속성들 중 어느 하나(혹은 하나 이상)는 값이 달라야 함. 즉 키가 되는 속성(혹은 속성의 집합)은 반드시 값이 달라서 튜플들을 서로 구별할 수 있어야함
- 키는 릴레이션 간의 관계를 맺는 데도 사용

키 설명을 위한 예시 데이터
슈퍼키 : 튜플을 유일하게 식별할 수 있는 하나의 속성 혹은 속성의 집합
예시) 고객 릴레이션
- 고객번호 : 고객별로 유일한 값이 부여되어 있기 때문에 튜플을 식별할 수 있음.
- 이름 : 동명이인이 있을 경우 튜플을 유일하게 식별할 수 없음
- 주민번호 : 개인별로 유일한 값이 부여되어 있기 때문에 튜플을 식별할 수 있음
- 주소 : 가족끼리는 같은 정보를 사용하므로 튜플을 식별할 수 없음
- 핸드폰 : 한 사람이 여러개의 핸드폰을 사용할 수 있고 반대로 핸드폰은 사용하지않는 사람이 있을 수 있기 때문에 튜플을 식별할 수 없음
- 고객 릴레이션은 고객번호와 주민번호를 포함한 모든 속성의 집합이 슈퍼키가 됨.
후보키 : 튜플을 유일하게 식별할 수 있는 속성의 최소 집합
예시) 주문 릴레이션
- 고객번호 : 한 명의 고객이 여러 권의 도서를 구입할 수 있으므로 후보키가 될 수 없음. 고객번호 1인 박지성 고객은 세 번의 주문기록이 있으므로 튜플을 유일하게 식별할 수 없음
- 도서번호 : 도서번호가 2인 '축구아는 여자'는 두 번의 주문 기록이 있으므로 튜플을 유일하게 식별할 수 없음.
- 주문 릴레이션의 후보키는 2개의 속성을 합한(고객번호, 도서번호)가 됨.
- 참고로 이렇게 2개 이상의 속성으로 이루어진 키를 복합키라고 함.
기본키 : 여러 후보키 중 하나를 선정하여 대표로 삼는 키
- 후보키가 하나뿐이라면 그 후보키를 기본키로 사용하면 되고 여러 개라면 릴레이션의 특성을 반영하여 하나를 선택하면 됨.
- 릴레이션 스키마를 표현할 때 기본키는 밑줄을 그어 표시
기본키 선정 시 고려사항
- 릴레이션 내 튜플을 식별할 수 있는 고유한 값을 가져야 함
- NULL 값은 허용하지 않음
- 키 값의 변동이 일어나지 않아야 함
- 최대한 적은 수의 속성을 가진 것이라야 함
- 향후 키를 사용하는데 있어서 문제 발생 소지가 없어야 함
대리키
- 기본키가 보안을 요하거나, 여러 개의 속성으로 구서오디어 복잡하거나, 마땅한 기본키가 없을 때는 일련번호 같은 가상의 속성을 만들어 기본키로 삼는 경우가 있음. 이러한 키를 대리키 혹은 인조키라고 함
- 대리키는 DBMS나 소프트웨어에서 임의로 생성하는 값으로 사용자가 직관적으로 그 값의 의미를 알 수 없음
대체키
- 대체키는 기본키로 선정되지 않은 후보키를 말함
- 고객 릴레이션의 경우 고객번호와 주민번호 중 고객번호를 기본키로 정하면 주민번호가 대체키가 됨
외래키 : 다른 릴레이션의 기본키를 참조하는 속성을 말함. 다른 릴레이션의 기본키를 참조하여 관계 데이터 모델의 특징인 릴레이션 간의 관계를 표현함
외래키의 특징
- 관계데이터 모델의 릴레이션 간의 관계를 표현함
- 다른 릴레이션의 기본키를 참조하는 속성임
- 참조하고(외래키) 참조되는(기본키) 양쪽 릴레이션의 도메인은 서로 같아야함
- 참조되는(기본키) 값이 변경되면 참조하는(외래키) 값도 변경됨
- NULL 값과 중복 값 등이 허용됨
- 자기 자신의 기본키를 참조하는 외래키도 가능함
- 외래키가 기본키의 일부가 될 수 있음
- 외래키 사용 시 참조하는 릴레이션과 참조되는 릴레이션이 꼭 다른 릴레이션일 필요는 없음. 즉 자기 자신이 기본키를 참조할 수도 있음
무결성 제약조건 종류
데이터 무결성
- 데이터베이스에 저장된 데이터의 일관성과 정확성을 지키는 것을 말함
도메인 무결성 제약조건
- 도메인 제약이라고도 하며, 릴레이션 내의 튜플들이 각 송성의 도메인에 지정된 값만을 가져야한다는 조건
- SQL 문에서 데이터 형식, 널, 기본값, 체크 등을 사용하여 지정할 수 있음
개체 무결성 제약조건
- 기본키 제약이라고도 함
- 릴레이션은 기본키를 지정하고 그에 따른 무결성 원칙. 즉, 기본키는 NULL값을 가져서는 안되며 릴레이션 내에 오직 하나의 값만 존재해야한다는 조건임
참조 무결성 제약조건
- 외래키 제약이라고도 하며 릴레이션 간의 참조 관계를 선언하는 제약조건
관계대수
릴레이션에서 원하는 결과를 얻기 위해 수학의 대수와 같은 연산을 이용하여 질의하는 방법을 기술하는 언어
관계대수와 관계해석
관계대수 : 어떤 데이터를 어떻게 찾는지에 대한 처리 절차를 명시하는 절차적인 언어이며, DBMS 내부의 처리 언어로 사용됨(How)
관계해석 : 어떤 데이터를 찾는지 명시하는 선언적인 언어로 관계대수와 함께 관계 DBMS의 표준 언어인 SQL의 이론적인 기반을 제공함(What)
※ 관계대수와 관계해석은 모두 관계 데이터 모델의 중요한 언어이며 실제 동일한 표현 능력을 가지고 있음
관계대수 연산자

관계대수식
관계대수는 릴레이션 간 연산을 통해 결과 릴레이션을 찾는 절차를 기술한 언어로, 이 연산을 수행하기 위한 식을 관계대수식이라고 함.
관계대수식은 대상이 되는 릴레이션과 연산자로 구성되며, 결과는 릴레이션으로 반환됨. 반환된 릴레이션은 릴레이션의 모든 특징을 따름

셀렉션(σ)
릴레이션의 튜플을 추출하기 위한 연산임. 하나의 릴레이션을 대상으로 하는 단항 연산자이며, 찾고자 하는 튜플의 조건을 명시하고 그 조건에 만족하는 튜플을 반환함
형식 : σ<조건>(R)(R은 릴레이션, σ은 그리스 문자이며 대문자는 ∑)
예시) 서점에서 판매하는 도서 중 8,000원 이하인 도서를 검색하시오. → σ<=8000(도서)
셀렉션의 확장
여러개의 조건을 ^(and), ∨(or), ┐(not) 기호를 이용하여 복합조건을 표시할 수 있다.
형식 : σ<복합조건>(R)
예시) 가격이 8,000원 이하이고 도서번호가 3 이상인 책을 찾아라. → σ(<=8000 % 도서번호 >= 3)(도서)
프로젝션(π)
릴레이션의 속성을 추출하기 위한 연산으로 단항 연산자임.
형식 : π<속성리스트>(R)
예시) 신간도서 안내를 위해 고객의(이름, 주소, 핸드폰)이 적힌 카탈로그 주소록을 만드시오 → π 이름,주소,핸드폰 (고객)
합집합(∪)
두 개의 릴레이션을 합하여 하나의 릴레이션을 반환함. 이 때 두 개의 릴레이션은 서로 같은 속성 순서와 도메인을 가져야 함
형식 : R ∪ S
예시) 서점은 지점 A와 지점 B가 있다. 두 지저머의 도서는 각 지점에서 관리하며 릴레이션 이름은 각각 도서 A, 도서 B다. 마당서점의 도서를 하나의 릴레이션으로 보이시오. → 도서A ∪ 도서 B
교집합(∩)
합병 가능한 두 릴레이션을 대상으로 하며, 두 릴레이션이 공통으로 가지고 있는 튜플을 반환함
형식 : R ∩ S
예시) 서점의 두 지점에서 동일하게 보유하고 있는 도서 목록을 보이시오 → 도서A ∩ 도서 B
차집합(-)
첫 번째 릴레이션에는 속하고 두 번째 릴레이션에는 속하지 않는 튜플을 반환함
형식 : R - S
예시 ) 서점 두 지점 중 지점 A에서만 보유하고 있는 도서 목록을 보이시오. → 도서 A - 도서 B
카티전 프로덕트 (x)
두 릴레이션을 연결시켜 하나로 합칠 때 사용함. 결과 릴레이션은 첫 번째 릴레이션의 오른쪽에 두 번째 릴레이션의 모든 튜플을 순서대로 배열하여 반환함. 결과 릴레이션의 차수는 두 릴레이션의 차수의 합이며, 카디날리티는 두 릴레이션의 카디날리티의 곱임.
형식 : R x S
예시) 고객 릴레이션과 주문 릴레이션의 카티전 프로덕트를 구하시오 → 고객 x 주문
조인
두 릴레이션의 공통 속성을 기준으로 속성 값이 같은 튜플을 수평으로 결합하는 연산임. ㅈ조인을 수행하기 위해서는 두 릴레이션의 조인에 참여하는 속성이 서로 동일한 도메인으로 구성되어야 함. 조인 연산의 결과는 공통 속성의 속성 값이 동일한 튜플 만을 반환함.
형식 : R ▷◁(r조건s) S = σc (RxS) (R과 S는 릴레이션, c는 조인조건)
조인 연산의 구분
기본연산 : 세타조인, 동등조인, 자연조인
확장된 조인 연산 : 세미조인, 외부조인
'STUDY > DataBase' 카테고리의 다른 글
| [데이터베이스] 9주차 교육 정리 (0) | 2024.01.29 |
|---|---|
| [데이터베이스] 8주차 교육 정리 (1) | 2024.01.24 |
| [데이터베이스] 데이터 모델링 (2) | 2024.01.24 |
| [데이터베이스] 관계대수 (1) | 2024.01.17 |
| [데이터베이스] 관계 데이터 모델 (0) | 2024.01.16 |