데이터베이스 이론으로 배우고 실제로 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부터 시작하는 사람이 나오는겁니다..
>= 아니고 >라썼는데 왜 이런 현상이 일어나는 걸까요..?
문자열 비교시 앞쪽 문자부터 시작해서 각자리 문자의 아스키 값을 비교합니다.
'%'는 아스키값이 37이고 I는 73입니다.
따라서 KI > K% 조건을 만족하므로 KING이 결과값으로 나옵니다.
'이름이 K로 시작하는 사람보다 높은 이름을 가진 사람의 모든 정보를출력하라.'
위 문제의 의미가 K는 제외하고 L로 시작하는 사람을 의미했다면
ENAME > 'K%'는 틀린 정답이겠구요.
만약 K로 시작하는 사람을 의미했다면 '%'는 있을 필요가 없고
ENAME >= 'K' 로 했어도 되었겠네요.
다만 특수기호를 사용하면서까지 정답을 만든 것으로 보아
아마도 K라는 글자를 쿼리에 넣으면서 L로 시작하는 사람부터 표현하려고 했는데 그렇다면
알파벳보다 아스키값이 작은 '%'를 사용할 게 아니라 알파벳 이후에 나오는 특수기호를 사용했다면
정답이었겠네요.
ENAME > 'K~' 이런 식으로요.