본문 바로가기

Data Literacy/SQL

Chapter 3. 집합 연산자와 서브쿼리 - (1) 관계형 데이터베이스의 정의

PostgreSQL logo image

 

 

이번 아티클부터는 새로운 챕터를 통해서 몇 가지 집합 연산자와 이와 관련된 서브쿼리를 배워볼 예정입니다. 이번 시간에 배우는 개념들은 SQL을 이해하는 데 있어서 매우 중요합니다. 왜냐하면, 앞선 내용의 아티클까지는 '이렇게 입력하면 이거랑 저거랑 붙는다'라는 식으로 관념적인 설명을 최대한 배제하였기 때문이죠. 

 

이번에 집합 연산자라는 쉬운 개념으로 SQL을 다루면서, 본질적으로는 RDBMS, 즉 관계형 모델 구성 원리와 집합으로서의 테이블에 대한 관계 정의를 심도 있게 다룰 예정입니다. 단순히 테이블 병합, 데이터 추출이라는 기능적인 내용이라고 단정 짓지 마시고, 테이블에 대한 개념적 이해를 높이고 SQL의 쿼리에 접근하는 관점을 발전시켜 보도록 하겠습니다. 

 

 

 


 

 

○ 집합과 SQL, 그리고 '관계'

 

지금부터는 용어에 대한 개념을 (자체적인 흐름에 따라)정리해 보도록 하겠습니다. 물론 철저히 비전공자의 관점에서 이해를 주목적으로 정리한 것이므로 학문적인 목적은 다른 아티클이나 도서를 참고하시는 것을 추천드립니다. 

 

우선 관계(Relation)이라는 단어를 수학적 용어로서 먼저 살펴볼까요? 집합론에서 어떤 두 집합 간에 연관성이 있음을 보여주는 조합을 통칭하는 개념입니다. 예를 들어 집합 A, 집합 B가 있는데 A의 원소가 B에 포함되었다... 는 간단한 정의가 이 두 집합 사이의 '관계'를 나타내는 것이죠. 아주아주 포괄적인 관념입니다. 

 

수학시간에 '함수'를 배우면서 X와 Y의 요소들을 작성하고 화살표로 죽죽 이어서 대응관계를 설명하던 것이 기억나시나요? 여기서 이 함수는 관계의 하위 개념입니다. 1:1, 1:N으로 대응하는 특수한 관계를 "함수"라고 부르는 것이죠. 함수뿐만 아니라 [⊂ : 집합이 집합을 포함 , ∈ : 원소가 집합에 속함]과 같은 포함관계, 같은 개념인 동치관계, 순서 또는 비교 관계, 역 관계, 그리고 함수관계를 포함하는 광범위한 개념이 바로 수학적 개념인 '관계'입니다. 

 

 

위의 그림과 같이 하나의 관계 'R'을 화살표 선도와 표를 통해서 다양하게 표현할 수 있습니다. 행렬도 관계 표현 방식중의 하나입니다. 

 

자, 지금까지는 수학적 관점에서 '관계'를 살펴보았습니다. 그럼 이러한 개념을 바탕으로 데이터베이스에서의 관계에 대해서도 살펴보겠습니다. 

 

 


 

 

 

○ 데이터베이스에서의 '관계'

 

수학적인 관점에서 관계에서 데이터베이스 관점으로 넘어오게 되면, 살짝 관념이 달라지기 때문에 헷갈릴 수 있습니다. 일단 데이터베이스에서의 '관계(Relation)'는 곧 테이블(table)이나 뷰(view)의 레벨을 의미하게 됩니다. 이 관계로서의 테이블이 우리가 흔히 아는 스프레드 시트 형태의 2차원 테이블 형태입니다. 

 

그리고 이 테이블(관계) 하나는 하나의 "집합" 개념이 됩니다. 위의 이미지에서 {0, 1, 2} 집합 하나가 하나의 테이블(관계)이 되는 개념이죠. 하지만 여기서 의문이 생길 수도 있습니다. 위에서 테이블(관계)은 2차원 구조로 되어 있기 때문입니다. 요소 {0, 1, 2}는 1차원 구조인 것 같습니다. 

 

우선 여기서 짚고 넘어가야 할 부분은 테이블(관계)의 근본적인 데이터 구조는 "행(Row)"입니다. 즉 요소 0, 1, 2는 각각 하나의 행(Row)을 의미합니다. 이를 데이터베이스에서 '튜플(Tuple)'로 표현합니다. 

 

그럼 열(Column)은 어떻게 될까요? 이 테이블에서 '열'은 각각의 튜플(행, Row)이 갖는 속성(Attribute)의 개념입니다. 

 

 

 

위와 같이 John이라는 데이터 요소 행 하나가 하나의 집합에서의 요소이며, 각각 no.와 name, 성별이라는 속성(열)을 갖는 구조이죠. 

 

이제 지금까지 배운 내용을 바탕으로 Union과 Join에 대한 개념을 살펴보도록 하겠습니다.