오라클 기초예제라고 떠돌고 다니는 문제 질문합니다.. 0 1 849

by 오라촙 [Oracle 기초] [2017.05.29 20:11:02]


데이터베이스 이론으로 배우고 실제로 cmd켜서 ... 하는건 처음이라 잘 모르는 상태이고

검색 해서 알아보려고 최대한 노력을 했는데 잘 안되서 ㅠㅠ 질문드려봅니다..

9. 이름이 K로 시작하는 사람보다 높은 이름을 가진 사람의 모든 정보를출력하라.

해답
select * from emp where ename > 'K%';
 

라는 문제인데 해답이 >'k%'라고 되어있습니다.

이랬더니 

SQL> select * from emp where ename > 'K%';

     EMPNO ENAME                JOB                       MGR HIREDATE        SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------- ---------- ---------- ----------
      7369 SMITH                CLERK                    7902 80/12/17        800                    20
      7521 WARD                 SALESMAN                 7698 81/02/22       1250        500         30
      7654 MARTIN               SALESMAN                 7698 81/09/28       1250       1400         30
      7788 SCOTT                ANALYST                  7566 82/12/09       3000                    20
      7839 KING                 PRESIDENT                     81/11/17       5000                    10
      7844 TURNER               SALESMAN                 7698 81/09/08       1500          0         30
      7934 MILLER               CLERK                    7782 82/01/23       1300                    10

7 rows selected.

king 이라는 사람까지 출력이 되더라구요 그러니깐 k'보다' 높다는 조건이 지켜지지 않았다는거죠..

SQL> select * from emp where ename > 'L%';

     EMPNO ENAME                JOB                       MGR HIREDATE        SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------- ---------- ---------- ----------
      7369 SMITH                CLERK                    7902 80/12/17        800                    20
      7521 WARD                 SALESMAN                 7698 81/02/22       1250        500         30
      7654 MARTIN               SALESMAN                 7698 81/09/28       1250       1400         30
      7788 SCOTT                ANALYST                  7566 82/12/09       3000                    20
      7844 TURNER               SALESMAN                 7698 81/09/08       1500          0         30
      7934 MILLER               CLERK                    7782 82/01/23       1300                    10

6 rows selected.

 

그랬더니 혹시나싶어서 k다음의 L이라고 바꿔서 했더니 그제서야 문제대로 K빠지고  L부터 시작하는 사람이 나오는겁니다..

>= 아니고 >라썼는데 왜 이런 현상이 일어나는 걸까요..?

by jkson [2017.05.29 20:35:17]

문자열 비교시 앞쪽 문자부터 시작해서 각자리 문자의 아스키 값을 비교합니다.

'%'는 아스키값이 37이고 I는 73입니다.

따라서 KI > K% 조건을 만족하므로 KING이 결과값으로 나옵니다.

'이름이 K로 시작하는 사람보다 높은 이름을 가진 사람의 모든 정보를출력하라.'

위 문제의 의미가 K는 제외하고 L로 시작하는 사람을 의미했다면

ENAME > 'K%'는 틀린 정답이겠구요.

만약 K로 시작하는 사람을 의미했다면 '%'는 있을 필요가 없고

ENAME >= 'K' 로 했어도 되었겠네요.

다만 특수기호를 사용하면서까지 정답을 만든 것으로 보아

아마도 K라는 글자를 쿼리에 넣으면서 L로 시작하는 사람부터 표현하려고 했는데 그렇다면

알파벳보다 아스키값이 작은 '%'를 사용할 게 아니라 알파벳 이후에 나오는 특수기호를 사용했다면

정답이었겠네요.

ENAME > 'K~' 이런 식으로요.

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