'문자열%' 과 '문자열_%' 차이점이 궁금합니다 0 1 1,803

by 깨순 [2015.11.18 15:58:36]


예를 들어서...

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_%' 일 때랑

무슨 차이인지 대충 감은 오는데 남에게 설명하려니 뭐라고 말해야할지...

명확하게 어떤 알고리즘 때문에 차이가 나는지 궁금합니다ㅠ

 

by 마농 [2015.11.18 16:14:02]

'%' 와 '_' 는 LIKE 검색시에만 의미((%)모든문자열, (_)모든문자)있구요.
이퀄(=) 검색시에는 의미없는 그냥 그대로의 문자입니다.
J 로 시작하는것까지 검색하려면 J 다음 문자인 K 보다 작다라는 조건을 쓰셔야 합니다.


숫자나 날짜들과 같이 수, 시간 등을 나타내는 값은 그 자체로 크기비교가 가능합니다.
그러나 문자는 량으로 표현 안되기 때문에 크기 비교가 안되죠.
문자는 량이 없으므로 아스키코드로 비교합니다.
문자열의 크기 비교는 앞글자부터 차례로 한글자씩 비교합니다.
다음 쿼리로 각 문자의 아스키코드를 확인해 보세요.

SELECT ASCII('A') a
     , ASCII('Z') z
     , ASCII('J') j
     , ASCII('%') "%"
     , ASCII('_') "_"
  FROM dual
;

 

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