Relational Query Languages
관계형 질의 언어는 구조적 질의 언어(SQL)와 동일한 표현력을 가지는 "순수"한 언어이다. 대표적으로 다음과 같은 관계형 질의 언어가 있다.
- 관계 대수(Relational Algebra)
- 튜플 관계 해석(Tuple Relational Calculus)
- 도메인 관계 해석(Domain Relational Calculus)
Relational Operators (관계 연산자)
관계형 질의 언어는 6개의 기본 연산자를 사용하여 사용자의 질의를 표현한다.
1. Selection of Tuples (σ, 선택 연산)
주어진 조건을 만족하는 튜플만 선택한다.
- Relation r:
- 예시: A=B이고 D > 5인 튜플 선택
- σ A=B and D > 5 (r)
2. Projection of Attributes (∏, 투영 연산)
특정 속성만 선택하여 반환한다. 결과에는 유일한 값만 포함된다.
- 예시: 속성 A와 C 선택
- ∏ A, C (r)
3. Union of Two Relations (∪, 합집합 연산)
두 릴레이션을 병합하여 하나의 릴레이션으로 만든다. 같은 속성을 가진 튜플만 연산 가능하며, 중복되는 값은 제거된다.
- r ∪ s
4. Set Difference of Two Relations (-, 차집합 연산)
두 릴레이션에서 r에는 있지만 s에는 없는 튜플을 반환한다. 같은 속성과 개수를 가져야 한다.
- r - s
5. Set Intersection of Two Relations (∩, 교집합 연산)
두 릴레이션에서 공통으로 존재하는 튜플만 반환한다.
- r ∩ s
6. Cartesian Product (×, 카테시안 곱)
두 릴레이션의 가능한 모든 조합을 생성한다. 즉, 두 릴레이션의 모든 튜플을 조합하여 새로운 튜플을 만든다. 각 릴레이션의 튜플 수를 곱한 만큼의 새로운 튜플이 생성되며, 조인(join) 연산의 기초가 된다.
- r × s
- 같은 속성 B를 가진다면 r.B, s.B로 속성을 명확히 구분하여 조합을 생성해야 한다. 이를 통해 같은 속성 이름으로 인해 발생할 수 있는 혼동을 방지할 수 있다. 이후 특정 조건을 추가하여 조인(Natural Join) 등의 연산을 수행할 수도 있다.
Instructor x Teaches 예시
결과 예시
7. Natural Join (⨝, 자연 조인)
공통 속성을 기준으로 두 릴레이션을 결합한다.
- 같은 속성을 가진 튜플만 결합
- t = (t_r ∩ t_s) 가 성립하는 경우만 결과에 포함
8. Rename Operation (ρ, 이름 변경 연산)
연산 결과의 릴레이션 이름을 변경할 때 사용된다. 이는 연산 후 생성된 결과 테이블에 새로운 이름을 부여하여 가독성을 높이고, 후속 연산에서 보다 명확하게 참조할 수 있도록 한다.
- ρ_x (E) → 표현식 E의 결과를 x라는 이름으로 변경
- 때때로 속성 이름을 명시할 필요가 있다. 특히 동일한 속성을 가진 두 릴레이션을 조인할 때, 속성 충돌을 방지하고 명확한 식별이 필요할 수 있다.
관계 대수에서의 예제 질의
1. 대출 테이블 (loan) 구조
은행 대출 정보를 저장하는 테이블의 속성은 다음과 같다:
- loan-number: 대출 번호 (고유 식별자)
- branch-name: 대출이 처리된 지점명
- amount: 대출 금액
2. 대출 금액이 $1200을 초과하는 모든 속성 찾기
- σ amount > 1200 (loan)
3. 대출 금액이 $1200을 초과하는 대출 번호 찾기
- ∏ loan-number (σ amount > 1200 (loan))
데이터 구조
- 예금자 (customer-name, account-number)
- 대출자 (customer-name, loan-number)
4. 은행에서 대출 또는 계좌를 가지고 있는 모든 고객 찾기
- ∏ customer-name (borrower) ∪ ∏ customer-name (depositor)
5. 은행에서 대출과 계좌를 모두 가지고 있는 고객 찾기
- ∏ customer-name (borrower) ∩ ∏ customer-name (depositor)
기초 SQL 소개
SQL Data-Definition Language (DDL)
SQL은 각 릴레이션의 스키마(schema), 속성의 도메인(domain), 무결성 제약 조건(integrity constraints)을 정의할 수 있다.
Domain Types in SQL
- char(n): 고정된 크기의 문자열 (n 바이트)
- varchar(n): 최대 n 바이트의 가변 길이 문자열
- int, smallint: 정수형 데이터
- numeric(p,d): 소수점 이하 d자리까지 표현하는 숫자
- real, float(n): 실수형 데이터
Create Table Construct
테이블을 생성할 때 사용된다.
CREATE TABLE r (
Ai Di, -- Ai: 속성 이름, Di: 데이터 타입
...
);
Integrity Constraints in Create Table
무결성 제약 조건을 설정할 수 있다.
- Primary Key: (A1, ..., An ) → 기본 키 설정
- Foreign Key: (Am, ..., An ) REFERENCES r → 외래 키 설정
- NOT NULL: 특정 속성이 NULL 값을 가질 수 없도록 제한
예시:
FOREIGN KEY (dept_name) REFERENCES department
- department 테이블에 dept_name 속성이 반드시 존재해야 함.
Updates to Tables
Insert (삽입)
INSERT INTO instructor VALUES ('10211', 'Smith', 'Biology', 66000);
- 테이블에 데이터를 추가할 때 사용된다.
- 테이블의 속성 순서와 동일해야 한다.
Delete (삭제)
DELETE FROM student;
- WHERE 절 없이 실행하면 모든 튜플이 삭제되므로 주의해야 한다.
Drop Table (테이블 삭제)
DROP TABLE r;
- 테이블 자체를 삭제한다.
Alter (테이블 구조 변경)
ALTER TABLE r ADD A D;
ALTER TABLE r DROP A;
- 속성을 추가하거나 삭제한다.
- 속성을 삭제할 경우 부작용이 발생할 수 있어 일부 DBMS에서는 제한한다.
Basic Query Structure
SELECT A1, A2, ..., An
FROM r1, r2, ..., rm
WHERE P;
- Ai: 선택할 속성
- Ri: 릴레이션
- P: 조건 (Predicate)
- SQL 질의 결과는 또 다른 릴레이션으로 반환됨.
Cartesian Product 적용: 쉼표(,)를 사용하여 다중 테이블을 FROM 절에 나열하면 카테시안 곱이 수행됨. 이후 WHERE 절에서 특정 조건을 만족하는 데이터를 찾는다.
'CS 지식 > 데이터베이스' 카테고리의 다른 글
[데이터베이스] 기초 SQL 문법 (0) | 2025.03.16 |
---|---|
[데이터베이스] DB, DBMS의 소개 (0) | 2025.03.07 |
댓글