예를 들어서...
SCOTT.EMP 테이블에서
ENAME 컬럼값이 B~J 로 시작하는 사원들의 정보를 조회한다고 했을때
ADAMS
ALLEN
BLAKE
CLARK
FORD
JAMES
JONES
KING
MARTIN
MILLER
SCOTT
SMITH
TURNER
WARD
조건절만 다르게 해서 쿼리를 2개 짜서 돌려봤는데,
<쿼리1>
SELECT *
FROM EMP
WHERE ENAME >= 'B%'
AND ENAME <= 'J%'
ORDER BY ENAME;
BLAKE
CLARK
FORD
단순하게 생각하면 J% 로 조건을 줬으니깐 J로 시작하는 ENAME값들이 나올 줄 알았는데
쿼리 돌려보니 아니었구요...
<쿼리2>
SELECT *
FROM EMP
WHERE ENAME >= 'B%'
AND ENAME <= 'J_%' ;
BLAKE
CLARK
FORD
JAMES
JONES
J_% 로 조건을 주니깐 J로 시작하는 값들이 조회되어 나오더라구요...
ENAME <= 'J%' 일 때랑
ENAME <= 'J_%' 일 때랑
무슨 차이인지 대충 감은 오는데 남에게 설명하려니 뭐라고 말해야할지...
명확하게 어떤 알고리즘 때문에 차이가 나는지 궁금합니다ㅠ
'%' 와 '_' 는 LIKE 검색시에만 의미((%)모든문자열, (_)모든문자)있구요.
이퀄(=) 검색시에는 의미없는 그냥 그대로의 문자입니다.
J 로 시작하는것까지 검색하려면 J 다음 문자인 K 보다 작다라는 조건을 쓰셔야 합니다.
숫자나 날짜들과 같이 수, 시간 등을 나타내는 값은 그 자체로 크기비교가 가능합니다.
그러나 문자는 량으로 표현 안되기 때문에 크기 비교가 안되죠.
문자는 량이 없으므로 아스키코드로 비교합니다.
문자열의 크기 비교는 앞글자부터 차례로 한글자씩 비교합니다.
다음 쿼리로 각 문자의 아스키코드를 확인해 보세요.
SELECT ASCII('A') a , ASCII('Z') z , ASCII('J') j , ASCII('%') "%" , ASCII('_') "_" FROM dual ;