문제 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할때 아무거나 써도 된다.
남자 필터 적용할때에
나처럼 이렇게 해도된다.^^
'학원수업 > 1월' 카테고리의 다른 글
01/09 국비학원 31회차 오라클수업(Join) (0) | 2023.01.09 |
---|---|
01/06 국비학원 30회차 오라클수업 (0) | 2023.01.06 |
01/05 국비학원 29회차 오라클수업 (0) | 2023.01.05 |
01/04 국비학원 28회차 오라클수업 (0) | 2023.01.04 |
01/03 자바 복습 - 디비연동(List, Map) (0) | 2023.01.03 |
댓글