본문 바로가기
학원수업/1월

오라클 시험 오답노트(ERWin)

by 코딩마스터^^ 2023. 1. 6.

 

문제 2

2. 2001020405_19v4.2 데이터베이스 생성하기
점수 (40.0점)
아래 테이블이 있다는 가정하에 다음 조건에 맞는 사원을 조회하려고 SQL구문을 작성했는데 제대로된 결과가

출력되지 않았다. SQL구문을 보고 문제를 찾고 원인(20점)에 작성하고 제대로된 SQL문을 조치사항(30점)에 작성하시오. (총 50점)

검색조건

DEPT_CODE가 D9이거나 D6이고 SALARY이 300만원 이상이고 BONUS가 있고

남자이고 이메일주소가 _ 앞에 3글자 있는

사원의 EMP_NAME, EMP_NO, DEPT_CODE, SALARY를 조회

 

작성된 쿼리구문

SELECT EMP_NAME, EMP_NO, DEPT_CODE, SALARY

FROM EMPLOYEE

WHERE DEPT_CODE='D9' OR DEPT_CODE='D6' AND SALARY > 3000000

AND EMAIL LIKE '____%' AND BONUS IS NULL;

 

* 5개의 문제점이 있음

 

나의 오답

select emp_name, emp_no, dept_CODE, SALARY  
from employee
where dept_code='D9' and dept_code='D6' --문제1
            and salary>=3000000--문제 2
            and email like '%___#_%' escape '#'--문제3
            and bonus is not null--문제4
           and emp_no like '%-1%' ;--문제5
           --남자...

 

문제의 테이블을 ERWin으로 만들자

저장하고

키위에 넣었다. 토드에서 확인

샘플 데이터 넣기

 

 

or이 and보다 나중에 처리가 된다. 그래서 or을 먼저 하고싶다면 ( )를 사용해야한다.

 

ename은 원래 인덱스가 없다. PK아니기 때문

그런데 인덱스를 만들어줬다.

 

ename을 null이 아닐때 실행하니까 정렬이 되었다.

그런데 인덱스 넣고 난 후에도 그냥 18번 실행하니까 정렬이 안됐다.

왜 그럴까...?

 

인덱스가 있어도 조건절이 없으면 사용 불가능 하다.

아무 조건이라도 있을때 옵티마이저가 인덱스를 사용한다.

순서가 중요하다. 그래서 

이렇게 많이 쓴다.

 

SUBSTR()

SUBSTR은 스트링을 원하는데로 잘라주는 함수이다.

(자를스트링, 시작, 끝)

LIKE ESCAPE

내 오답처럼 이렇게 했을때는 앞에도 %가 있기때문에 아무거나 올수있다.

%가 아무거나 올 수 있다는 뜻이다.

그래서 이렇게 해야한다.

특수기호는 ESCAPE할때 아무거나 써도 된다.

 

남자 필터 적용할때에

나처럼 이렇게 해도된다.^^

댓글