BETWEEN 연산자에서 문자열로 비교가 가능하던데 어떻게 비교가 되는건가요?! 0 2 2,311

by 김대식 [PL/SQL] BETWEEN 문자열비교 [2017.03.03 19:33:14]


12312312321.PNG (24,849Bytes)

SELECT * FROM emp
WHERE ename BETWEEN 'A' AND 'Z'

라는 명령문이 있다면 어떻게 비교가 되는지 궁금합니다!!

또한 emp 테이블에 ename이 A,B,C 이렇게 저장된게 아니라

SCOTT, SMITH 이렇게 등록이 되어있는데 아래사진처럼 모든 튜플이 검색됩니다!!

 

왜 그런건가요?!!

by jkson [2017.03.04 08:47:14]
select *
from emp
where enmae between 'A' and 'Z'


->

select *
from emp
where ename >= 'A' and ename <= 'Z'

동일한 의미입니다.

따라서 두 조건에 만족하는 데이터는 모두 나오게 되겠죠.

문자열 비교에 대해 간단히 설명해 드리면

제일 앞자리부터 제일 뒷자리까지 순차적으로 한자리씩 비교하게 되며

비교하는 양쪽 문자열이 서로 다른 값이 나올 때까지 비교하게 됩니다.

이때 문자 비교는 ASCII 값으로 비교하게 됩니다.

select ascii('a'), ascii('A') from dual

'a' -> 97과 'A' -> 65로 'a' 가 더 큰 값이 됩니다.

만약 짧은 쪽 문자열 마지막 글자까지 비교했는데 같다면

긴 쪽 문자열이 더 크다고 판단합니다.

첨부하신 그림에서 'A' 와 'ALLEN'을 비교하게 되면

첫 자리는 똑같은데 'ALLEN'이 'A'보다 길이가 길어서 'ALLEN'이 큰 값이 되는 것입니다.

따라서 위와 같은 조건으로 검색하게 되면 이름이 'ZARD'라는 사람이 있다면 검색 결과에

나오지 않게 되겠죠.


by 김대식 [2017.03.04 22:16:11]

한번에 이해했습니다!! 감사합니다!!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입