-----------------------------------------------------------------
Week 3: Querying data using SQL
제3주차: 스퀠(SQL)을 이용한 자료 조회
- How to use databases to analyse your data
획득한 자료를 분석하기 위해 데이터베이스 활용하는 법
- Investigating exoplanets in other solar systems
다른 태양계의 외계행성 탐사
-----------------------------------------------------------------
Lesson 1. Organizing your data / 한글자막
-----------------------------------------------------------------
2강: 외계 행성을 찾아서
Lesson 2: Other world, Distant sun: Search for exoplanet / 한글자막
-----------------------------------------------------------------
3강: SQL로 천문관측 데이터베이스 자료 검색
[00:06] 이번 강의에서 데이터 베이스 조회(query)를 직접 해보고 어떻게 작동하는지 보기로 하자. 모든 조회는 구조화된 조회언어(SQL, structured query language)로 작성된다. 아마 사람들이 SQL을 '스퀠'이라고 부르는 것을 들어봤을 것이다. SQL은 선언형(declarative) 프로그래밍 언어다. 여러분이 아마 사용해 봤을 C 나 파이썬 같은 절차형(procedural) 언어와는 작동 방식이 다소 다르다. 절차형 언어가 목적에 접근하는 순서를 서술하는 반면 선언형 언어는 원하는 것을 정의한다.
* 구조적(structured): 계층'구조'의 의미로 독립된 함수를 정의 할 수 있다. 함수의 독립은 변수의 완전한 지역화도 포함된다. 함수 내에서 다른 함수를 호출 하므로써 상하위 함수관계를 갖는다. 대부분 컴퓨터 언어는 '구조화' 되어 있다.
OPEN_DATABASE_FILE(exoplanet);
WHILE(NOT END_OF_FILE)
BEGIN
IF kepler_id==545661 THEN
GET kepler_name;
BREAK;
ELSE
NEXT_FILE_POINTER();
ENDIF
END
[선언형언어]------------------------------
SELECT kepler_name FROM exoplanet WHERE kepler_id EQ 5456651;
[00:33] 데이터 베이스에 보유된 자료들은 모두 표로 저장되어 있다. 이번 강좌에서 표로 만들어진 외계행성에 관한 정보를 사용할 것이다. 이 표는 NASA의 외계행성 자료 보관철에서 일부 따와 준비했다.

[00:43] 각 행(row)에 행성에 관한 정보를 담고 있고 열(column)은 그 행성의 속성(attribute) 또는 특성(property)을 기술한다. 예를 들어 두번째 행에 케플러 239c(Kepler-239 c)라는 이름(kepler_name)의 행성이 있다. 이 행성은 외계행성으로 확인된(CONFIRMED) 상태(status)이며, 공전 주기(orbit period)가 56일이다. 그리고 반경(radius)이 지구보다 2.19배 크다. 가장 왼쪽 열은 이 행성이 속한 별의 식별 부호다(kepler_id).
[01:09] 각 속성은 허용될 값의 범위가 있는데 흔히 자료형(data type)이라는 것이다. 예를 들어 '상태(status)'라는 속성은 문자열(string) 형식의 자료를 담을 수 있고, kepler_id는 정수형(integer)이다. SQL의 조회에서 한개 이상의 표(table)를 인수로 취하며 조회결과로 새로운 표로 되돌려준다. 자 이제 첫번째 조회를 시도해 보자.
SELECT kepler_name FROM exoplanet WHERE kepler_id = '5456651';
[01:35] 영어 평상문으로 하면 이런 뜻이다.
"exoplanet라는 표에서 kepler_id 열의 값이 5456651과 일치하는 행을 찾아라. 그렇게 찾은 행에서 kepler_name 이라는 열의 값을 가져오라."

[01:49] 이 조회문의 결과는 다음과 같다. 케플러 ID가 5456651인 별은 두개의 행성을 가지고 있는데 그 이름이 각각 Kepler-239b 와 Kepler-239c 다. 관례에 의하면 행성의 이름은 케플러 숫자 뒤에 소문자를 붙인다. 소문자 a 는 없는데 행성계의 중심별에 붙이기 때문이다.

[02:12] 앞서 본 대로 SQL의 SELECT 조회문은 세개의 부분으로 나뉜다. 먼저 조회에 사용할 표를 입력으로 명시하고 그 표에서 조건에 맞는 행을 찾아내어 결과표를 만든다. 그리고 결과로 만든 표에서 열에 해당하는 값을 가져온다. 이 프로그램에는 그외 다른 어떤 정보도 포함하지 않는다. 자료가 어떻게 저장되었는지 어떤 형식을 취하는지 따질 필요도 없다. 값을 어떻게 읽어내며 어떻게 전달하는지도 명시하지 않는다. 또는 파이썬 처럼 절차형 언어에서 읽어올 자료형에 대한 고려도 필요없다.
int kepler_id = 5456651; // 정수형 데이터 읽어 변수에 담기
char *kepler_name;
string_copy(kepler_name, "Kepler-239b"); // 문자열 데이터 읽기
[02:42] 그럼 이 조회문을 실행하면 어떤일이 벌어질까? 조회문이 데이터베이스 서버로 전달되면 일련의 점검단계를 거친다. 이 문장을 실행하기 위한 승인 인데 자료에 접근하기 위해 승인되었는지, 문장의 문법이 요건에 맞는지 검사한다. 이 검사에 하자가 없다면 조회문은 조회 최적화 장치에 전달된다. 이 장치는 조회를 실행하기 위한 가장 효율적인 방법을 결정한다. (파이썬으로 프로그램을 작성 할 때 검색 알고리즘을 직접 작성 했었다.) 최적화 장치는 조회를 수행하기 위해 서버에서 사용할 실행 계획을 세운다. (조회에 적합한 검색 알고리즘을 선택한다.) 끝으로 조회 결과를 되돌려준다.

[03:14] 이 과정은 컴퓨터 과학의 여러 사항들을 포함하고 있다. 하지만 (컴퓨터 기술자가 아닌) 과학자로서 무엇보다도 유용한 점은 그 구체적인 절차를 직접 만들어 내야 하는 입장이 아니라면 이런 절차를 알고 있어야 할 필요가 없다는 것이다. 이번 강의의 끝에 가서 좀더 복잡한 조회 문장을 다뤄보기로 한다.
[03:29] 데이터 베이스에서 자료를 고를 때 '~보다 크다' 또는 '작다'와 같은 관계 연산자를 사용 했다. 이번에는 우리의 자료뭉치에서 지구의 지름의 0.6배보다 작은 행성을 모두 찾아 보기로 하자.
SELECT * FROM exoplanet WHERE radius < 0.6;
(주) 위 문장에서 '*'는 와일드카드 문자로 '모든'의 의미다.
[03:42] 이 조회문으로 같은 자료철에서 두개의 행성을 조회해 냈다. 둘다 같은 행성계에 있다. 그 둘은 Kepler-102b 와 Kepler-102c 다. Kepler-102는 다행성계로 잘 알려져 있는데 다섯개의 행성을 가지고 있으며 지구 지름에 비해 0.5에서 2.5배에 이른다.

[03:59] 행성의 크기별 조회 목록은 유용하다. 행성의 크기로 지표면의 상태를 추청해볼 수 있기 때문이다. 목성처럼 거대하면 기체행성이 된다. 반면 지구보다 작은 행성은 바위 투성일 가능성이 높다. 초 지구라고 하는 행성이 관심의 대상이다. 우리 태양계에는 지구보다 조금 큰 부류의 행성이 존재하지 않는다. 따라서 우리는 그런 행성이 어떤 모습을 하게될지 알지 못한다. 그 행성에 매우 깊은 바다가 존재할까? 해왕성처럼 기체행성 일까? 혹은 금성처럼 바위 투성이 일까? 지름으로 행성을 분류해 놓고 천문학자들은 행성 과학 분야의 후속 연구를 진행 할 수 있을 것이다.

댓글 없음:
댓글 쓰기