Relational Algebra(관계 대수)
관계 대수는 한 개 또는 두 개 릴레이션을 피연산자로 하여 연산 결과로 새로운 릴레이션을 반환
<Relational Query Languages(관계 질의어)>
: 데이터베이스로부터 데이터를 조회하기 위한 언어
* Pure Query Language
: 데이터 조회만을 위한 언어(정의, 조작 지원x)
선언적 성격이 강한 SQL이 동일하게 동작하여 쿼리최적화할 수 있는 절차적 "관계 대수" 필요
(쿼리최적화의 핵심은 내부적으로 절차적인 관계 대수로 표현해두는 것)
관계 대수 기본 연산
1. Select
- select predicate에 비교 연산자 사용 가능
- 여러 조건을 걸어줄 때 논리 연산자로 연결 가능
- select predicate에서 두 속성의 값 비교 가능
<예제>
2. Project
"학번"이라는 속성이 기본키가 아니기 때문에 "학번" 컬럼만 빼고 project할 경우 중복값 발생 가능
<예제>
<예제>-Composition of Relational Operation(관계 연산 합성)
: 관계 대수의 피연산자도 릴레이션, 연산 결과도 릴레이션 → 관계 대수 표현의 합성 가능
3. Cartesian Product
<예제>
그럼 실제로 교수가 가르친 과목만 보여줄 수 있는 방법은? => "JOIN"
4. Join
cartesian 곱은 그냥 존재하는 모든 조합을 보여줌
=> 의미상 맞는 튜플만 고르기 위해, 조건을 주어 SELECT => "JOIN"
5. Union & Set-Intersection, Set Difference
<두 릴레이션 간 집합 연산 가능 조건>
각 릴레이션의 i번째 애트리뷰트끼리의 도메인이 호환되어야 하고(데이터 타입 같아야)
두 릴레이션의 애트리뷰트 수도 같아야 함
<예제>
8. Rename
Assignment는 거의 안 쓰므로 참고만 하자.
<Equivalent Queries: 쿼리 최적화의 핵심>-예제
: 성능 더 좋은 방법 고르기
'백엔드 > SQL' 카테고리의 다른 글
SQL을 활용한 데이터 정의와 조작 (0) | 2025.04.04 |
---|---|
관계대수 연습문제 (0) | 2025.04.03 |
관계형 데이터 모델과 관계대수(1) (0) | 2025.03.30 |
데이터 언어 & 사용자 (0) | 2025.03.29 |
SQL 첫걸음 3~4장 (0) | 2025.03.29 |