이번 내용은 특별히 커맨드 창 스크린샷은 첨부하지 않겠습니다.
(책으로 공부를 좀 하고 있는데, 책에 기본 예제 형태로 되어있는 테이블을 전부 따라서 치기 귀찮아서 대충 넘겼더니, 여기서는 그 정도는 쳐 주었어야 스크린 샷을 찍을만한 내용이었네요. -_-)

* 검색 조건이 2가지일때

예를 들어서 우리가 검색엔진에서 '지하철' 이라는 키워드와 '노선도' 라는 키워드를 동시에 필요로하는 검색을 한다고 합시다. 물론 '지하철 노선도' 라고 치면 우리가 찾는 그 이미지나, 기능을 가지고 있는 것이 바로 보여질 것이고, 테이블에서 조건을 기준으로 하는 것과는 약간 예에서 핀트가 어긋날 수 있습니다만... -_-
여튼, '지하철 노선도' 라는 키워드로 검색을 한다면 가장 상위에는 '지하철' 과 '노선도'를 동시에 포함하고 있는 것이 상위에 노출이 될 것이고, 아래로 내려갈수록 '지하철' 혹은 '노선도' 이렇게 키워드 둘 중 하나만 가지고 있는 내용들도 나타날 것입니다.

여기서 2가지 조건을 모두 만족시키는 것이 AND 이고, 2가지 조건 중 하나만 만족을 시키면 되는 것이 OR입니다.
(고등학생 때, 확률 문제를 풀다보면, 그리고 혹은 또는 과 같이 말장난으로 사용해야 하는 수학 공식이 마구 바뀌었던 악몽이 떠오르는군요. -_-)

여기서 AND와 OR는 그러한 말장난이 아니고, AND 연산자와 OR 연산자는 원래 그런 것입니다. (원래는 논리 회로적인 부분으로 설명을 드리고 싶지만 저에게는 그정도의 친절함을 여기서 발휘하기는 힘들군요. 지금 우리는 회로를 배우는 것이 아니기 때문이죠. -_-)

따라서 2가지 조건을 모두 만족시키는 데이터를 검색하기 위한 내용은 아래와 같이 사용합니다.

select title, publisher, price from tblBookInfo
>>where publisher = "Wiki" and price > 20000;

그러면 출판사가 'Wiki'로 되어있는 자료 중에서 가격이 20000이 넘는 자료들만 표시를 해 줄 것입니다. 표시는 select에서 제목, 출판사, 가격을 선택을 하였으니 해당하는 자료들만 보여주겠군요. -_-

2가지 조건 중 한가지만 만족을 하면 되는 경우에는 아래와 같이 사용합니다.

select title, publisher, price form tblBookInfo
>>where publisher = "Wiki" or price >25000;

그러면 출판사가 'Wiki'로 되어있는 자료와 가격이 25000이 넘는 자료들이 모두 표시가 될 것입니다. 둘 중 한가지 조건만 맞으면 되기 때문에 출판사가 'Wiki'이면서 가격이 25000이하여도 출력이 될 것이고, 가격이 25000이 넘기만 한다면 출판사는 신경쓰지 않아도 되는 그런 조건입니다. select 에서 제목과 출판사, 가격을 적었으니 해당하는 자료만 출력이 될 것입니다.


* 와일드 카드(LIKE)를 이용한 필터링

우리가 검색엔진에서 예전에 한번 봤던 영화의 제목 중 일부분만 생각이 나서 검색을 하려고 하면 어떻게 되나요? 네, 물론 잘 나올겁니다. -_- 하지만 테이블에서는 어떠한 방법으로 필터링을 하는지에 대해서 적어보았습니다.

like를 이용하여 검색을 하는 방법에는 2가지가 있습니다.
%와 _ 입니다. 우선 예를 들어보도록 하겠습니다.

Sno% => Snoable, Snoiajdjek, Sno9090wi, ... (다수의 문자)
Sno_ =>Snow, Snoe, Snop, Snoj, ... (하나의 문자)

즉, %를 입력을 하면, 다수의 문자가 전부 나오게 되는 것입니다. 그러면 보통 %로 입력을 하는 것이 좋지 않겠느냐? 하고 생각을 하시는 분들이 계실지도 모릅니다. 네, 느려지겠죠. 조금이라도 좋지 않은 컴퓨터에서 구글에서 검색을 하실 때, 문자 하나를 받을 때마다 페이지가 바뀌면 얼마나 짜증이 날까요? 당해보지 않은 사람은 모릅니다. -_-

이러한 %, _는 문자의 앞과 뒤에 사용할 수 있습니다. 사용 예제를 보도록 하겠습니다.

select title, publisher, from tblBookInfo where title like 'C%';

이렇게 검색을 한다면 제목 중에서 C로 시작을 하는 모든 책의 검색 결과를 보여주겠군요. 물론 select에서 설정을 하였으니 제목과 출판사만 표기된 테이블이 출력이 될겁니다.

한가지 중요한 것... like 연산은 대 소문자를 구분하지 않습니다. -_-


* 범위 검색

중학교 영어 시간에 배웠던 것 같습니다. (요즘은 초등학생때 배우겠군요. -_-... 아 세월이란 참... -_-)
여튼, Between A and B가 무엇인지 기억나시나요? 네, A와 B 사이입니다.

검색을 할 때, 같은 컬럼에서 2가지 조건을 검색을 하는 경우가 발생할 수 있습니다. 책에서는 예제로 가격이 나왔습니다. (20000 이상이고 30000이하라고...) 이러한 경우에는 각각에 맞게 AND 연산자를 이용하여 price를 2번이나 쳐 주어야 하는 상황입니다.
select * from tblBookInfo
>> where price >= 20000 and price <=30000;

이렇게 나오겠죠. 하지만 이를 between a and b를 이용하여 처리를 해 보도록 하겠습니다.
select * from tblBookInfo
>> where price between 20000 and 30000;
를 하면 동일한 검색 결과를 받아볼 수 있다는 내용입니다. 별 것 아니라고 생각을 하지만 우리가 이렇게 타자를 치면서도 우리의 귀중한 칼로리가 소비되고 있는 것입니다. 우리의 칼로리는 소중하니까요. -_-


* IN

위의 between a and b의 경우 and 연산을 보다 편리하게 하기 위해서 사용이 되는 것입니다. 하지만 이번에 보실 IN은 OR 연산을 도와주는 것입니다. 책의 예를 그대로 인용을 하자면 Apress 출판사와 Wiki (사실 책에서는 Wikibooks인데 제가 타자치기 귀찮아서 db에 Wiki로 만들어버려서 그냥 계속 Wiki로 갑니다. -_-) 출판사를 분류를 하기 위한 검색을 한다면, 아래와 같이 사용을 해야 합니다.

select title, publisher from tblBookInfo
>>where publisher = 'Apress' OR publisher = 'Wiki';

하지만 여기서 이 둘은 공통점을 가지고 있습니다. 출판사 검색이라는 것이죠. 결국 출판사라는 집합이 있으면 그 집합에서 각각의 출판사를 꺼내어 보여준다는 겁니다. 따라서 IN 연산자를 이용하여 아래와 같이 변경을 해보겠습니다.

select title, publisher from tblBookInfo
>> where publisher IN ('Apress' , 'Wiki');


* NOT

이번에는 부정문입니다. 만약 제가 안드로이드와 관련된 서적을 구입을 하려고 갔는데, ergate 출판사의 사장과는 철천지 원수 지간이기 때문에 무슨 일이 있더라도 ergate 출판사에서 나온 책은 구입을 하고 싶지 않은겁니다. 따라서 일단 ergate 출판사에서 낸 책을 제외한 결과를 보고 싶을 때!!! 이렇게 합니다.

select title, publisher from tblBookInfo
>> where NOT publisher = 'ergate';

이 연산자를 이용한 총체적인 응용을 보도록 하겠습니다. (문구를 보고 어떠한 이미지가 떠오르겠다... 하는 것을 생각을 해보세요.) (NOT의 위치를 잘 알아두세요)

select title, publisher, price from tblBookInfo
>> where publisher = 'Wiki' and not price => 25000;

이렇게 검색을 하면 출판사가 Wiki이면서 가격은 25000원 이하의 자료만 추려서 제목과 출판사, 가격의 정보를 테이블로 보여주겠군요. (NOT의 위치를 잘 보세요.)

select title, publisher from tblBookInfo
>> where NOT title like '%android';
이러면 ~~~~ android라는 이름을 가진 책을 제외한 나머지 모든 책의 제목과 출판사를 보여줄 것입니다.


지금까지 not의 위치를 눈여겨보셨다면, between ~ and ~ 와, IN에서도 어떻게 사용을 할 것인지 바로 감이 오시리라 생각합니다.

select title, price from tblBookInfo
>> where not price between 25000 and 30000;

select * from tblBookInfo
>> where not publisher in ('Apress' , 'Wiki');

이미지는 그냥 떠올려보시기 바랍니다. 혹시나 눈치채지 못한 분들이 계실까봐 한마디...
자신이 검색을 하고자하는 것... 가격? 혹은 제목? 그러한 검색을 하고자하는 거서 앞에 not이 들어오고 있습니다.


* 정렬 (ORDER BY)

이러한 셀렉트 문구를 이용하여 자신이 원하는 것을 자유자제로 찾을 수 있게 되어도, 책이 제목별로 정렬이 되지 않는다거나, 혹은 출판사 검색일 때, 서로가 섞여있는 문제가 생긴다거나 하는 것을 볼 수 있습니다. 이러한 경우 정렬이 필요합니다.

우선 오름차순 정렬과 내림차순 정렬에 대한 이야기를 조금 하고 넘어갈 필요가 있습니다.

오름차순 정렬의 경우 012~ 숫자 >> 알파벳 대문자 >> 알파벳 소문자 >> 한글 의 순서로 정렬을 합니다.
내림차순은 이의 반대입니다.

어차피 보통 오름차순을 많이 사용할 것이고, 너무 자주 사용하는 것이기 때문에 오름차순이라는 ASC(Ascendant)는 입력을 하지 않아도 오름차순 정렬이 된다고 합니다. 내림차순의 경우 DESC(Descendent)입니다.

예제입니다.
select title, publisher from tblBookInfo ORDER BY title;

이렇게 하면 기존의 tblBookInfo 테이블에 저장이 되어있는 모든 정보들이 책의 제목을 기준으로 오름차순 정렬이 되어 표시가 될 것입니다.


응용을 하자면 이렇게 할 수 있습니다.

select publisher, title from tblBookInfo
>> order by publisher, title;

이렇게 한다면 먼저 출판사 이름 순서대로 정렬이 되어 표시가 될 것이고, 그 다음에 출판사 내에서 책의 이름 순서대로 정렬이 되서 보여질 것입니다.


지금까지의 내용은 아래의 책을 참고하였습니다.

SQLite3
국내도서>컴퓨터/인터넷
저자 : 우상정,신호철
출판 : 위키북스 2011.05.12
상세보기


저작자 표시 비영리 변경 금지
신고
by 가우초 2011.08.18 21:43