DB/관계형 DB

SQL에서 릴레이션 조작

쿠와와 2020. 11. 29. 18:24

1. Select

Select는 RDB의 핵심이다. " 어떻게 하면 Select를 잘 쓸 수 있을까" 이 질문이 RDB를 능숙하게 다루기 위한 핵심이라고 해도 과언이 아니다. 

Select은 데이터를 조회하는 데 사용하는 유일한 명령이다. 

유연성이 높고 다양하게 응용할 수 있다. 

그만큼 미숙하게 다루면 난해해지기 쉽다.

 

구문 EX)

SELECT 칼럼의 목록

FROM 테이블의 목록

WHERE 검색조건 

 

이때 칼럼의 목록은 프로젝션, 테이블의 목록은 곱집합, 검색조건은 제한이다.

Select은 세 개의 관계 연산을 동시해 수행하는 작업이다. 

 

2. Insert

관계형 모델에는 갱신이라는 개념이 존재하지 않는다.

왜냐하면 릴레이션은 값이기 때문이다. 

설명을 돕기 위해 예시를 넣어보겠다. 

int main(){
	int a = 1;
	a = a + 2;
	printf("%d\n", a);
}

여기서 a의 값은 객신이 되었지만 사실 갱신이 된 것은 값이 들어가있는 변수이다. 

즉 변수는 시시각각 변할 수 있지만, 값이 가진 의미 즉 a는 변하지 않는다는 것이다.

이해가 안된다면 메모리를 생각해보면 메모리 주소에 있는 값은 변할 수 있지만 메모리 주소는 변하지 않는다는 것이다.

 

그런데 SQL에서는 테이블 내의 값을 변경할 수 있다. 이와 같은 모순은 테이블이 값과 변수라는 양쪽의 역활을 하기 때문이다. 관계형 모델에서 릴레이션을 저장하는 변수는 Relvar( 관계 변수 )라고 한다. 즉 SQL에서 테이블의 갱신 처리는 Relvar의 역활로 테이블에 할당된 릴레이션의 값을 변경하는 것이다. 

 

Insert 는 Relvar의 값을 해당 릴레이션에 새롭게 삽입할 튜플( 행 )을 추가하고 릴레이션과 바꾸는 작업에 해당한다. 

R := R ∪ { T } ( 이때 T는 새로운 행 )

 

INSERT INTO t( c1, c2, c3) VALUES (1, 2, 3);

 

 

3. Delete

insert가 합집합이면, delete는 차집합이라고 할 수있다. 

R := R - { T } ( 이때 T는 새로운 행 )

 

DELETE FROM t WHERE c1 = 100;

 

 

4. Update 

 

UPDATE t SET c1 = 1 WHERE c2 = 123;

정확한 UPDATE에 대한 표현 

  전체 릴레이션에서 WHERE 절의 조건에 맞는 튜플로 이뤄진 릴레이션의 차집합을 구한다.

  위의 결과인 릴레이션에 수정을 가한 릴레이션과의 합집합을 구한다.

  위의 합집합을 Relvar에 대입한다. 

R := ( R = { T1 } ) ∪ { T2 }

 

 

 

SQL 과  관계형 모델의 차이점 

  SQL 관계형 모델
요소의 중복 가능 불가능
요소 사이의 순서  있음 없음
릴레이션의 갱신 가능 불가능
트랜잭션 SQL 사양의 일부 독립적인 개념
스토어드 프로시저 있음 없음
NULL 있음 없음

릴레이션의 갱신의 위에 더 자세히 설명했으니 참고하면 좋을 것 같다.

'DB > 관계형 DB' 카테고리의 다른 글

procedure  (0) 2020.12.29
mysql - CRUD 작업하기  (0) 2020.12.28
MYSQL 사용법  (0) 2020.12.27
술어논리와 릴레이션의 연산 #1  (0) 2020.12.02
관계형 모델  (0) 2020.11.28