회원등록 비번분실

작성자 관리자
작성일 2006-01-09 (월) 14:30
ㆍ추천: 0  ㆍ조회: 4249      
IP:
WHERE절의 조건에 의한 행의 검색
WHERE절의 조건에 의한 행의 검색



자 이번시간은 WHERE절의 조건에 의한 행의 검색을 할 시간 입니다.
앞에서 where절은 조건에 사용한다고 맛보기만 살짝 보여 드렸지요?
많은 처리가 어떻게 이루어지는지 공부할 시간 입니다.
이런것을 생각해 볼까요?



sales 테이블에서 데이터를 모두 검색한 값이 이런 식이라고 생각을 해 보세요.
그런대 코난이의 직속 상관이 배가짱 팀장님이 요구를 하는 겁니다.
"음. 코난군?! 우리 PUBS 책회사는 qty 즉 팔린수량이 10권 이상인 책만 필요 하다네
오늘중으로 이 10권 이상 팔린책만 골라내게!!!! 못하면 집에 못가네!!!

DB를 공부한지 보름도 안됬는디 이런 날벼락이 떨어 진겁니다.
그래서 공부를 하기위해 책을 찾던중... 바로 WHERE 이라는 조건절의 지정이 가능한
것을 알게 되었습니다

WHERE 절에 탐색 조건을 근거하여 어떤 행을 검색할 지를 지정한다.
SELECT select_list
FROM table_list
WHERE search_conditions
주의사항
- WHERE 절에는 가능하면 NOT은 사용하지 않는 것이 좋다.
- NOT을 사용하면 색인의 도움을 받을 수 없다.
- 연산자 앞에는 가능하면 컬럼 이름이 오도록 한다

탐색 조건에 포함할 수 있는 것들
- 비교 연산자 =. >, <, >=, <=, <>, !=, !, !>
- 범위 BETWEEN, NOT BETWEEN
- 리스트 IN, NOT IN
- 일치하는 문자열 LIKE, NOT LIKE
- 알 수 없는 값 IS NULL, IS NOT NULL
- 결합 AND, OR
- 부정 NOT
의 식이 된답니다. 이제 자 팔린수가 10권 이상인 책만 보여드릴 시간이지요?

select * from sales where qty > 10


또 다른 샘플 입니다.
authors 테이블에서 zip 컬럼이 9000 보다 큰 녀석을 골라 볼까요?

SELECT * FROM authors WHERE zip > 90000

authors 테이블에서 state가 CA인 녀석들만 골라내 보지요
SELECT * FROM authors WHERE state = 'CA'

자 위의 비교와 뭔가 다른게 검색어에 붙어 있지요?
문자열의 비교는 반드시 ' ' 로 작은 땀표를 쓰셔야 합니다.
왜냐구요?
1235 라는 값과 '1235' 라는 값을 비교하기 위함이랍니다.
저게 뭐냐구요? 앞의 것은 수치형 데이터, 뒤의것은 문자열 데이터 이지요!

다음은 titles 테이블에서 price가 NULL인 녀석을 골라내 보지요


SELECT title FROM titles WHERE price IS NULL

여기서 NULL 이란 녀석에 대해 좀더 알아 볼까요?
많은 분들이 NULL이 뭔지 잘 개념을 못 잡으시고 NULL = 빈 문자열 식으로 생각하고 계십니다

아닙니다.
NULL은 값이 지정되지 않았다!!! 라는 의미 입니다.
' ' (빈문자열) 이 녀석은? 빈 문자열이 지정되어 있다는 의미이며.
NULL은? 값이 어떤 값도 지정되지 않았다는 의미 입니다.
추후 NULL에 대한 이야기가 나와도 해깔리지 마시길 바랍니다

다음은 titles테이블에서 ytd_sales가 4095 보다 크고 12000 보다 작은 녀석들만
뽑아서 봐 볼까요?


SELECT title_id, ytd_sales
FROM titles
WHERE ytd_sales > 4095 AND ytd_sales < 12000

자 비슷한 처리가 between 이라는 범위 검색이 있습니다


SELECT title_id, ytd_sales
FROM titles
WHERE ytd_sales between 4095 AND 12000

거의 비슷한듯 하지요? 하지만 바로 위의 AND 검색과 결과가 틀립니다?
실행해 보시면 아시겠지요. 바로 이상 초과 라는 측정값에 대한 부분이 다릅니다.
다음은 titles테이블에서 type이 mod_cook이거나 trad_cook 인 녀석들만 골라 보져


SELECT title, type FROM titles
WHERE type IN ('mod_cook', 'trad_cook')

위의 샘플과 약간만 달리 NOT을 사용하는 방식 입니다.
결과는 필이 오시죠?


SELECT title, type FROM titles
WHERE type IN ('mod_cook', 'trad_cook')

type이 mod_cook이거나 trad_cook 인 녀석들을 골라내 보죠.
위의 IN을 사용한 방식과는 또다른 OR을 사용한 방식입니다


SELECT title, type FROM titles
WHERE type = 'mod_cook' OR type = 'trad_cook'

자 몇몇 샘플을 알아 보셨는데요.
중요한 이야기를 드리지요.
위에서 문자열을 비교시 예를들면
WHERE type = 'mod_cook' OR type = 'trad_cook'
이런 식일 경우에요. type 이란 컬럼은 문자열 컬럼 입니다.
그냥 = 연산자를 사용해 비교를 했습니다. 글치요?
하지만 SQL서버는 다양한 문자열 조건 처리를 위해 like 사용을 권장하고 있습니다


LIKE 키워드
SELECT select_list
FROM table_list
WHERE expression [NOT] LIKE “string”
- 정규 표현식(regular expression)형식의 와일드카드 사용


와일드 카드(Wildcard)
% : 임의의 0개 이상의 문자열
_ : 임의의 한 글자
[ ] : 지정된 범위 또는 집합 안의 한 문자
[^] : 지정된 범위 또는 집합에 없는 한 문자
이런 식이지요.

먼저 샘플로 stores 테이블에서 stor_name이 앞 글자가 뭘로 시작하건 상관 없고
끝글자가 뭘로 시작하건 상관 없고 문자열상에 Books라는 문자열만 존재하는지
알고 싶을때 사용하는 LIKE 구문을 알아보면?


SELECT stor_name FROM stores
WHERE stor_name LIKE '%Books%
'

다음으로 stores 테이블에서 stor_name이 처음은 Bo로 시작하고
끝은 어때도 상관없는 샘플을 검색해 볼까요?


SELECT stor_name FROM stores
WHERE stor_name LIKE 'Bo%'

이번엔 약간 복잡한듯 하지만? 한글자 치환인 _ (언더바라고 부르지요)
를 사용해 첫글자는 E로 시작하고 한글자는 모르며 다음에 i자가 나오며
아울러 뒷글자는 뭐이어도 상관없는 문자열을 검색 한다면?


SELECT stor_name FROM stores
WHERE stor_name LIKE 'E_i%'

다음으로 첫자는 B로 시작하며 다음에 a자가 없고 아울러 뒷글자가 뭐라도 상관없는
문자열을 검색할 경우는?


SELECT stor_name FROM stores
WHERE stor_name LIKE 'B[^a]%'

의 식이지요.

여기서 짚으셔야 할 것은?
가능하시면 문자열의 비교에는 like를 사용하셔서 처리 하시면 좋다는 것 입니다.
아울러 문자열을 비교한 수치 데이터형에는 = 을 사용하시거나 < 또는 > 의 비교 이구요


끝으로 복습 차원에서 약간더 복잡한 결과의 선택 입니다.


SELECT title_id, title, pub_id, price, pubdate
FROM titles
WHERE (title LIKE 'T%' OR pub_id = '0877') AND
(price > $16.00)

SELECT title_id, title, pub_id, price, pubdate
FROM titles
WHERE (title LIKE 'T%') OR (pub_id = '0877' AND price > $16.00)

SELECT title_id, title, pub_id, price, pubdate
FROM titles
WHERE title LIKE 'T%' OR pub_id = '0877' AND
(price > $16.00)

결과의 실행순서를 먼저 잘 생각해 보세요.
아울러 문자열에 대한 검색과 수치형의 혼합 검색 조건역시 입니다.
찬찬히 판단해 보시면? 느낌이 오실 겁니다

이번은 많이 사용하는 조건을 이용한 데이터 검색을 보셨습니다.
수고하셨습니다


WHERE절의 조건에 의한 행의 검색 문서의 끝입니다

  0
3500