오랜만에 데이터 베이스에 관련해여 포스트를 작성한다.
조금씩 공부하고 포스트를 올리는 것보다는 몇 단원정도 전체를 흝어본후 포스트를 쓰는게 더 나을 것 같아서 근간에 글을 올리지 않았다 ㅋ

SELECT

이번에는 Select에 대해 알아보자.

Select문은 원하는 자료를 찾아서 출력해주는 명령어이다.
사용법은 단순하다.

SELECT [Field(column)] FROM [table_name] WHERE [조건들.......]

위는 해당 테이블 내의 조건에 맞는 필드들을 출력해주는 것이다. 출력은 열에 맞추어 출력하고 조건은 행의 자료에 맞춰 출력이 된다.

보통 많이 쓰이는 예를 들어보자.


테이블은 미리 작성해둔 것이고, 명령어 select * from easy_drinks 에서 easy_drinks는 테이블 네임이고 "*" 은 모든 Field=column을 출력하겠다는 뜻이다.

위처럼 출력하면 지저분하고 원하는 자료를 검색하기가 쉽지 않다.
그래서 사용되는 것이 바로 WHERE절이다. 이 WHERE절은 DELETE절이나 UPDATE문등 다양하게 쓰이기 때문에 잘 알아둬야 한다. 솔직히 프로그래밍 언어에 익숙한 사람에게는 별 것 없고, 조건 절이라고 생각하면 된다. select절 에서는 어떤 조건으로 검색된 Record의 Field를 출력할 것인지를 판별한다.

그럼 위의 보기 지저분한 소스를 (확인하고자하는 조건)에 맞추어 SELECT를 해보자.


급하게 쓰느라 소문자로 써버렸다 -.-; 사실 소문자, 대문자는 단지 가독성을 위한것이다.

위 결과만 보면 일단 지저분한 상단보다 단순하게 나온 것을 알 수 있을 것이다. 
내가 테이블로부터 알고 싶은 것은 가게 이름과 요리들이다. 그리고 조건은 싸구려 요리들만 검색해 보았다.

SELECT drink_name,main,second FROM easy_drinks WHERE amount1<2.5 AND amount2<4.0;

처음의 밑줄친 곳은 보여질 Field의 이름이고 두번째 밑줄은 테이블 명이다.
내가 원하는 것은 가게 이름과 요리들이기 때문에 drink_name과 main, second를 설정하였다. 가로 없이 쉼표로만 표현 가능하다.
easy_drinks는 단순히 테이블 명이다.

WHERE 이하는 검색 조건으로서 record 내의 값을 분류하게 된다.
내가 설정한 조건은 메인 요리가 2.5달러보다 싸고 세컨요리가 4.0달라보다 싼요리다.

※ 참고할 것 : 문자열이나 문자를 my-sql에서는 '로 시작 종료를 하는데 그럼 문자열 내의 '는 어떻게 처리하는지가 문제가 된다. 그 점은 여타 언어와 같이 \'을 사용한다. 역슬래시 '를 사용하는 것이다. 그러면 단순 문자 '로 처리된다. 그렇지 않으면 '(작은따옴표)의 개수 오류로 에러처리가 되거나 다음 쉼표를 기다리는 대기 열만 계속해서 나올 것이다.

WHERE

아마 WHERE절 사용법은 딱 보면 감이 올 것이다.
조건이 하나일 경우에는 하나만 사용하면 되고 여러개일 경우에는 AND와 OR을 사용할 수 있다.

AND는 둘다 참일 경우 : (다른말로) 첫번째가 거짓이면 검사 종료 (라고 표현하기도 한다.)
OR은 둘중 하나만 만족할 경우 : (다른말로)  첫번째가 참이면 검사 종료 (라고 표현하기도 한다.)

비교연산자는 =, <>, <, > , <=, >= 가 존재한다.
여타 언어랑 유의깊게 봐야할 것은 =이 ==과 같이 쓰인다는 것이다. 비교연산자나 바인딩할때도 같이 사용된다. 또한 !=가아니라 <>가 사용된다. ( 둘다 같지 않다의 의미)

만약 찾으려고 하는 VALUES값이 NULL이면 어떻게 해야 할 것인가
생각하는 것처럼 amount1=NULL 또는 amount1=0 또는 amount1='NULL'을 하면 3게다 되지 않는다.
NULL이 C,C++처럼 0으로 처리되지 않기 때문에 안되고 NULL은 정의되지 않은 값으로 나온다.

이 경우에는 "IS NULL"을 사용한다. 


위를 보면 is null을 통해 age가 널처리된 값을 뽑아낼 수 있다. 

자료를 검색할때 단어내의 원하는 부분이 있는 단어를 원할 때가 있다. 즉 원하는 문자의 일부만으로 결과를 찾아내고 싶을때는 와일드카드 문자를 사용할 수 있다.

이때 사용되는 것은 "LIKE"이다.

LIKE다음에는 %와 _ 두개의 와일드 카드가 사용된다.

% : 다수의 불특정 문자를 의미
_  : 하나의 불특정 문자를 의미

은근히 유용하게 쓰인다. 한번 사용해 보자.


보는 바와 같이 원하는 결과를 얻어낼 수 있다.
LIKE가 등호 대신에 사용된다고 생각하면 이해하기 편할 것이다. '내용~~' 이로 이루어지듯이 문자나 문자열을 대상으로만 가능하다.

어떤 사이의 구간을 표시하기 위해서는 BETWEEN 'A' AND 'B' 가 쓰인다. 물론 A와 B는 정수이다.(문자도 되긴된다. 아스키 코드기준값으로...)
숙어 뜻대로 A와 B사이의 값을 골라준다.

사용예를 보자.


BETWEEN 20 AND 30은 20과 30사이의 값을 찾아달라는 것이다. age 다음에 between이 나왔으므로 등호연산자(=)처럼 사용되었다고 생각해도 된다. 이런명령어는 기본이 AND OR등으로 이루어져있는데 사용자 편의를 위해 등장한 것이다.

다음으로 알아볼 것은 IN이다. 이것은 여러 OR절들의 집합체라고 할 수 있다. 아니 OR의 집합들의 간소화라고 표하는게 더 어울릴 것이다.
사용 예를 보자.


이는 계속 사용해 왔던 shin444 테이블을 select한 것이다. 
WHERE age IN('26','28','12')를 말로 풀어서 쓰면 다음과 같다.

age 필드내에 26이거나 28이거나 12의 값이 있다면 선택하라.

이는 OR문으로 여러개를 선택해야할 때 IN을 통해 간단하게 표현된다. IN또한 등호처럼 생각하면 된다^^;


알아본 WHERE내에 특수한 경우는 LIKE와 BETWEEN, IN 3가지가 있었다.

마지막 한가지는 NOT이다. 이 NOT은 말그대로 부정을 의미하고 이를 이용하여 하나의 표현을 다른표현으로서 가능하게 한다. 이는 곧 쿼리문 간소화에도 영향을 끼친다. 
NOT의 위치는 WHERE 바로 뒤에 사용된다. 모든 기본위치는 NOT이 WHERE뒤에 있는것이고 가끔 예외가 있다. 특수한 예는 NOT IN과 IS NOT NULL 정도가 있다.
헷갈린다면 WHERE다음에 무조건 NOT을 사용하면 될 것이다.

2017/02/28 20:39 2017/02/28 20:39

Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다