챕터 3는 Data Manipulate Language의 대표적인 언어 SQL에 대해서 배웠는데 양이 가장 많았다. 그리고 강의 중에 예를 드는 게 너무 많아서 힘들었지만 그래도 어찌저찌 잘 끝낸 거 같아서 다행이었다.
일단 SQL 첫 강의에서는 SQL에 대한 간단한 개요에 대해서 배웠는데
SQL의 역사에 대해 간단히 배우고 SQL 도메인 타입과 무결성 제약조건에 대해서 배웠는데
무결성 제약조건은 간단하게 1. null 값을 가질 수 없고 2. 기본키를 구성하는 속성은 null값, 중복된 값을 가질 수 없고 이미 릴레이션 안에 존재하는 기본 키 값을 가진 tuple은 삽입될 수 없다였다 그리고 릴레이션을 정의하는 예를 보고 릴레이션의 스키마를 삭제하거나 수정하는 명령어까지 알아봤다
두 번째 강의에서는 기본적인 쿼리 구조에 대해서 배웠는데
기본적으로
이 형태로 사용된다.
그리고 두 개 이상의 릴레이션을 함께 사용해서 원하는 데이터를 얻는 방법을 Joins라고 한다
세 번째 강의에서는 SQL 사용 방법에 대해서 배웠는데
두 릴레이션에 공통으로 있는 속성들의 값을 비교해서 공통 속성의 값이 같은 tuple끼리 결합시키는게 Natural Join이다
그래서 두 릴레이션을 상대로 동작하고 하나의 릴레이션을 결과로 돌려준다
그리고 Join Using이라고 어떤 속성을 이용해서 연결시키고 싶은지 정해줄 수 있다
이 다음에는 Rename Operation이라고 as절을 이용해 릴레이션이나 속성의 이름을 바꿀 수 있는데
마지막으로 문자열을 비교하기 위한 String Operation을 배웠는데 연산자 like를 사용해서 문자열을 비교할 수 있다
% - 한 개 이상의 문자를 의미, _ - 한 개의 단일 문자를 의미
네 번째 강의에서는 중복값과 집합 연산에 대해 배웠는데
중복된 값을 허용하는 집합을 멀티셋이라 하는데 관계 대수 연산의 멀티셋 버전의 결과에는 멀티셋이 그대로 유지된다.
집합 연산은 Union(합집합),Intersect(교집합),Except(교집합) 연산이 있다. 이 연산들은 멀티셋 버전이 아니라 자동으로 중복을 제거해준다
뒤에 all 붙여주면 중복된 값을 유지하기 위해 사용할 수있다 R union all s, R intersect all s, R except all s
문제에 or이 있으면 union연산 and가 있으면 intersect연산, not but이 있으면 except 연산을 해주면 된다
다섯 번째 강의에서는 null값과 집계 함수에 대해 배웠는데
null값을 포함하는 연산의 결과는 항상 null이고
null값이 포함된 비교의 결과는 unknown으로 처리한다
집계 함수는 많이 사용되는 중요한 함수인데
입력 값으로 column들의 멀티셋을 입력으로 받아서 연산을 하고 그 결과값으로 하나의 값을 돌려주는 연산이다
avg,min,max,sum,count가 있고 우리가 데이터를 쉽게 다룰 수 있도록 해준다
집계함수는 where절에서 사용될 수 없고 select절이나 having절에서만 사용될 수 있다
sum과 avg는 숫자만을 입력 가능하고 나머지는 다른 데이터 타입도 입력 가능하다
테이블의 특정 속성의 값이 같은 tuple들을 모아서 그룹을 만들고 그룹별로 검색하기 위해서 group by 키워드를 사용하는데 여러 튜플 집합에 대해 집계 함수를 사용하고 싶을 때 사용한다
Having절은 group by로 만들어진 그룹에 대한 조건을 써줄 때 사용한다
여섯 번째 강의 에서는 nested subquery에 대해서 배웠는데
쿼리 안에 다른 쿼리가 있는 것으로 좀 더 복잡한 표현을 할 수 있고 여러 개의 쿼리를 써서 표현해야 하는 것을 하나의 쿼리문으로 표현할 수 있다
subquery는 set membership, set comparison, set cardinality에 대한 테스트를 수행할 때 사용하고
set membership은 튜플이 어떤 집합의 멤버인지 아닌지 테스트하는데 in과 not in 연결사가 있다
in은 튜플이 어떤 집합의 멤버인지 테스트하는 거고 not in은 튜플이 어띤 집합의 멤버가 아닌지 테스트하는 거다
set comparison은 메인 쿼리의 결과와 subquery의 결과를 비교하는 것이다
set cardinality는 집합의 크기를 나타내는 데
some절은 subquery의 결과 중 하나라도 비교한 결과가 참이면 where의 조건을 만족한다
all절은 모든 튜플이 비교 연산식을 만족해야 참이다.
마지막 강의는 With절과 Scalar Subquery, 데이터베이스에서 수정에 대해 배웠다
with절은 with절이 있는 쿼리에서만 유효한 임시 뷰(다른 릴레이션을 기반으로 만들어지는 가상의 릴레이션)를 정의할 수 있게 해준다
Scalar Subquery는 하나의 값이 필요한 곳에 사용되는 subquery이다
데이터베이스에서 수정은
delete from r
where 삭제할 튜플
insert into r 속성 리스트
values 속성들의 값
update r
set 속성 값 = 변경할 속성값
이런 식으로 쓰이는 데 update는 case문을 이용해서 여러 조건을 적어줄 수 있다
이렇게 sql에 대해서 배워봤는데 처음에는 너무 내용도 많고 예시도 많아서 보느라 힘들었지만 이렇게 하나하나 ppt로 정리하고 블로그에 다시 정리해보니까 전체적인 윤곽이 잡히는 거 같고 유용하게 쓸 수 있을 거 같아서 기분이 후련했다.
'CS > 데이터베이스' 카테고리의 다른 글
Ch6. Entity-Relationship Model (0) | 2020.01.29 |
---|---|
Ch5. Advanced SQL (0) | 2020.01.23 |
Ch4. Intermediate SQL (0) | 2020.01.22 |
Ch2. Relational Model (0) | 2020.01.09 |
Ch1. 데이터베이스 소개 (0) | 2020.01.07 |