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 |