Introduction

1장에서 왜 구조적 이지? 라고 생각했는데, 2장을 보니 그러한 설명이 없다. 아마도 전체를 다 보면, "이래서 구조적이구나!" 라고 할 수 있을 것 이라고 기대 한다. 2장에선 SQL을 사용하여 데이터베이스에서 정보를 가져 오는 방법을 설명한다.

Content

데이터베이스에서 정보를 가져 오려면 어떻게 해야 하는가?

SQL 언어에서 SELECT 를 이용해야 한다.

SELECT는 무엇인가?

C++ 의 int, if, while 처럼, 키워드이다. 키워드는 항상 제약과 사용방법이 있는데, 제약으로는 테이블 이름을 SELECT로 하용 할 수 없는 것이다.

어떻게 SELECT를 사용 하는가?

SELECT는 무엇을 어디서 가져 올지 정해주어야 사용 할 수 있다. 여기서 말하는 무엇은 "열" 이며, 어디는 "테이블" 이다. 무엇을 정해 주려면, SELECT 바로 다음에 기입하면 되고, 어디서를 정하기 위해선 FROM 을 기입 후 바로 다음에 테이블 명을 정해 주어야 한다.

예) SELECT prod_name FROM Products;


DB 테이블 샘플은 http://www.forta.com/books/0672325675/ 에서 다운로드 받을 수 있다. 주의 해야 할 점은 DB 종류마다 테이블 생성 SQL이나 기입하는 SQL이 다르므로, SQL을 다운로드 받아야 한다. 나 같은 경우 PostgreSQL 을 받았다.

여러열을 가져오고 싶다면 어떻게 해야 할까?

무엇을 부분을 " , " 로 구분 지어, 여러개를 입력하면 된다. 예) SELECT prod_name, prod_id, prod_price FROM Products;


이렇게 콤마를 사용 할 때 주의 해야 할 점이 있는데, 선택한 가장 마지막 열에는 "," 를 사용해선 안된다. 이것은 문법이므로, 사용 하게 되면, 문법 오류가 나서 실행이 안된다.

일일이 기입하기 귀찮은데, 모든 열을 선택하는 방법이 있는가?

무엇을 부분에 " * " 를 기입하면 된다. 예) SELECT * FROM Products;


여기서 반환되는 열의 순서는 테이블 정의에 있는 열 위치 순서이다.

주의 해야 할 것이나, 더 알아야 하는 것이 있는가?

와일드카드( * )를 사용 시 주의 해야 할 점

꼭 필요한지를 생각해야 한다. 많은 열을 선택하게 되면, 시간이 많이 걸리고 DB도 부하가 많이 걸리기 때문이다. 실제로 열이 30개가 있고, 행이 5만개가 있을 때, 와일드카드로 모든 정보를 가져 오게 되면, 필요한 것만 선택해서 가져 오는 것보다 많은 시간이 걸린다.

데이터를 가져온 순서

이렇게 가져온 데이터는 정렬이 되어 있지 않다. 그렇다고 테이블에 추가된 순서라고 단정 지을 수도 없다. 정렬을 필요 할 땐 정렬을 쓰는게 더 안정적이다.

쿼리문의 대소문자 구분

쿼리문 자체에는 대소문자 구분을 하지 않으나, DB에서 테이블 이름이나, 열 이름의 경우 구분을 할 수 있다. 여기서 할 수 있다고 말하는 이유는 DB 종류마다 구분하거나, 안하거나 하기 때문이다.

키워드는 대문자로 구분

SELECT 나 FROM 같은 키워드는 대문자로 쓰는게 더 가독성이 좋다. 이 가독성이 빛을 낼 때는 복잡한 퀴리문을 만들 때이다.

그렇다면 데이터를 순서데로 가져오려면 어떻게 해야 하는가?

정렬을 해야하며, 3장에서 다룬다.

Digression

데비안 머신에 postgreSQL 을 설치 했다. 설치는 무척 간단하다. bin 파일만 가져와서 실행만 시키면 되기 때문이다. 글에 그림이 있으니, 없는 것 보다는 더 쉽다.


posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요